Skip to content

Commit

Permalink
+ share GL widgets when creating further 3d views of a document
Browse files Browse the repository at this point in the history
  • Loading branch information
wwmayer committed Oct 15, 2014
1 parent 8711bdd commit 7422f07
Show file tree
Hide file tree
Showing 8 changed files with 63 additions and 50 deletions.
2 changes: 1 addition & 1 deletion src/Gui/Application.cpp
Expand Up @@ -641,7 +641,7 @@ void Application::slotNewDocument(const App::Document& Doc)


signalNewDocument(*pDoc);
pDoc->createView("View3DIv");
pDoc->createView(View3DInventor::getClassTypeId());
qApp->processEvents(); // make sure to show the window stuff on the right place
}

Expand Down
2 changes: 1 addition & 1 deletion src/Gui/CommandView.cpp
Expand Up @@ -1576,7 +1576,7 @@ StdCmdViewCreate::StdCmdViewCreate()

void StdCmdViewCreate::activated(int iMsg)
{
getActiveGuiDocument()->createView("View3DIv");
getActiveGuiDocument()->createView(View3DInventor::getClassTypeId());
getActiveGuiDocument()->getActiveView()->viewAll();
}

Expand Down
66 changes: 35 additions & 31 deletions src/Gui/Document.cpp
Expand Up @@ -27,6 +27,7 @@
# include <qapplication.h>
# include <qdir.h>
# include <qfileinfo.h>
# include <QGLWidget>
# include <qmessagebox.h>
# include <qstatusbar.h>
# include <boost/signals.hpp>
Expand Down Expand Up @@ -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());

//get first view override mode and copy
std::list<MDIView*> theViews = this->getMDIViews();
std::list<MDIView*>::iterator viewIt;
for (viewIt = theViews.begin(); viewIt != theViews.end(); ++viewIt)
{
View3DInventor *tempView = dynamic_cast<View3DInventor *>(*viewIt);
if (!tempView)
continue;
std::string overrideMode = tempView->getViewer()->getOverrideMode();
view3D->getViewer()->setOverrideMode(overrideMode);
break;
}

// 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);
if (!typeId.isDerivedFrom(MDIView::getClassTypeId()))
return;

