+ 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);
|
||||
pDoc->createView("View3DIv");
|
||||
pDoc->createView(View3DInventor::getClassTypeId());
|
||||
qApp->processEvents(); // make sure to show the window stuff on the right place
|
||||
}
|
||||
|
||||
|
|
|
@ -1576,7 +1576,7 @@ StdCmdViewCreate::StdCmdViewCreate()
|
|||
|
||||
void StdCmdViewCreate::activated(int iMsg)
|
||||
{
|
||||
getActiveGuiDocument()->createView("View3DIv");
|
||||
getActiveGuiDocument()->createView(View3DInventor::getClassTypeId());
|
||||
getActiveGuiDocument()->getActiveView()->viewAll();
|
||||
}
|
||||
|
||||
|
|
|
@ -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>
|
||||
|
@ -920,21 +921,24 @@ 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->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();
|
||||
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());
|
||||
}
|
||||
|
||||
View3DInventor* view3D = new View3DInventor(this, getMainWindow(), shareWidget);
|
||||
if (firstView) {
|
||||
std::string overrideMode = firstView->getViewer()->getOverrideMode();
|
||||
view3D->getViewer()->setOverrideMode(overrideMode);
|
||||
break;
|
||||
}
|
||||
|
||||
// attach the viewprovider
|
||||
|
@ -946,7 +950,6 @@ void Document::createView(const char* sType)
|
|||
view3D->getViewer()->addViewProvider(It2->second);
|
||||
|
||||
const char* name = getDocument()->Label.getValue();
|
||||
|
||||
QString title = QString::fromAscii("%1 : %2[*]")
|
||||
.arg(QString::fromUtf8(name)).arg(d->_iWinCount++);
|
||||
|
||||
|
@ -956,6 +959,7 @@ void Document::createView(const char* sType)
|
|||
view3D->resize(400, 300);
|
||||
getMainWindow()->addWindow(view3D);
|
||||
}
|
||||
}
|
||||
|
||||
void Document::attachView(Gui::BaseView* pcView, bool bPassiv)
|
||||
{
|
||||
|
|
|
@ -142,7 +142,7 @@ public:
|
|||
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
|
||||
|
|
|
@ -98,7 +98,8 @@ 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);
|
||||
|
@ -111,34 +112,42 @@ View3DInventor::View3DInventor(Gui::Document* pcDocument, QWidget* parent, Qt::W
|
|||
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);
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -297,16 +297,16 @@ public:
|
|||
|
||||
|
||||
// *************************************************************************
|
||||
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")
|
||||
{
|
||||
|
|
|
@ -120,8 +120,8 @@ public:
|
|||
};
|
||||
//@}
|
||||
|
||||
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();
|
||||
|
|
Loading…
Reference in New Issue
Block a user