+ share GL widgets when creating further 3d views of a document
This commit is contained in:
parent
8711bdd78f
commit
7422f073ea
|
@ -641,7 +641,7 @@ void Application::slotNewDocument(const App::Document& Doc)
|
||||||
|
|
||||||
|
|
||||||
signalNewDocument(*pDoc);
|
signalNewDocument(*pDoc);
|
||||||
pDoc->createView("View3DIv");
|
pDoc->createView(View3DInventor::getClassTypeId());
|
||||||
qApp->processEvents(); // make sure to show the window stuff on the right place
|
qApp->processEvents(); // make sure to show the window stuff on the right place
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1576,7 +1576,7 @@ StdCmdViewCreate::StdCmdViewCreate()
|
||||||
|
|
||||||
void StdCmdViewCreate::activated(int iMsg)
|
void StdCmdViewCreate::activated(int iMsg)
|
||||||
{
|
{
|
||||||
getActiveGuiDocument()->createView("View3DIv");
|
getActiveGuiDocument()->createView(View3DInventor::getClassTypeId());
|
||||||
getActiveGuiDocument()->getActiveView()->viewAll();
|
getActiveGuiDocument()->getActiveView()->viewAll();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -27,6 +27,7 @@
|
||||||
# include <qapplication.h>
|
# include <qapplication.h>
|
||||||
# include <qdir.h>
|
# include <qdir.h>
|
||||||
# include <qfileinfo.h>
|
# include <qfileinfo.h>
|
||||||
|
# include <QGLWidget>
|
||||||
# include <qmessagebox.h>
|
# include <qmessagebox.h>
|
||||||
# include <qstatusbar.h>
|
# include <qstatusbar.h>
|
||||||
# include <boost/signals.hpp>
|
# include <boost/signals.hpp>
|
||||||
|
@ -920,41 +921,44 @@ void Document::addRootObjectsToGroup(const std::vector<App::DocumentObject*>& ob
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Document::createView(const char* sType)
|
void Document::createView(const Base::Type& typeId)
|
||||||
{
|
{
|
||||||
View3DInventor* view3D = new View3DInventor(this, getMainWindow());
|
if (!typeId.isDerivedFrom(MDIView::getClassTypeId()))
|
||||||
|
return;
|
||||||
|
|
||||||
//get first view override mode and copy
|
std::list<MDIView*> theViews = this->getMDIViewsOfType(typeId);
|
||||||
std::list<MDIView*> theViews = this->getMDIViews();
|
if (typeId == View3DInventor::getClassTypeId()) {
|
||||||
std::list<MDIView*>::iterator viewIt;
|
View3DInventor* firstView = 0;
|
||||||
for (viewIt = theViews.begin(); viewIt != theViews.end(); ++viewIt)
|
QGLWidget* shareWidget = 0;
|
||||||
{
|
if (!theViews.empty()) {
|
||||||
View3DInventor *tempView = dynamic_cast<View3DInventor *>(*viewIt);
|
firstView = dynamic_cast<View3DInventor*>(theViews.front());
|
||||||
if (!tempView)
|
shareWidget = qobject_cast<QGLWidget*>(firstView->getViewer()->getGLWidget());
|
||||||
continue;
|
}
|
||||||
std::string overrideMode = tempView->getViewer()->getOverrideMode();
|
|
||||||
view3D->getViewer()->setOverrideMode(overrideMode);
|
View3DInventor* view3D = new View3DInventor(this, getMainWindow(), shareWidget);
|
||||||
break;
|
if (firstView) {
|
||||||
|
std::string overrideMode = firstView->getViewer()->getOverrideMode();
|
||||||
|
view3D->getViewer()->setOverrideMode(overrideMode);
|
||||||
|
}
|
||||||
|
|
||||||
|
// attach the viewprovider
|
||||||
|
std::map<const App::DocumentObject*,ViewProviderDocumentObject*>::const_iterator It1;
|
||||||
|
for (It1=d->_ViewProviderMap.begin();It1!=d->_ViewProviderMap.end();++It1)
|
||||||
|
view3D->getViewer()->addViewProvider(It1->second);
|
||||||
|
std::map<std::string,ViewProvider*>::const_iterator It2;
|
||||||
|
for (It2=d->_ViewProviderMapAnnotation.begin();It2!=d->_ViewProviderMapAnnotation.end();++It2)
|
||||||
|
view3D->getViewer()->addViewProvider(It2->second);
|
||||||
|
|
||||||
|
const char* name = getDocument()->Label.getValue();
|
||||||
|
QString title = QString::fromAscii("%1 : %2[*]")
|
||||||
|
.arg(QString::fromUtf8(name)).arg(d->_iWinCount++);
|
||||||
|
|
||||||
|
view3D->setWindowTitle(title);
|
||||||
|
view3D->setWindowModified(this->isModified());
|
||||||
|
view3D->setWindowIcon(QApplication::windowIcon());
|
||||||
|
view3D->resize(400, 300);
|
||||||
|
getMainWindow()->addWindow(view3D);
|
||||||
}
|
}
|
||||||
|
|
||||||
// attach the viewprovider
|
|
||||||
std::map<const App::DocumentObject*,ViewProviderDocumentObject*>::const_iterator It1;
|
|
||||||
for (It1=d->_ViewProviderMap.begin();It1!=d->_ViewProviderMap.end();++It1)
|
|
||||||
view3D->getViewer()->addViewProvider(It1->second);
|
|
||||||
std::map<std::string,ViewProvider*>::const_iterator It2;
|
|
||||||
for (It2=d->_ViewProviderMapAnnotation.begin();It2!=d->_ViewProviderMapAnnotation.end();++It2)
|
|
||||||
view3D->getViewer()->addViewProvider(It2->second);
|
|
||||||
|
|
||||||
const char* name = getDocument()->Label.getValue();
|
|
||||||
|
|
||||||
QString title = QString::fromAscii("%1 : %2[*]")
|
|
||||||
.arg(QString::fromUtf8(name)).arg(d->_iWinCount++);
|
|
||||||
|
|
||||||
view3D->setWindowTitle(title);
|
|
||||||
view3D->setWindowModified(this->isModified());
|
|
||||||
view3D->setWindowIcon(QApplication::windowIcon());
|
|
||||||
view3D->resize(400, 300);
|
|
||||||
getMainWindow()->addWindow(view3D);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void Document::attachView(Gui::BaseView* pcView, bool bPassiv)
|
void Document::attachView(Gui::BaseView* pcView, bool bPassiv)
|
||||||
|
|
|
@ -142,7 +142,7 @@ public:
|
||||||
Gui::MDIView* getActiveView(void) const;
|
Gui::MDIView* getActiveView(void) const;
|
||||||
Gui::MDIView* getViewOfViewProvider(Gui::ViewProvider*) const;
|
Gui::MDIView* getViewOfViewProvider(Gui::ViewProvider*) const;
|
||||||
/// Creat a new view
|
/// Creat a new view
|
||||||
void createView(const char* sType);
|
void createView(const Base::Type& typeId);
|
||||||
/** send messages to the active view
|
/** send messages to the active view
|
||||||
* Send a specific massage to the active view and is able to recive a
|
* Send a specific massage to the active view and is able to recive a
|
||||||
* return massage
|
* return massage
|
||||||
|
|
|
@ -98,7 +98,8 @@ void GLOverlayWidget::paintEvent(QPaintEvent* ev)
|
||||||
|
|
||||||
TYPESYSTEM_SOURCE_ABSTRACT(Gui::View3DInventor,Gui::MDIView);
|
TYPESYSTEM_SOURCE_ABSTRACT(Gui::View3DInventor,Gui::MDIView);
|
||||||
|
|
||||||
View3DInventor::View3DInventor(Gui::Document* pcDocument, QWidget* parent, Qt::WFlags wflags)
|
View3DInventor::View3DInventor(Gui::Document* pcDocument, QWidget* parent,
|
||||||
|
const QGLWidget* sharewidget, Qt::WFlags wflags)
|
||||||
: MDIView(pcDocument, parent, wflags), _viewerPy(0)
|
: MDIView(pcDocument, parent, wflags), _viewerPy(0)
|
||||||
{
|
{
|
||||||
stack = new QStackedWidget(this);
|
stack = new QStackedWidget(this);
|
||||||
|
@ -111,34 +112,42 @@ View3DInventor::View3DInventor(Gui::Document* pcDocument, QWidget* parent, Qt::W
|
||||||
hGrp = App::GetApplication().GetParameterGroupByPath("User parameter:BaseApp/Preferences/View");
|
hGrp = App::GetApplication().GetParameterGroupByPath("User parameter:BaseApp/Preferences/View");
|
||||||
hGrp->Attach(this);
|
hGrp->Attach(this);
|
||||||
|
|
||||||
//anti aliasing settings
|
//anti-aliasing settings
|
||||||
QGLFormat f;
|
QGLFormat f;
|
||||||
|
bool smoothing = false;
|
||||||
|
bool glformat = false;
|
||||||
switch( hGrp->GetInt("AntiAliasing",0) ) {
|
switch( hGrp->GetInt("AntiAliasing",0) ) {
|
||||||
case View3DInventorViewer::MSAA2x:
|
case View3DInventorViewer::MSAA2x:
|
||||||
|
glformat = true;
|
||||||
f.setSampleBuffers(true);
|
f.setSampleBuffers(true);
|
||||||
f.setSamples(2);
|
f.setSamples(2);
|
||||||
_viewer = new View3DInventorViewer(f,this);
|
|
||||||
break;
|
break;
|
||||||
case View3DInventorViewer::MSAA4x:
|
case View3DInventorViewer::MSAA4x:
|
||||||
|
glformat = true;
|
||||||
f.setSampleBuffers(true);
|
f.setSampleBuffers(true);
|
||||||
f.setSamples(4);
|
f.setSamples(4);
|
||||||
_viewer = new View3DInventorViewer(f,this);
|
|
||||||
break;
|
break;
|
||||||
case View3DInventorViewer::MSAA8x:
|
case View3DInventorViewer::MSAA8x:
|
||||||
|
glformat = true;
|
||||||
f.setSampleBuffers(true);
|
f.setSampleBuffers(true);
|
||||||
f.setSamples(8);
|
f.setSamples(8);
|
||||||
_viewer = new View3DInventorViewer(f,this);
|
|
||||||
break;
|
break;
|
||||||
case View3DInventorViewer::Smoothing:
|
case View3DInventorViewer::Smoothing:
|
||||||
_viewer = new View3DInventorViewer(this);
|
smoothing = true;
|
||||||
_viewer->getSoRenderManager()->getGLRenderAction()->setSmoothing(true);
|
|
||||||
break;
|
break;
|
||||||
case View3DInventorViewer::None:
|
case View3DInventorViewer::None:
|
||||||
default:
|
default:
|
||||||
_viewer = new View3DInventorViewer(this);
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (glformat)
|
||||||
|
_viewer = new View3DInventorViewer(f, this, sharewidget);
|
||||||
|
else
|
||||||
|
_viewer = new View3DInventorViewer(this, sharewidget);
|
||||||
|
|
||||||
|
if (smoothing)
|
||||||
|
_viewer->getSoRenderManager()->getGLRenderAction()->setSmoothing(true);
|
||||||
|
|
||||||
// create the inventor widget and set the defaults
|
// create the inventor widget and set the defaults
|
||||||
#if !defined (NO_USE_QT_MDI_AREA)
|
#if !defined (NO_USE_QT_MDI_AREA)
|
||||||
_viewer->setDocument(this->_pcDocument);
|
_viewer->setDocument(this->_pcDocument);
|
||||||
|
|
|
@ -67,7 +67,7 @@ class GuiExport View3DInventor : public MDIView, public ParameterGrp::ObserverTy
|
||||||
TYPESYSTEM_HEADER();
|
TYPESYSTEM_HEADER();
|
||||||
|
|
||||||
public:
|
public:
|
||||||
View3DInventor(Gui::Document* pcDocument, QWidget* parent, Qt::WFlags wflags=0);
|
View3DInventor(Gui::Document* pcDocument, QWidget* parent, const QGLWidget* sharewidget = 0, Qt::WFlags wflags=0);
|
||||||
~View3DInventor();
|
~View3DInventor();
|
||||||
|
|
||||||
/// Message handler
|
/// Message handler
|
||||||
|
|
|
@ -297,16 +297,16 @@ public:
|
||||||
|
|
||||||
|
|
||||||
// *************************************************************************
|
// *************************************************************************
|
||||||
View3DInventorViewer::View3DInventorViewer(QWidget* parent)
|
View3DInventorViewer::View3DInventorViewer(QWidget* parent, const QGLWidget* sharewidget)
|
||||||
: Quarter::SoQTQuarterAdaptor(parent), editViewProvider(0), navigation(0),
|
: Quarter::SoQTQuarterAdaptor(parent, sharewidget), editViewProvider(0), navigation(0),
|
||||||
framebuffer(0), axisCross(0), axisGroup(0), editing(FALSE), redirected(FALSE),
|
framebuffer(0), axisCross(0), axisGroup(0), editing(FALSE), redirected(FALSE),
|
||||||
allowredir(FALSE), overrideMode("As Is")
|
allowredir(FALSE), overrideMode("As Is")
|
||||||
{
|
{
|
||||||
init();
|
init();
|
||||||
};
|
};
|
||||||
|
|
||||||
View3DInventorViewer::View3DInventorViewer(const QGLFormat& format, QWidget* parent)
|
View3DInventorViewer::View3DInventorViewer(const QGLFormat& format, QWidget* parent, const QGLWidget* sharewidget)
|
||||||
: Quarter::SoQTQuarterAdaptor(format, parent), editViewProvider(0), navigation(0),
|
: Quarter::SoQTQuarterAdaptor(format, parent, sharewidget), editViewProvider(0), navigation(0),
|
||||||
framebuffer(0), axisCross(0), axisGroup(0), editing(FALSE), redirected(FALSE),
|
framebuffer(0), axisCross(0), axisGroup(0), editing(FALSE), redirected(FALSE),
|
||||||
allowredir(FALSE), overrideMode("As Is")
|
allowredir(FALSE), overrideMode("As Is")
|
||||||
{
|
{
|
||||||
|
|
|
@ -120,8 +120,8 @@ public:
|
||||||
};
|
};
|
||||||
//@}
|
//@}
|
||||||
|
|
||||||
View3DInventorViewer (QWidget *parent);
|
View3DInventorViewer (QWidget *parent, const QGLWidget* sharewidget = 0);
|
||||||
View3DInventorViewer (const QGLFormat& format, QWidget *parent);
|
View3DInventorViewer (const QGLFormat& format, QWidget *parent, const QGLWidget* sharewidget = 0);
|
||||||
virtual ~View3DInventorViewer();
|
virtual ~View3DInventorViewer();
|
||||||
|
|
||||||
void init();
|
void init();
|
||||||
|
|
Loading…
Reference in New Issue
Block a user