const char* name = getDocument()->Label.getValue();
std::list<MDIView*> theViews = this->getMDIViewsOfType(typeId);
if (typeId == View3DInventor::getClassTypeId()) {
View3DInventor* firstView = 0;
QGLWidget* shareWidget = 0;
if (!theViews.empty()) {
firstView = dynamic_cast<View3DInventor*>(theViews.front());
shareWidget = qobject_cast<QGLWidget*>(firstView->getViewer()->getGLWidget());
}

QString title = QString::fromAscii("%1 : %2[*]")
.arg(QString::fromUtf8(name)).arg(d->_iWinCount++);
View3DInventor* view3D = new View3DInventor(this, getMainWindow(), shareWidget);
if (firstView) {
std::string overrideMode = firstView->getViewer()->getOverrideMode();
view3D->getViewer()->setOverrideMode(overrideMode);
}

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)
Expand Down
2 changes: 1 addition & 1 deletion src/Gui/Document.h
Expand Up @@ -142,7 +142,7 @@ class GuiExport Document : public Base::Persistence
Gui::MDIView* getActiveView(void) const;
Gui::MDIView* getViewOfViewProvider(Gui::ViewProvider*) const;
/// Creat a new view
void createView(const char* sType);
void createView(const Base::Type& typeId);
/** send messages to the active view
* Send a specific massage to the active view and is able to recive a
* return massage
Expand Down
27 changes: 18 additions & 9 deletions src/Gui/View3DInventor.cpp
Expand Up @@ -98,47 +98,56 @@ void GLOverlayWidget::paintEvent(QPaintEvent* ev)

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)
{
stack = new QStackedWidget(this);
// important for highlighting
setMouseTracking(true);
// accept drops on the window, get handled in dropEvent, dragEnterEvent
setAcceptDrops(true);

// attach parameter Observer
hGrp = App::GetApplication().GetParameterGroupByPath("User parameter:BaseApp/Preferences/View");
hGrp->Attach(this);

//anti aliasing settings
//anti-aliasing settings
QGLFormat f;
bool smoothing = false;
bool glformat = false;
switch( hGrp->GetInt("AntiAliasing",0) ) {
case View3DInventorViewer::MSAA2x:
glformat = true;
f.setSampleBuffers(true);
f.setSamples(2);
_viewer = new View3DInventorViewer(f,this);
break;
case View3DInventorViewer::MSAA4x:
glformat = true;
f.setSampleBuffers(true);
f.setSamples(4);
_viewer = new View3DInventorViewer(f,this);
break;
case View3DInventorViewer::MSAA8x:
glformat = true;
f.setSampleBuffers(true);
f.setSamples(8);
_viewer = new View3DInventorViewer(f,this);
break;
case View3DInventorViewer::Smoothing:
_viewer = new View3DInventorViewer(this);
_viewer->getSoRenderManager()->getGLRenderAction()->setSmoothing(true);
smoothing = true;
break;
case View3DInventorViewer::None:
default:
_viewer = new View3DInventorViewer(this);
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
#if !defined (NO_USE_QT_MDI_AREA)
_viewer->setDocument(this->_pcDocument);
Expand Down
2 changes: 1 addition & 1 deletion src/Gui/View3DInventor.h
Expand Up @@ -67,7 +67,7 @@ class GuiExport View3DInventor : public MDIView, public ParameterGrp::ObserverTy
TYPESYSTEM_HEADER();

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();

/// Message handler
Expand Down
8 changes: 4 additions & 4 deletions src/Gui/View3DInventorViewer.cpp
Expand Up @@ -297,16 +297,16 @@ class SpaceNavigatorDevice : public Quarter::InputDevice {


// *************************************************************************
View3DInventorViewer::View3DInventorViewer(QWidget* parent)
: Quarter::SoQTQuarterAdaptor(parent), editViewProvider(0), navigation(0),
View3DInventorViewer::View3DInventorViewer(QWidget* parent, const QGLWidget* sharewidget)
: Quarter::SoQTQuarterAdaptor(parent, sharewidget), editViewProvider(0), navigation(0),
framebuffer(0), axisCross(0), axisGroup(0), editing(FALSE), redirected(FALSE),
allowredir(FALSE), overrideMode("As Is")
{
init();
};

View3DInventorViewer::View3DInventorViewer(const QGLFormat& format, QWidget* parent)
: Quarter::SoQTQuarterAdaptor(format, parent), editViewProvider(0), navigation(0),
View3DInventorViewer::View3DInventorViewer(const QGLFormat& format, QWidget* parent, const QGLWidget* sharewidget)
: Quarter::SoQTQuarterAdaptor(format, parent, sharewidget), editViewProvider(0), navigation(0),
framebuffer(0), axisCross(0), axisGroup(0), editing(FALSE), redirected(FALSE),
allowredir(FALSE), overrideMode("As Is")
{
Expand Down
4 changes: 2 additions & 2 deletions src/Gui/View3DInventorViewer.h
Expand Up @@ -120,8 +120,8 @@ class GuiExport View3DInventorViewer : public Quarter::SoQTQuarterAdaptor, publi
};
//@}

View3DInventorViewer (QWidget *parent);
View3DInventorViewer (const QGLFormat& format, QWidget *parent);
View3DInventorViewer (QWidget *parent, const QGLWidget* sharewidget = 0);
View3DInventorViewer (const QGLFormat& format, QWidget *parent, const QGLWidget* sharewidget = 0);
virtual ~View3DInventorViewer();

void init();
Expand Down

0 comments on commit 7422f07

Please sign in to comment.