X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FXGUI%2FXGUI_ViewerProxy.cpp;h=955813a423b61bf8edfeb398ec3c4cb52bf60f51;hb=327f5bbd915fb32d21f2e524a8d97536e0e5dd4b;hp=a4a55cca5f10ed96c784d60b5f06ca19b55dbb28;hpb=a07cdcdf600fc224bc862686439dfbe01d72524a;p=modules%2Fshaper.git diff --git a/src/XGUI/XGUI_ViewerProxy.cpp b/src/XGUI/XGUI_ViewerProxy.cpp index a4a55cca5..955813a42 100644 --- a/src/XGUI/XGUI_ViewerProxy.cpp +++ b/src/XGUI/XGUI_ViewerProxy.cpp @@ -10,6 +10,8 @@ #include #include +#include + XGUI_ViewerProxy::XGUI_ViewerProxy(XGUI_Workshop* theParent) : ModuleBase_IViewer(theParent), myWorkshop(theParent) @@ -40,18 +42,21 @@ Handle(V3d_View) XGUI_ViewerProxy::activeView() const return myWorkshop->salomeConnector()->viewer()->activeView(); } else { AppElements_Viewer* aViewer = myWorkshop->mainWindow()->viewer(); - return (aViewer->activeViewWindow()) ? aViewer->activeViewWindow()->viewPort()->getView() : + return (aViewer->activeViewWindow()) ? aViewer->activeViewWindow()->viewPortApp()->getView() : Handle(V3d_View)(); } } -void XGUI_ViewerProxy::setViewProjection(double theX, double theY, double theZ) +void XGUI_ViewerProxy::setViewProjection(double theX, double theY, double theZ, double theTwist) { Handle(V3d_View) aView3d = activeView(); if (!aView3d.IsNull()) { aView3d->SetProj(theX, theY, theZ); + aView3d->SetTwist( theTwist ); aView3d->FitAll(0.01, true); aView3d->SetZSize(0.); + if (aView3d->Depth() < 0.1) + aView3d->DepthFitAll(); } } @@ -62,7 +67,7 @@ void XGUI_ViewerProxy::fitAll() } else { AppElements_Viewer* aViewer = myWorkshop->mainWindow()->viewer(); if (aViewer->activeViewWindow()) - aViewer->activeViewWindow()->viewPort()->fitAll(); + aViewer->activeViewWindow()->viewPortApp()->fitAll(); } } @@ -79,7 +84,7 @@ void XGUI_ViewerProxy::connectToViewer() this, SIGNAL(deleteView(ModuleBase_IViewWindow*))); connect(aViewer, SIGNAL(viewCreated(ModuleBase_IViewWindow*)), - this, SIGNAL(viewCreated(ModuleBase_IViewWindow*))); + this, SLOT(onViewCreated(ModuleBase_IViewWindow*))); connect(aViewer, SIGNAL(activated(ModuleBase_IViewWindow*)), this, SIGNAL(activated(ModuleBase_IViewWindow*))); @@ -103,9 +108,11 @@ void XGUI_ViewerProxy::connectToViewer() this, SIGNAL(keyRelease(ModuleBase_IViewWindow*, QKeyEvent*))); connect(aViewer, SIGNAL(selectionChanged()), this, SIGNAL(selectionChanged())); + + connect(aViewer, SIGNAL(viewTransformed(int)), this, SIGNAL(viewTransformed(int))); + connect(aViewer, SIGNAL(contextMenuRequested(QContextMenuEvent*)), this, SIGNAL(contextMenuRequested(QContextMenuEvent*))); - } else { AppElements_Viewer* aViewer = myWorkshop->mainWindow()->viewer(); @@ -147,6 +154,16 @@ void XGUI_ViewerProxy::connectToViewer() } } +bool XGUI_ViewerProxy::eventFilter(QObject *theObject, QEvent *theEvent) +{ + if (theEvent->type() == QEvent::Enter) { + emit enterViewPort(); + } + else if (theEvent->type() == QEvent::Leave) { + emit leaveViewPort(); + } + return ModuleBase_IViewer::eventFilter(theObject, theEvent); +} void XGUI_ViewerProxy::onTryCloseView(AppElements_ViewWindow* theWnd) { @@ -155,11 +172,29 @@ void XGUI_ViewerProxy::onTryCloseView(AppElements_ViewWindow* theWnd) void XGUI_ViewerProxy::onDeleteView(AppElements_ViewWindow* theWnd) { + if (myWindowScale.contains(theWnd->v3dView())) + myWindowScale.remove (theWnd->v3dView()); emit deleteView(theWnd); } +void XGUI_ViewerProxy::onViewCreated(ModuleBase_IViewWindow* theWnd) +{ + theWnd->viewPort()->installEventFilter(this); + + myWindowScale.insert (theWnd->v3dView(), theWnd->v3dView()->Camera()->Scale()); + + emit viewCreated(theWnd); +} + void XGUI_ViewerProxy::onViewCreated(AppElements_ViewWindow* theWnd) { + theWnd->viewPort()->installEventFilter(this); + + connect(theWnd, SIGNAL(vpTransformationFinished(AppElements_ViewWindow::OperationType)), + this, SLOT(onViewTransformed(AppElements_ViewWindow::OperationType))); + + myWindowScale.insert (theWnd->v3dView(), theWnd->v3dView()->Camera()->Scale()); + emit viewCreated(theWnd); } @@ -240,6 +275,16 @@ bool XGUI_ViewerProxy::isMultiSelectionEnabled() const } } +//*************************************** +bool XGUI_ViewerProxy::enableDrawMode(bool isEnabled) +{ + if (myWorkshop->isSalomeMode()) { + return myWorkshop->salomeConnector()->viewer()->enableDrawMode(isEnabled); + } else { + return myWorkshop->mainWindow()->viewer()->enableDrawMode(isEnabled); + } +} + //*************************************** void XGUI_ViewerProxy::addSelectionFilter(const Handle(SelectMgr_Filter)& theFilter) { @@ -252,6 +297,12 @@ void XGUI_ViewerProxy::removeSelectionFilter(const Handle(SelectMgr_Filter)& the myWorkshop->displayer()->removeSelectionFilter(theFilter); } +//*************************************** +bool XGUI_ViewerProxy::hasSelectionFilter(const Handle(SelectMgr_Filter)& theFilter) +{ + return myWorkshop->displayer()->hasSelectionFilter(theFilter); +} + //*************************************** void XGUI_ViewerProxy::clearSelectionFilters() { @@ -263,3 +314,38 @@ void XGUI_ViewerProxy::update() { myWorkshop->displayer()->updateViewer(); } + +//*************************************** +bool XGUI_ViewerProxy::canDragByMouse() const +{ + if (myWorkshop->isSalomeMode()) { + ModuleBase_IViewer* aViewer = myWorkshop->salomeConnector()->viewer(); + return aViewer->canDragByMouse(); + } else { + return true; + } +} + +//*************************************** +void XGUI_ViewerProxy::onViewTransformed(AppElements_ViewWindow::OperationType theType) +{ + emit viewTransformed((int) theType); +} + + +//*************************************** +void XGUI_ViewerProxy::Zfitall() +{ + if (myWorkshop->isSalomeMode()) { + myWorkshop->salomeConnector()->viewer()->Zfitall(); + } else { + AppElements_Viewer* aViewer = myWorkshop->mainWindow()->viewer(); + AppElements_ViewWindow* aView = aViewer->activeViewWindow(); + if (aView) { + Handle(V3d_View) aView3d = aView->v3dView(); + aView3d->ZFitAll(); + if (aView3d->Depth() < 0.1) + aView3d->DepthFitAll(); + } + } +} \ No newline at end of file