From ccfdc4252488fa67f50effbd7a3405512a9681a3 Mon Sep 17 00:00:00 2001 From: vsr Date: Tue, 11 Dec 2012 11:43:47 +0000 Subject: [PATCH] Merge from V6_6_BR (V6_6_0rc2) 11/12/2012 --- CMakeLists.txt | 2 +- configure.ac | 2 +- doc/salome/gui/images/desktop.png | Bin 0 -> 154748 bytes doc/salome/gui/images/geomview-alt.png | Bin 74085 -> 0 bytes doc/salome/gui/input/salome_desktop.doc | 24 +- src/LightApp/LightApp_Application.cxx | 15 +- src/LightApp/LightApp_Application.h | 2 +- src/LightApp/LightApp_ShowHideOp.cxx | 2 +- src/OCCViewer/Makefile.am | 9 +- src/OCCViewer/OCCViewer_ViewFrame.cxx | 40 ++ src/OCCViewer/OCCViewer_ViewFrame.h | 8 +- src/OCCViewer/OCCViewer_ViewWindow.cxx | 302 ++++++++------- src/OCCViewer/OCCViewer_ViewWindow.h | 12 +- src/OCCViewer/resources/OCCViewer_images.ts | 4 - src/OCCViewer/resources/OCCViewer_msg_en.ts | 12 - src/OCCViewer/resources/OCCViewer_msg_fr.ts | 12 - src/Plot2d/Plot2d_ViewFrame.cxx | 18 +- src/Qtx/QtxMainWindow.cxx | 42 ++- src/Qtx/QtxMainWindow.h | 4 + src/SUIT/CMakeLists.txt | 2 + src/SUIT/Makefile.am | 17 +- src/SUIT/SUIT_CameraProperties.cxx | 357 ++++++++++++++++++ src/SUIT/SUIT_CameraProperties.h | 81 ++++ src/SUIT/SUIT_ExceptionHandler.cxx | 24 +- src/SUIT/SUIT_ExceptionHandler.h | 12 + src/SUIT/SUIT_ViewWindow.cxx | 222 ++++++++++- src/SUIT/SUIT_ViewWindow.h | 16 +- src/SUIT/resources/SUIT_images.ts | 4 + src/SUIT/resources/SUIT_msg_en.ts | 12 + src/SUIT/resources/SUIT_msg_fr.ts | 12 + .../resources/view_sync.png} | Bin src/SVTK/Makefile.am | 6 - src/SVTK/SVTK_ViewWindow.cxx | 241 +++++------- src/SVTK/SVTK_ViewWindow.h | 10 +- src/SVTK/resources/SVTK_images.ts | 4 - src/SVTK/resources/SVTK_msg_en.ts | 12 - src/SVTK/resources/SVTK_msg_fr.ts | 12 - src/SVTK/resources/vtk_view_sync.png | Bin 627 -> 0 bytes src/SalomeApp/resources/SalomeApp.xml | 2 +- src/Session/SALOME_Session_Server.cxx | 7 +- src/Session/Session_ServerLauncher.cxx | 10 + src/Session/Session_ServerLauncher.hxx | 1 + src/Session/Session_ServerThread.cxx | 8 +- src/Session/Session_ServerThread.hxx | 3 + src/TreeData/Test/Makefile.am | 19 +- src/VTKViewer/VTKViewer_GeometryFilter.cxx | 175 ++++++++- 46 files changed, 1338 insertions(+), 441 deletions(-) create mode 100644 doc/salome/gui/images/desktop.png delete mode 100755 doc/salome/gui/images/geomview-alt.png create mode 100644 src/SUIT/SUIT_CameraProperties.cxx create mode 100644 src/SUIT/SUIT_CameraProperties.h rename src/{OCCViewer/resources/occ_view_sync.png => SUIT/resources/view_sync.png} (100%) mode change 100755 => 100644 delete mode 100755 src/SVTK/resources/vtk_view_sync.png diff --git a/CMakeLists.txt b/CMakeLists.txt index 3284c0519..799ed6489 100755 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -39,7 +39,7 @@ SET(ENABLE_SUPERVGRAPHVIEWER ON) SET(ENABLE_QXGRAPHVIEWER ON) ENABLE_TESTING() -SET(VERSION "6.5.0") +SET(VERSION "6.6.0") SET(VERSION_DEV "1") SET(KERNEL_ROOT_DIR $ENV{KERNEL_ROOT_DIR}) diff --git a/configure.ac b/configure.ac index 379f5bc81..3ef5371cc 100644 --- a/configure.ac +++ b/configure.ac @@ -26,7 +26,7 @@ # Modified by : Marc Tajchman (CEA) # Modified by : Mikhail PONIKAROV (OCN) - autotools usage # -AC_INIT([Salome2 Project GUI module], [6.5.0], [webmaster.salome@opencascade.com], [SalomeGUI]) +AC_INIT([Salome2 Project GUI module], [6.6.0], [webmaster.salome@opencascade.com], [SalomeGUI]) AC_CONFIG_AUX_DIR(adm_local/unix/config_files) AC_CANONICAL_HOST AC_CANONICAL_TARGET diff --git a/doc/salome/gui/images/desktop.png b/doc/salome/gui/images/desktop.png new file mode 100644 index 0000000000000000000000000000000000000000..cb4d425923a86ad148a4c5a41bf7815a85e86f37 GIT binary patch literal 154748 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 parts of the SALOME Desktop:
  • Main menu - This is a set of context-sensitive menus, which will -be updated according the functionality of the loaded component. In -general, these menus contain all functional options of SALOME +be updated according to the functionality of the currently active component. In +general, these menus contain all functional options of SALOME platform.
  • -
  • Standard Toolbar - This toolbar contains icons allowing -creating/saving studies, correcting mistakes, copying/pasting -objects.
  • -
  • Components Toolbar - This toolbar is destined for uploading +
  • Standard toolbar - This toolbar contains standard actions +that allow creating new or opening existing study, saving study, deleting +objects etc.
  • +
  • Components toolbar - This toolbar allows activating components in SALOME platform.
  • -
  • Module Toolbar - This toolbar contains icons specific to the -loaded module.
  • -
  • Viewer Toolbar - This is a set of tools destined for visualization +
  • Module toolbars - These toolbars contain actions specific to the +currently active module.
  • +
  • Viewer toolbar - This is a set of tools destined for visualization of the presentations in the viewer.
@@ -47,7 +47,7 @@ place of the window. Parts of the study window:
    -
  • Object Browser - Management of objects created or imported into +
  • Object browser - Management of objects created or imported into SALOME application.
  • \b Viewer - This window is destined for visualization of presentations.
  • @@ -107,4 +107,4 @@ window. -*/ \ No newline at end of file +*/ diff --git a/src/LightApp/LightApp_Application.cxx b/src/LightApp/LightApp_Application.cxx index 7b2bd00de..cf0163b5a 100644 --- a/src/LightApp/LightApp_Application.cxx +++ b/src/LightApp/LightApp_Application.cxx @@ -254,6 +254,7 @@ LightApp_Application::LightApp_Application() STD_TabDesktop* desk = new STD_TabDesktop(); desk->setFullScreenAllowed(false); + desk->setMinimizeAllowed(false); setDesktop( desk ); @@ -1279,11 +1280,21 @@ LogWindow* LightApp_Application::logWindow() #ifndef DISABLE_PYCONSOLE /*! + This returns the python console integrated to the GUI. Depending + when you request the python console, this function could return + null. Then the optional parameter force (default to false) can be + set to force the creation of the python console if it is not done + already. + \param force - if true, the pythonConsole is created if it does not exist yet \return Python Console */ -PyConsole_Console* LightApp_Application::pythonConsole() +PyConsole_Console* LightApp_Application::pythonConsole(const bool force) { - return qobject_cast( dockWindow( WT_PyConsole ) ); + QWidget* wid = dockWindow( WT_PyConsole ); + if ( !wid && force==true) { + wid = getWindow(WT_PyConsole); + } + return qobject_cast( wid ); } #endif diff --git a/src/LightApp/LightApp_Application.h b/src/LightApp/LightApp_Application.h index f87251867..009432d29 100644 --- a/src/LightApp/LightApp_Application.h +++ b/src/LightApp/LightApp_Application.h @@ -108,7 +108,7 @@ public: LogWindow* logWindow(); SUIT_DataBrowser* objectBrowser(); #ifndef DISABLE_PYCONSOLE - PyConsole_Console* pythonConsole(); + PyConsole_Console* pythonConsole(const bool force = false); #endif virtual void updateObjectBrowser( const bool = true ); diff --git a/src/LightApp/LightApp_ShowHideOp.cxx b/src/LightApp/LightApp_ShowHideOp.cxx index ba427c713..67103afde 100644 --- a/src/LightApp/LightApp_ShowHideOp.cxx +++ b/src/LightApp/LightApp_ShowHideOp.cxx @@ -103,7 +103,7 @@ void LightApp_ShowHideOp::startOperation() QStringList::const_iterator anIt = comps.begin(), aLast = comps.end(); for( ; anIt!=aLast; anIt++ ) { - LightApp_Displayer* disp = LightApp_Displayer::FindDisplayer( app->moduleTitle( *anIt ), true ); + LightApp_Displayer* disp = LightApp_Displayer::FindDisplayer( app->moduleTitle( *anIt ), false ); if( disp ) disp->EraseAll( false, false, 0 ); } diff --git a/src/OCCViewer/Makefile.am b/src/OCCViewer/Makefile.am index 14c993ba4..5adeea751 100755 --- a/src/OCCViewer/Makefile.am +++ b/src/OCCViewer/Makefile.am @@ -20,12 +20,6 @@ # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com # -# File : Makefile.in -# Author : Vladimir Klyachin (OCN) -# Module : OCCViewer -# $Header$ -# - include $(top_srcdir)/adm_local/unix/make_common_starter.am lib_LTLIBRARIES = libOCCViewer.la @@ -118,8 +112,7 @@ dist_salomeres_DATA = \ resources/occ_view_style_switch.png \ resources/occ_view_zooming_style_switch.png \ resources/occ_view_maximized.png \ - resources/occ_view_minimized.png \ - resources/occ_view_sync.png + resources/occ_view_minimized.png nodist_salomeres_DATA = \ OCCViewer_images.qm \ diff --git a/src/OCCViewer/OCCViewer_ViewFrame.cxx b/src/OCCViewer/OCCViewer_ViewFrame.cxx index 2d3b66ae7..ada4a63a8 100644 --- a/src/OCCViewer/OCCViewer_ViewFrame.cxx +++ b/src/OCCViewer/OCCViewer_ViewFrame.cxx @@ -37,6 +37,7 @@ OCCViewer_ViewFrame::OCCViewer_ViewFrame(SUIT_Desktop* theDesktop, OCCViewer_Vie setCentralWidget( centralFrame ); OCCViewer_ViewWindow* view0 = theModel->createSubWindow(); + updateWindowTitle( view0 ); view0->setParent( centralFrame ); myViews.append( view0 ); // MAIN_VIEW @@ -52,6 +53,17 @@ OCCViewer_ViewFrame::~OCCViewer_ViewFrame() { } +bool OCCViewer_ViewFrame::event( QEvent* e ) +{ + if ( e->type() == QEvent::WindowTitleChange ) { + updateWindowTitle( getView( MAIN_VIEW ) ); + updateWindowTitle( getView( BOTTOM_LEFT ) ); + updateWindowTitle( getView( TOP_LEFT ) ); + updateWindowTitle( getView( TOP_RIGHT ) ); + } + return OCCViewer_ViewWindow::event( e ); +} + //************************************************************************************** OCCViewer_ViewWindow* OCCViewer_ViewFrame::getView( const int i ) const { @@ -101,6 +113,7 @@ void OCCViewer_ViewFrame::onMaximizedView( OCCViewer_ViewWindow* theView, bool i view->set2dMode( (Mode2dType) i ); view->setParent( centralWidget() ); view->setViewManager(myManager); + updateWindowTitle( view ); myViews.append( view ); aModel->initView(view); view->setMaximized(false, false); @@ -337,3 +350,30 @@ void OCCViewer_ViewFrame::setVisualParameters( const QString& parameters ) getView(MAIN_VIEW)->setVisualParameters( parameters ); } } + +SUIT_CameraProperties OCCViewer_ViewFrame::cameraProperties() +{ + // view frame does not have camera properties + return SUIT_CameraProperties(); +} + +void OCCViewer_ViewFrame::updateWindowTitle(OCCViewer_ViewWindow* theView) +{ + if ( !theView ) + return; + QString title; + switch ( theView->get2dMode() ) { + case No2dMode: + title = "3D"; break; + case XYPlane: + title = "YX"; break; + case XZPlane: + title = "XZ"; break; + case YZPlane: + title = "YZ"; break; + default: + break; + } + if ( !title.isEmpty() ) + theView->setWindowTitle( windowTitle() + " - " + title ); +} diff --git a/src/OCCViewer/OCCViewer_ViewFrame.h b/src/OCCViewer/OCCViewer_ViewFrame.h index b00bc6a8b..b9ce195e2 100644 --- a/src/OCCViewer/OCCViewer_ViewFrame.h +++ b/src/OCCViewer/OCCViewer_ViewFrame.h @@ -41,6 +41,8 @@ public: OCCViewer_ViewFrame(SUIT_Desktop* theDesktop, OCCViewer_Viewer* theModel); virtual ~OCCViewer_ViewFrame(); + bool event( QEvent* e ); + OCCViewer_ViewWindow* getView( const int ) const; virtual OCCViewer_ViewPort3d* getViewPort() { return getView(MAIN_VIEW)->getViewPort(); } @@ -82,6 +84,8 @@ public: virtual void setDropDownButtons( bool ); + virtual SUIT_CameraProperties cameraProperties(); + public slots: virtual void onFrontView() { getView(MAIN_VIEW)->onFrontView(); } virtual void onViewFitAll(); @@ -123,8 +127,8 @@ private slots: void onContextMenuRequested(QContextMenuEvent*); private: - void connectViewSignals(OCCViewer_ViewWindow* theView); - + void connectViewSignals( OCCViewer_ViewWindow* theView ); + void updateWindowTitle( OCCViewer_ViewWindow* theView ); QList myViews; QGridLayout* myLayout; diff --git a/src/OCCViewer/OCCViewer_ViewWindow.cxx b/src/OCCViewer/OCCViewer_ViewWindow.cxx index 26e9ba79d..0a4905ef9 100755 --- a/src/OCCViewer/OCCViewer_ViewWindow.cxx +++ b/src/OCCViewer/OCCViewer_ViewWindow.cxx @@ -287,6 +287,8 @@ void OCCViewer_ViewWindow::initLayout() QtxAction* anAction = dynamic_cast( toolMgr()->action( GraduatedAxesId ) ); myCubeAxesDlg = new OCCViewer_CubeAxesDlg( anAction, this, "OCCViewer_CubeAxesDlg" ); myCubeAxesDlg->initialize(); + + connect( myViewPort, SIGNAL( vpTransformed( OCCViewer_ViewPort* ) ), this, SLOT( emitViewModified() ) ); } OCCViewer_ViewWindow* OCCViewer_ViewWindow::getView( const int mode ) const @@ -1240,15 +1242,8 @@ void OCCViewer_ViewWindow::createActions() connect(aAction, SIGNAL(triggered()), this, SLOT(onMaximizedView())); toolMgr()->registerAction( aAction, MaximizedId ); - // Synchronize view - aAction = new QtxAction(tr("MNU_SYNCHRONIZE_VIEW"), aResMgr->loadPixmap( "OCCViewer", tr( "ICON_OCCVIEWER_SYNC" ) ), - tr( "MNU_SYNCHRONIZE_VIEW" ), 0, this ); - aAction->setStatusTip(tr("DSC_SYNCHRONIZE_VIEW")); - aAction->setMenu( new QMenu( this ) ); - aAction->setCheckable(true); - connect(aAction->menu(), SIGNAL(aboutToShow()), this, SLOT(updateSyncViews())); - connect(aAction, SIGNAL(triggered(bool)), this, SLOT(onSynchronizeView(bool))); - toolMgr()->registerAction( aAction, SynchronizeId ); + // Synchronize View + toolMgr()->registerAction( synchronizeAction(), SynchronizeId ); } /*! @@ -1547,7 +1542,10 @@ void OCCViewer_ViewWindow::onAxialScale() myScalingDlg = new OCCViewer_AxialScaleDlg( this ); if ( !myScalingDlg->isVisible() ) + { + myScalingDlg->Update(); myScalingDlg->show(); + } } /*! @@ -2493,144 +2491,174 @@ void OCCViewer_ViewWindow::updateViewAspects( const viewAspectList& aViewList ) myViewAspects = aViewList; } -void OCCViewer_ViewWindow::synchronizeView( OCCViewer_ViewWindow* viewWindow, int id ) +/*! + Get camera properties for the OCC view window. + \return shared pointer on camera properties. +*/ +SUIT_CameraProperties OCCViewer_ViewWindow::cameraProperties() { - OCCViewer_ViewWindow* otherViewWindow = 0; - QList compatibleViews; + SUIT_CameraProperties aProps; - bool isSync = viewWindow->toolMgr()->action( SynchronizeId )->isChecked(); + Handle(V3d_View) aSourceView = getViewPort()->getView(); + if ( aSourceView.IsNull() ) + return aProps; - int vwid = viewWindow->getId(); - - SUIT_Application* app = SUIT_Session::session()->activeApplication(); - if ( !app ) return; - - QList wmlist; - app->viewManagers( viewWindow->getViewManager()->getType(), wmlist ); - - foreach( SUIT_ViewManager* wm, wmlist ) { - QVector vwlist = wm->getViews(); - - foreach( SUIT_ViewWindow* vw, vwlist ) { - OCCViewer_ViewWindow* occVW = dynamic_cast( vw ); - if ( !occVW ) continue; - - // check only compatible types - occVW = occVW->getView( viewWindow->get2dMode() ); - if ( occVW ) { - if ( occVW->getId() == id ) - otherViewWindow = occVW; - else if ( occVW != viewWindow ) - compatibleViews.append( occVW ); - } - } + if ( get2dMode() == No2dMode ) { + aProps.setDimension( SUIT_CameraProperties::Dim3D ); } - - if ( isSync && id ) { - // remove all possible disconnections - foreach( OCCViewer_ViewWindow* vw, compatibleViews ) { - // disconnect target view - vw->getViewPort()->disconnect( SIGNAL( vpTransformed( OCCViewer_ViewPort* ) ), viewWindow->getViewPort(), SLOT( synchronize( OCCViewer_ViewPort* ) ) ); - viewWindow->getViewPort()->disconnect( SIGNAL( vpTransformed( OCCViewer_ViewPort* ) ), vw->getViewPort(), SLOT( synchronize( OCCViewer_ViewPort* ) ) ); - if ( otherViewWindow ) { - // disconnect source view - vw->getViewPort()->disconnect( SIGNAL( vpTransformed( OCCViewer_ViewPort* ) ), otherViewWindow->getViewPort(), SLOT( synchronize( OCCViewer_ViewPort* ) ) ); - otherViewWindow->getViewPort()->disconnect( SIGNAL( vpTransformed( OCCViewer_ViewPort* ) ), vw->getViewPort(), SLOT( synchronize( OCCViewer_ViewPort* ) ) ); - } - QAction* a = vw->toolMgr()->action( SynchronizeId ); - if ( a ) { - int anid = a->data().toInt(); - if ( a->isChecked() && ( anid == id || anid == vwid ) ) { - bool blocked = a->blockSignals( true ); - a->setChecked( false ); - a->blockSignals( blocked ); - } - } - } - if ( otherViewWindow ) { - // reconnect source and target view - otherViewWindow->getViewPort()->disconnect( SIGNAL( vpTransformed( OCCViewer_ViewPort* ) ), viewWindow->getViewPort(), SLOT( synchronize( OCCViewer_ViewPort* ) ) ); - viewWindow->getViewPort()->disconnect( SIGNAL( vpTransformed( OCCViewer_ViewPort* ) ), otherViewWindow->getViewPort(), SLOT( synchronize( OCCViewer_ViewPort* ) ) ); - otherViewWindow->getViewPort()->connect( viewWindow->getViewPort(), SIGNAL( vpTransformed( OCCViewer_ViewPort* ) ), SLOT( synchronize( OCCViewer_ViewPort* ) ) ); - viewWindow->getViewPort()->connect( otherViewWindow->getViewPort(), SIGNAL( vpTransformed( OCCViewer_ViewPort* ) ), SLOT( synchronize( OCCViewer_ViewPort* ) ) ); - // synchronize target view with source view - viewWindow->getViewPort()->synchronize( otherViewWindow->getViewPort() ); - viewWindow->toolMgr()->action( SynchronizeId )->setData( otherViewWindow->getId() ); - QAction* anOtherAcion = otherViewWindow->toolMgr()->action( SynchronizeId ); - if (anOtherAcion) { - anOtherAcion->setData( viewWindow->getId() ); - if ( !anOtherAcion->isChecked() ) { - bool blocked = anOtherAcion->blockSignals( true ); - anOtherAcion->setChecked( true ); - anOtherAcion->blockSignals( blocked ); - } - } - } - } - else if ( otherViewWindow ) { - // reconnect source and target view - otherViewWindow->getViewPort()->disconnect( SIGNAL( vpTransformed( OCCViewer_ViewPort* ) ), viewWindow->getViewPort(), SLOT( synchronize( OCCViewer_ViewPort* ) ) ); - viewWindow->getViewPort()->disconnect( SIGNAL( vpTransformed( OCCViewer_ViewPort* ) ), otherViewWindow->getViewPort(), SLOT( synchronize( OCCViewer_ViewPort* ) ) ); - viewWindow->getViewPort()->synchronize( otherViewWindow->getViewPort() ); - viewWindow->toolMgr()->action( SynchronizeId )->setData( otherViewWindow->getId() ); - QAction* anOtherAcion = otherViewWindow->toolMgr()->action( SynchronizeId ); - if (anOtherAcion) { - if ( anOtherAcion->data().toInt() == viewWindow->getId() && anOtherAcion->isChecked() ) { - bool blocked = anOtherAcion->blockSignals( true ); - anOtherAcion->setChecked( false ); - anOtherAcion->blockSignals( blocked ); - } - } + else { + aProps.setDimension( SUIT_CameraProperties::Dim2D ); + aProps.setViewSide( (SUIT_CameraProperties::ViewSide)(int)get2dMode() ); } + + // read common properites of the view + Standard_Real anUpDir[3]; + Standard_Real aPrjDir[3]; + Standard_Real aMapScale[2]; + Standard_Real aTranslation[3]; + Standard_Real anAxialScale[3]; + + aSourceView->Up(anUpDir[0], anUpDir[1], anUpDir[2]); + aSourceView->Proj(aPrjDir[0], aPrjDir[1], aPrjDir[2]); + aSourceView->At(aTranslation[0], aTranslation[1], aTranslation[2]); + aSourceView->Size(aMapScale[0], aMapScale[1]); + + getViewPort()->getAxialScale(anAxialScale[0], anAxialScale[1], anAxialScale[2]); + + // we use similar depth to the one used in perspective projection + // to proivde a convinience synchronization with other camera views that + // can switch between orthogonal & perspective projection. otherwise, + // the camera will get to close when switching from orthogonal to perspective. + Standard_Real aCameraDepth = aSourceView->Depth() + aSourceView->ZSize() * 0.5; + + // store common props + aProps.setViewUp(anUpDir[0], anUpDir[1], anUpDir[2]); + aProps.setMappingScale(aMapScale[1] / 2.0); + aProps.setAxialScale(anAxialScale[0], anAxialScale[1], anAxialScale[2]); + + // generate view orientation matrix for transforming OCC projection reference point + // into a camera (eye) position. + gp_Dir aLeftDir = gp_Dir(anUpDir[0], anUpDir[1], anUpDir[2]).Crossed( + gp_Dir(aPrjDir[0], aPrjDir[1], aPrjDir[2])); + + gp_Trsf aTrsf; + aTrsf.SetValues( aLeftDir.X(), anUpDir[0], aPrjDir[0], aTranslation[0], + aLeftDir.Y(), anUpDir[1], aPrjDir[1], aTranslation[1], + aLeftDir.Z(), anUpDir[2], aPrjDir[2], aTranslation[2], + Precision::Confusion(), + Precision::Confusion() ); + + // get projection reference point in view coordinates + Graphic3d_Vertex aProjRef = aSourceView->ViewMapping().ProjectionReferencePoint(); + + // transform to world-space coordinate system + gp_Pnt aPosition = gp_Pnt(aProjRef.X(), aProjRef.Y(), aCameraDepth).Transformed(aTrsf); + + // compute focal point + double aFocalPoint[3]; + + aFocalPoint[0] = aPosition.X() - aPrjDir[0] * aCameraDepth; + aFocalPoint[1] = aPosition.Y() - aPrjDir[1] * aCameraDepth; + aFocalPoint[2] = aPosition.Z() - aPrjDir[2] * aCameraDepth; + + aProps.setFocalPoint(aFocalPoint[0], aFocalPoint[1], aFocalPoint[2]); + aProps.setPosition(aPosition.X(), aPosition.Y(), aPosition.Z()); + + return aProps; } /*! - "Synchronize View" action slot. + Synchronize views. + This implementation synchronizes OCC view's camera propreties. */ -void OCCViewer_ViewWindow::onSynchronizeView(bool checked) +void OCCViewer_ViewWindow::synchronize( SUIT_ViewWindow* theView ) { - QAction* a = qobject_cast( sender() ); - if ( a ) { - synchronizeView( this, a->data().toInt() ); - } -} + bool blocked = blockSignals( true ); -/*! - Update list of available view for the "Synchronize View" action -*/ -void OCCViewer_ViewWindow::updateSyncViews() -{ - QAction* anAction = toolMgr()->action( SynchronizeId ); - if ( anAction && anAction->menu() ) { - int currentId = anAction->data().toInt(); - anAction->menu()->clear(); - SUIT_Application* app = SUIT_Session::session()->activeApplication(); - if ( app ) { - QList wmlist; - app->viewManagers( getViewManager()->getType(), wmlist ); - foreach( SUIT_ViewManager* wm, wmlist ) { - QVector vwlist = wm->getViews(); - foreach ( SUIT_ViewWindow* vw, vwlist ) { - OCCViewer_ViewWindow* occVW = dynamic_cast( vw ); - if ( !occVW || occVW == this ) continue; - // list only compatible types - OCCViewer_ViewWindow* subWindow = occVW->getView( get2dMode() ); - if ( subWindow && subWindow != this ) { - QAction* a = anAction->menu()->addAction( occVW->windowTitle() ); - if ( subWindow->getId() == currentId ) { - QFont f = a->font(); - f.setBold( true ); - a->setFont( f ); - } - a->setData( subWindow->getId() ); - connect( a, SIGNAL( triggered(bool) ), this, SLOT( onSynchronizeView(bool) ) ); - } - } - } - } - if ( anAction->menu()->actions().isEmpty() ) { - anAction->setData( 0 ); - anAction->menu()->addAction( tr( "MNU_SYNC_NO_VIEW" ) ); - } + SUIT_CameraProperties aProps = theView->cameraProperties(); + if ( !cameraProperties().isCompatible( aProps ) ) { + // other view, this one is being currently synchronized to, seems has become incompatible + // we have to break synchronization + updateSyncViews(); + return; } + + Handle(V3d_View) aDestView = getViewPort()->getView(); + + aDestView->SetImmediateUpdate( Standard_False ); + + double anUpDir[3]; + double aPosition[3]; + double aFocalPoint[3]; + double aMapScaling; + double anAxialScale[3]; + + // get common properties + aProps.getFocalPoint(aFocalPoint[0], aFocalPoint[1], aFocalPoint[2]); + aProps.getPosition(aPosition[0], aPosition[1], aPosition[2]); + aProps.getViewUp(anUpDir[0], anUpDir[1], anUpDir[2]); + aProps.getAxialScale(anAxialScale[0], anAxialScale[1], anAxialScale[2]); + aMapScaling = aProps.getMappingScale() * 2.0; + + gp_Dir aProjDir(aPosition[0] - aFocalPoint[0], + aPosition[1] - aFocalPoint[1], + aPosition[2] - aFocalPoint[2]); + + // get custom view translation + Standard_Real aTranslation[3]; + aDestView->At(aTranslation[0], aTranslation[1], aTranslation[2]); + + gp_Dir aLeftDir = gp_Dir(anUpDir[0], anUpDir[1], anUpDir[2]).Crossed( + gp_Dir(aProjDir.X(), aProjDir.Y(), aProjDir.Z())); + + // convert camera position into a view reference point + gp_Trsf aTrsf; + aTrsf.SetValues( aLeftDir.X(), anUpDir[0], aProjDir.X(), aTranslation[0], + aLeftDir.Y(), anUpDir[1], aProjDir.Y(), aTranslation[1], + aLeftDir.Z(), anUpDir[2], aProjDir.Z(), aTranslation[2], + Precision::Confusion(), + Precision::Confusion() ); + aTrsf.Invert(); + + // transform to view-space coordinate system + gp_Pnt aProjRef(aPosition[0], aPosition[1], aPosition[2]); + aProjRef.Transform(aTrsf); + + // set view camera properties using low-level approach. this is done + // in order to avoid interference with static variables in v3d view used + // when rotation is in process in another view. + Visual3d_ViewMapping aMapping = aDestView->View()->ViewMapping(); + Visual3d_ViewOrientation anOrientation = aDestView->View()->ViewOrientation(); + + Graphic3d_Vector aMappingProj(aProjDir.X(), aProjDir.Y(), aProjDir.Z()); + Graphic3d_Vector aMappingUp(anUpDir[0], anUpDir[1], anUpDir[2]); + + aMappingProj.Normalize(); + aMappingUp.Normalize(); + + anOrientation.SetViewReferencePlane(aMappingProj); + anOrientation.SetViewReferenceUp(aMappingUp); + + aDestView->SetViewMapping(aMapping); + aDestView->SetViewOrientation(anOrientation); + + // set panning + aDestView->SetCenter(aProjRef.X(), aProjRef.Y()); + + // set mapping scale + Standard_Real aWidth, aHeight; + aDestView->Size(aWidth, aHeight); + + if ( aWidth > aHeight ) + aDestView->SetSize (aMapScaling * (aWidth / aHeight)); + else + aDestView->SetSize (aMapScaling); + + getViewPort()->setAxialScale(anAxialScale[0], anAxialScale[1], anAxialScale[2]); + + aDestView->ZFitAll(); + aDestView->SetImmediateUpdate( Standard_True ); + aDestView->Redraw(); + + blockSignals( blocked ); } diff --git a/src/OCCViewer/OCCViewer_ViewWindow.h b/src/OCCViewer/OCCViewer_ViewWindow.h index 28d3d8d64..625e4c58c 100755 --- a/src/OCCViewer/OCCViewer_ViewWindow.h +++ b/src/OCCViewer/OCCViewer_ViewWindow.h @@ -195,6 +195,8 @@ public: virtual void updateViewAspects( const viewAspectList& ); virtual void clearViewAspects(); + virtual SUIT_CameraProperties cameraProperties(); + public slots: virtual void onFrontView(); virtual void onViewFitAll(); @@ -244,6 +246,9 @@ signals: void Hide( QHideEvent * ); void maximized( OCCViewer_ViewWindow*, bool ); +protected slots: + void synchronize( SUIT_ViewWindow* ); + public: virtual QImage dumpView(); virtual bool dumpViewToFormat( const QImage&, const QString& fileName, const QString& format ); @@ -315,13 +320,6 @@ protected: double myCurScale; -private slots: - void onSynchronizeView(bool); - void updateSyncViews(); - -private: - static void synchronizeView( OCCViewer_ViewWindow*, int ); - private: OCCViewer_ClippingDlg* myClippingDlg; QtxAction* myClippingAction; diff --git a/src/OCCViewer/resources/OCCViewer_images.ts b/src/OCCViewer/resources/OCCViewer_images.ts index 21c1ae705..40bb07511 100644 --- a/src/OCCViewer/resources/OCCViewer_images.ts +++ b/src/OCCViewer/resources/OCCViewer_images.ts @@ -123,9 +123,5 @@ ICON_OCCVIEWER_MINIMIZE occ_view_minimized.png - - ICON_OCCVIEWER_SYNC - occ_view_sync.png - diff --git a/src/OCCViewer/resources/OCCViewer_msg_en.ts b/src/OCCViewer/resources/OCCViewer_msg_en.ts index 301870645..029eda7dc 100644 --- a/src/OCCViewer/resources/OCCViewer_msg_en.ts +++ b/src/OCCViewer/resources/OCCViewer_msg_en.ts @@ -283,10 +283,6 @@ DSC_MINIMIZE_VIEW Minimize view - - DSC_SYNCHRONIZE_VIEW - Synchronize view - MNU_MAXIMIZE_VIEW Maximize @@ -295,14 +291,6 @@ MNU_MINIMIZE_VIEW Minimize - - MNU_SYNCHRONIZE_VIEW - Synchronize - - - MNU_SYNC_NO_VIEW - [ No appropriate view ] - OCCViewer_CreateRestoreViewDlg diff --git a/src/OCCViewer/resources/OCCViewer_msg_fr.ts b/src/OCCViewer/resources/OCCViewer_msg_fr.ts index 843d08b77..c54f67989 100755 --- a/src/OCCViewer/resources/OCCViewer_msg_fr.ts +++ b/src/OCCViewer/resources/OCCViewer_msg_fr.ts @@ -283,10 +283,6 @@ DSC_MINIMIZE_VIEW Minimiser la vue - - DSC_SYNCHRONIZE_VIEW - Synchroniser la vue - MNU_MAXIMIZE_VIEW Maximiser @@ -295,14 +291,6 @@ MNU_MINIMIZE_VIEW Minimiser - - MNU_SYNCHRONIZE_VIEW - Synchroniser - - - MNU_SYNC_NO_VIEW - [ Pas de vue appropriée ] - OCCViewer_CreateRestoreViewDlg diff --git a/src/Plot2d/Plot2d_ViewFrame.cxx b/src/Plot2d/Plot2d_ViewFrame.cxx index 6d00a5937..a1fb36487 100755 --- a/src/Plot2d/Plot2d_ViewFrame.cxx +++ b/src/Plot2d/Plot2d_ViewFrame.cxx @@ -1576,11 +1576,9 @@ void Plot2d_ViewFrame::getFitRangeByMarkers(double& xMin, double& xMax, return; if(picker->pMarkers.empty()) return; - bool emptyV1 = true, emptyV2 = true; foreach(QwtPlotMarker *mrker,picker->pMarkers) { bool isV2 = mrker->yAxis() == QwtPlot::yRight; - isV2 ? emptyV2 = false : emptyV1 = false; xMin = qMin( xMin, mrker->xValue() ); xMax = qMax( xMax, mrker->xValue() ); if ( isV2 ) { @@ -1604,19 +1602,6 @@ void Plot2d_ViewFrame::getFitRangeByMarkers(double& xMin, double& xMax, y2Max = y2Max == 0. ? 1 : y2Max + y2Max/10.; } } - // default values - if ( emptyV1 && emptyV2 ) { - xMin = isModeHorLinear() ? 0. : 1.; - xMax = isModeHorLinear() ? 1000. : 1e5; - } - if ( emptyV1 ) { - yMin = isModeVerLinear() ? 0. : 1.; - yMax = isModeVerLinear() ? 1000. : 1e5; - } - if ( emptyV2 ) { - y2Min = isModeVerLinear() ? 0. : 1.; - y2Max = isModeVerLinear() ? 1000. : 1e5; - } } /*! @@ -2846,7 +2831,8 @@ public: */ Plot2d_Plot2d::Plot2d_Plot2d( QWidget* parent ) : QwtPlot( parent ), - myIsPolished( false ) + myIsPolished( false ), + myPicker( 0 ) { // Create alternative scales setAxisScaleDraw( QwtPlot::yLeft, new Plot2d_ScaleDraw() ); diff --git a/src/Qtx/QtxMainWindow.cxx b/src/Qtx/QtxMainWindow.cxx index d8aa1e33f..574b8b0bb 100644 --- a/src/Qtx/QtxMainWindow.cxx +++ b/src/Qtx/QtxMainWindow.cxx @@ -242,7 +242,8 @@ QtxMainWindow::QtxMainWindow( QWidget* parent, Qt::WindowFlags f ) myOpaque( true ), myResizer( 0 ), myMouseMove( 0 ), - myFullScreenAllowed(true) + myFullScreenAllowed(true), + myMinimizeAllowed(true) { //rnv: Enables tooltips for inactive windows. //rnv: For details see http://bugtracker.opencascade.com/show_bug.cgi?id=20893 @@ -398,7 +399,7 @@ QString QtxMainWindow::storeGeometry() const state = QString( "max" ); break; case Qt::WindowMinimized: - state = QString( "min" ); + if ( isMinimizeAllowed() ) state = QString( "min" ); break; case Qt::WindowFullScreen: state = isFullScreenAllowed() ? QString( "full" ) : QString( "max" ); @@ -482,12 +483,16 @@ void QtxMainWindow::retrieveGeometry( const QString& str ) if ( stRx.indexIn( geom ) != -1 ) { QString stStr = stRx.cap( 1 ).trimmed().toLower(); - if ( stStr.startsWith( QString( "max" ) ) ) + if ( stStr.startsWith( QString( "max" ) ) ) { state = Qt::WindowMaximized; - else if ( stStr.startsWith( QString( "min" ) ) ) - state = Qt::WindowMinimized; - else if ( stStr.startsWith( QString( "full" ) ) ) - state = Qt::WindowFullScreen; + } + else if ( stStr.startsWith( QString( "min" ) ) ) { + if ( isMinimizeAllowed() ) + state = Qt::WindowMinimized; + } + else if ( stStr.startsWith( QString( "full" ) ) ) { + state = isFullScreenAllowed() ? Qt::WindowFullScreen : Qt::WindowMaximized; + } } resize( rect.size() ); @@ -629,7 +634,7 @@ bool QtxMainWindow::event( QEvent* e ) /*! \brief FullScreenAllowed flag allowed dump in the main window geometry Qt::WindowFullScreen parameter. - \return \c fullScreenAllowed flag. + \return \c FullScreenAllowed flag. */ bool QtxMainWindow::isFullScreenAllowed() const { return myFullScreenAllowed; @@ -639,8 +644,27 @@ bool QtxMainWindow::isFullScreenAllowed() const { /*! \brief Set FullScreenAllowed flag. The default value is true. - \param f value of the fullScreenAllowed flag. + \param f value of the FullScreenAllowed flag. */ void QtxMainWindow::setFullScreenAllowed( const bool f ) { myFullScreenAllowed = f; } + +/*! + \brief MinimizeAllowed flag allowed dump in the main window geometry + Qt::WindowMinimized parameter. + \return \c MinimizeAllowed flag. +*/ +bool QtxMainWindow::isMinimizeAllowed() const { + return myMinimizeAllowed; +} + + +/*! + \brief Set MinimizeAllowed flag. + The default value is true. + \param f value of the MinimizeAllowed flag. +*/ +void QtxMainWindow::setMinimizeAllowed( const bool f ) { + myMinimizeAllowed = f; +} diff --git a/src/Qtx/QtxMainWindow.h b/src/Qtx/QtxMainWindow.h index 5148f1d8e..8de97eb0b 100644 --- a/src/Qtx/QtxMainWindow.h +++ b/src/Qtx/QtxMainWindow.h @@ -57,6 +57,9 @@ public: bool isFullScreenAllowed() const; void setFullScreenAllowed( const bool ); + bool isMinimizeAllowed() const; + void setMinimizeAllowed( const bool ); + protected: virtual bool event( QEvent* ); @@ -71,6 +74,7 @@ private: QToolBar* myStatusBar; //!< dockable status bar bool myFullScreenAllowed; + bool myMinimizeAllowed; bool myOpaque; Resizer* myResizer; diff --git a/src/SUIT/CMakeLists.txt b/src/SUIT/CMakeLists.txt index fcd2d6c29..e2f2c98e2 100644 --- a/src/SUIT/CMakeLists.txt +++ b/src/SUIT/CMakeLists.txt @@ -59,6 +59,7 @@ SET(GUI_HEADERS SUIT_ViewModel.h SUIT_ViewWindow.h SUIT_ShortcutMgr.h + SUIT_CameraProperties.h ) QT4_WRAP_CPP(GUI_HEADERS_MOC ${GUI_HEADERS}) @@ -93,6 +94,7 @@ SET(suit_SOURCES SUIT_ViewModel.cxx SUIT_ViewWindow.cxx SUIT_ShortcutMgr.cxx + SUIT_CameraProperties.cxx ) SET(GUITS_SOURCES resources/SUIT_msg_en.ts diff --git a/src/SUIT/Makefile.am b/src/SUIT/Makefile.am index 68f6184c0..e9ec7b620 100755 --- a/src/SUIT/Makefile.am +++ b/src/SUIT/Makefile.am @@ -20,11 +20,6 @@ # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com # -# File : Makefile.in -# Author : Vladimir Klyachin (OCN) -# Module : suit -# $Header$ -# include $(top_srcdir)/adm_local/unix/make_common_starter.am lib_LTLIBRARIES = libsuit.la @@ -62,7 +57,8 @@ salomeinclude_HEADERS = \ SUIT_ViewManager.h \ SUIT_ViewModel.h \ SUIT_ViewWindow.h \ - SUIT_ShortcutMgr.h + SUIT_ShortcutMgr.h \ + SUIT_CameraProperties.h dist_libsuit_la_SOURCES = \ SUIT_Accel.cxx \ @@ -94,7 +90,8 @@ dist_libsuit_la_SOURCES = \ SUIT_ViewManager.cxx \ SUIT_ViewModel.cxx \ SUIT_ViewWindow.cxx \ - SUIT_ShortcutMgr.cxx + SUIT_ShortcutMgr.cxx \ + SUIT_CameraProperties.cxx MOC_FILES = \ SUIT_Accel_moc.cxx \ @@ -124,11 +121,11 @@ nodist_salomeres_DATA = \ SUIT_msg_en.qm \ SUIT_msg_fr.qm \ SUIT_images.qm - + dist_salomeres_DATA = \ resources/icon_visibility_on.png \ - resources/icon_visibility_off.png - + resources/icon_visibility_off.png \ + resources/view_sync.png libsuit_la_CPPFLAGS = $(QT_INCLUDES) -I$(srcdir)/../Qtx -I$(srcdir)/../ObjBrowser diff --git a/src/SUIT/SUIT_CameraProperties.cxx b/src/SUIT/SUIT_CameraProperties.cxx new file mode 100644 index 000000000..284888727 --- /dev/null +++ b/src/SUIT/SUIT_CameraProperties.cxx @@ -0,0 +1,357 @@ +// Copyright (C) 2007-2012 CEA/DEN, EDF R&D, OPEN CASCADE +// +// Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, +// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +// + +#include "SUIT_CameraProperties.h" + +/*! + \class SUIT_CameraProperties + \brief Base class for Camera Properties + + This class provides common properties that + can be used for any arbitrary camera. This + properties are employed by camera synchronization + algorithms. +*/ + +/*! + \brief Default constructor. + + Creates invalid camera properties data, i.e. IsValid() returns \c false. +*/ +SUIT_CameraProperties::SUIT_CameraProperties() +{ + // init with some default values + myUpDir[0] = 0.0; + myUpDir[1] = 1.0; + myUpDir[2] = 0.0; + + myPosition[0] = 0.0; + myPosition[1] = 0.0; + myPosition[2] = 500.0; + + myFocalPoint[0] = 0.0; + myFocalPoint[1] = 0.0; + myFocalPoint[2] = 0.0; + + myAxialScale[0] = 1.0; + myAxialScale[1] = 1.0; + myAxialScale[2] = 1.0; + + myMappingScale = 1000; + + myDimension = DimNone; // none dimension by default + myProjection = PrjOrthogonal; // orthogonal projection by default + myViewSide = ViewNone; // no side view by default + + myViewAngle = 45.0; +} + +/*! + \brief Destructor +*/ +SUIT_CameraProperties::~SUIT_CameraProperties() +{ +} + +/*! + \brief Check if camera properties are valid. + \return \c true if camera properties data is valid. + \sa setDimension() +*/ +bool SUIT_CameraProperties::isValid() const +{ + return myDimension != DimNone; +} + +/*! + \brief Check if this camera properties data is compatible with other camera properties. + \param other other properties data + \return \c true if both camera properties sets are compatible +*/ +bool SUIT_CameraProperties::isCompatible( const SUIT_CameraProperties& other ) +{ + bool result = false; + // check only valid data and data with same dimensions + if ( isValid() && other.isValid() && getDimension() == other.getDimension() ) { + switch( getDimension() ) { + case SUIT_CameraProperties::Dim2D: + // two 2d views are compatible if their view side is the same + result = getViewSide() == other.getViewSide(); + break; + case SUIT_CameraProperties::Dim3D: + // two 3d views are compatible if their projection mode is the same + result = getProjection() == other.getProjection(); + break; + default: + break; + } + } + return result; +} + +/*! + \brief get dimension supported by camera. + \return dimension mode. + \sa setDimension() +*/ +SUIT_CameraProperties::Dimension SUIT_CameraProperties::getDimension() const +{ + return myDimension; +} + +/*! + \brief set dimension supported by camera. + \param theDimension [in] dimension mode. + \sa getDimension() +*/ +void SUIT_CameraProperties::setDimension( const SUIT_CameraProperties::Dimension theDimension ) +{ + myDimension = theDimension; +} + +/*! + \brief get side view supported by camera (for 2d viewer). + + For 2d viewer, side view can be of following values: + - SUIT_CameraProperties::ViewNone - no side view (for instance, for true 2d viewer) + - SUIT_CameraProperties::ViewXY - XY side view of 3d scene + - SUIT_CameraProperties::ViewXZ - XZ side view of 3d scene + - SUIT_CameraProperties::ViewYZ - YZ side view of 3d scene + + \return side view. + \sa setViewSide() +*/ +SUIT_CameraProperties::ViewSide SUIT_CameraProperties::getViewSide() const +{ + return myViewSide; +} + +/*! + \brief set side view supported by camera (for 2d viewer). + + For 2d viewer, side view can be of following values: + - SUIT_CameraProperties::ViewNone - no side view (for instance, for true 2d viewer) + - SUIT_CameraProperties::ViewXY - XY side view of 3d scene + - SUIT_CameraProperties::ViewXZ - XZ side view of 3d scene + - SUIT_CameraProperties::ViewYZ - YZ side view of 3d scene + + \param theViewSide [in] view side. + \sa getViewSide() +*/ +void SUIT_CameraProperties::setViewSide( const SUIT_CameraProperties::ViewSide theViewSide ) +{ + myViewSide = theViewSide; +} + +/*! + \brief get projection mode supported by camera (for 3d viewer). + + For 3d viewer, projection mode can be of following values: + - SUIT_CameraProperties::PrjOrthogonal - orthogonal projection + - SUIT_CameraProperties::PrjPerspective - perspective projection + + \return projection mode. + \sa setProjection() +*/ +SUIT_CameraProperties::Projection SUIT_CameraProperties::getProjection() const +{ + return myProjection; +} + +/*! + \brief set projection mode supported by camera (for 3d viewer). + + For 3d viewer, projection mode can be of following values: + - SUIT_CameraProperties::PrjOrthogonal - orthogonal projection + - SUIT_CameraProperties::PrjPerspective - perspective projection + + \param theProjection [in] projection mode. + \sa getProjection() +*/ +void SUIT_CameraProperties::setProjection( const SUIT_CameraProperties::Projection theProjection ) +{ + myProjection = theProjection; +} + +/*! + \brief get camera up direction vector. + \param theX [out] vector's x coordinate in world-coordinates space. + \param theY [out] vector's y coordinate in world-coordinates space. + \param theZ [out] vector's z coordinate in world-coordinates space. + \sa setViewUp() +*/ +void SUIT_CameraProperties::getViewUp(double& theX, double& theY, double& theZ) const +{ + theX = myUpDir[0]; + theY = myUpDir[1]; + theZ = myUpDir[2]; +} + +/*! + \brief set camera up direction vector. + + It is recommended to set normalized vector coordinates for + synchronization compatibility. + + \param theX [in] vector's x coordinate in world-coordinates space. + \param theY [in] vector's y coordinate in world-coordinates space. + \param theZ [in] vector's z coordinate in world-coordinates space. + \sa getViewUp() +*/ +void SUIT_CameraProperties::setViewUp(const double theX, const double theY, const double theZ) +{ + myUpDir[0] = theX; + myUpDir[1] = theY; + myUpDir[2] = theZ; +} + +/*! + \brief get camera's position (eye). + \param theX [out] x coordinate in world-coordinates space. + \param theY [out] y coordinate in world-coordinates space. + \param theZ [out] z coordinate in world-coordinates space. + \sa setPosition() +*/ +void SUIT_CameraProperties::getPosition(double& theX, double& theY, double& theZ) const +{ + theX = myPosition[0]; + theY = myPosition[1]; + theZ = myPosition[2]; +} + +/*! + \brief get camera's position (eye). + \param theX [in] x coordinate in world-coordinates space. + \param theY [in] y coordinate in world-coordinates space. + \param theZ [in] z coordinate in world-coordinates space. + \sa getPosition() +*/ +void SUIT_CameraProperties::setPosition(const double theX, const double theY, const double theZ) +{ + myPosition[0] = theX; + myPosition[1] = theY; + myPosition[2] = theZ; +} + +/*! + \brief get camera's focal point (look point). + \param theX [out] x coordinate in world-coordinates space. + \param theY [out] y coordinate in world-coordinates space. + \param theZ [out] z coordinate in world-coordinates space. + \sa setFocalPoint() +*/ +void SUIT_CameraProperties::getFocalPoint(double& theX, double& theY, double& theZ) const +{ + theX = myFocalPoint[0]; + theY = myFocalPoint[1]; + theZ = myFocalPoint[2]; +} + +/*! + \brief set camera's focal point (look point). + \param theX [in] x coordinate in world-coordinates space. + \param theY [in] y coordinate in world-coordinates space. + \param theZ [in] z coordinate in world-coordinates space. + \sa getFocalPoint() +*/ +void SUIT_CameraProperties::setFocalPoint(const double theX, const double theY, const double theZ) +{ + myFocalPoint[0] = theX; + myFocalPoint[1] = theY; + myFocalPoint[2] = theZ; +} + +/*! + \brief get window mapping scale (parallel scale). + + Mapping scale defines a mapping scaling factor for the height + of the viewport in world-coordinate distances. + + \return scaling value. + \sa setMappingScale() +*/ +double SUIT_CameraProperties::getMappingScale() const +{ + return myMappingScale; +} + +/*! + \brief set window mapping scale (parallel scale). + + Mapping scale defines a mapping scaling factor for the height + of the viewport in world-coordinate distances. + + \param theScale [in] the scaling. + \sa getMappingScale() +*/ +void SUIT_CameraProperties::setMappingScale(const double theScale) +{ + myMappingScale = theScale; +} + +/*! + \brief get scaling factors for world-coordinate space axes. + \param theScaleX [out] scale by x coordinate. + \param theScaleY [out] scale by y coordinate. + \param theScaleZ [out] scale by z coordinate. + \sa setAxialScale() +*/ +void SUIT_CameraProperties::getAxialScale(double& theScaleX, double& theScaleY, double& theScaleZ) +{ + theScaleX = myAxialScale[0]; + theScaleY = myAxialScale[1]; + theScaleZ = myAxialScale[2]; +} + +/*! + \brief set scaling factors for world-coordinate space axes. + \param theScaleX [in] scale by x coordinate. + \param theScaleY [in] scale by y coordinate. + \param theScaleZ [in] scale by z coordinate. + \sa getAxialScale() +*/ +void SUIT_CameraProperties::setAxialScale(const double theScaleX, const double theScaleY, const double theScaleZ) +{ + myAxialScale[0] = theScaleX; + myAxialScale[1] = theScaleY; + myAxialScale[2] = theScaleZ; +} + +/*! + \brief get angle (typically in degrees) of view for perpective projection mode. + \return the angle of view. + \sa setViewAngle() +*/ +double SUIT_CameraProperties::getViewAngle() const +{ + return myViewAngle; +} + +/*! + \brief set angle (typically in degrees) of view for perpective projection mode. + \param theViewAngle [in] the angle of view. + \sa getViewAngle() +*/ +void SUIT_CameraProperties::setViewAngle(const double theViewAngle) +{ + myViewAngle = theViewAngle; +} diff --git a/src/SUIT/SUIT_CameraProperties.h b/src/SUIT/SUIT_CameraProperties.h new file mode 100644 index 000000000..366de659b --- /dev/null +++ b/src/SUIT/SUIT_CameraProperties.h @@ -0,0 +1,81 @@ +// Copyright (C) 2007-2012 CEA/DEN, EDF R&D, OPEN CASCADE +// +// Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, +// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +// + +#ifndef SUIT_CAMERAPROPERITES_H +#define SUIT_CAMERAPROPERITES_H + +#include "SUIT.h" + +class SUIT_EXPORT SUIT_CameraProperties +{ +public: + enum Dimension { DimNone, Dim2D, Dim3D }; + enum ViewSide { ViewNone, ViewXY, ViewXZ, ViewYZ }; + enum Projection { PrjOrthogonal, PrjPerspective }; + + SUIT_CameraProperties(); + virtual ~SUIT_CameraProperties(); + + bool isValid() const; + bool isCompatible( const SUIT_CameraProperties& other ); + + Dimension getDimension() const; + void setDimension( const Dimension theDimension ); + + ViewSide getViewSide() const; + void setViewSide( const ViewSide theViewSide ); + + Projection getProjection() const; + void setProjection( const Projection theProjection ); + + void getViewUp(double& theX, double& theY, double& theZ) const; + void setViewUp(const double theX, const double theY, const double theZ); + + void getPosition(double& theX, double& theY, double& theZ) const; + void setPosition(const double theX, const double theY, const double theZ); + + void getFocalPoint(double& theX, double& theY, double& theZ) const; + void setFocalPoint(const double theX, const double theY, const double theZ); + + double getMappingScale() const; + void setMappingScale(const double theScale); + + void getAxialScale(double& theScaleX, double& theScaleY, double& theScaleZ); + void setAxialScale(const double theScaleX, const double theScaleY, const double theScaleZ); + + double getViewAngle() const; + void setViewAngle(const double theViewAngle); + +// common properties for all viewers +private: + Dimension myDimension; //!< dimension + ViewSide myViewSide; //!< side view (for 2d viewer) + Projection myProjection; //!< projection mode (for 3d viewer): orthogonal / perspective + double myUpDir[3]; //!< camera up vector + double myPosition[3]; //!< camera position (eye). + double myFocalPoint[3]; //!< focal point position in world-space coordinates + double myMappingScale; //!< window mapping scale (parallel projection scale) + double myAxialScale[3]; //!< scaling factors for world axes + double myViewAngle; //!< perspective view angle in degrees +}; + +#endif // SUIT_CAMERAPROPERITES_H diff --git a/src/SUIT/SUIT_ExceptionHandler.cxx b/src/SUIT/SUIT_ExceptionHandler.cxx index 9a616557f..b1fa95b1b 100755 --- a/src/SUIT/SUIT_ExceptionHandler.cxx +++ b/src/SUIT/SUIT_ExceptionHandler.cxx @@ -65,6 +65,28 @@ void SUIT_ExceptionHandler::showMessage( const QString& title, const QString& ms while ( QApplication::overrideCursor() ) QApplication::restoreOverrideCursor(); - + + cleanUp(); + SUIT_MessageBox::critical( 0, title, msg ); } + +CleanUpFuncList SUIT_ExceptionHandler::myCleanUpFunctions; + +void SUIT_ExceptionHandler::addCleanUpRoutine(CleanUpFunction p) +{ + myCleanUpFunctions.append(p); +} + +void SUIT_ExceptionHandler::removeCleanUpRoutine(CleanUpFunction p) +{ + myCleanUpFunctions.removeAll(p); +} + +void SUIT_ExceptionHandler::cleanUp() +{ + foreach( QtCleanUpFunction f, myCleanUpFunctions ) + { + f(); + } +} diff --git a/src/SUIT/SUIT_ExceptionHandler.h b/src/SUIT/SUIT_ExceptionHandler.h index 53922d2c0..ea67fc1b7 100755 --- a/src/SUIT/SUIT_ExceptionHandler.h +++ b/src/SUIT/SUIT_ExceptionHandler.h @@ -24,19 +24,31 @@ #define SUIT_EXCEPTIONHANDLER_H #include "SUIT.h" +#include class QEvent; class QObject; class QString; +typedef void (*CleanUpFunction)(); +typedef QList CleanUpFuncList; + class SUIT_EXPORT SUIT_ExceptionHandler { public: + static void addCleanUpRoutine(CleanUpFunction p); + static void removeCleanUpRoutine(CleanUpFunction p); + virtual bool handle( QObject*, QEvent* ); protected: bool internalHandle( QObject*, QEvent* ); void showMessage( const QString&, const QString& ); + +private: + void cleanUp(); + + static CleanUpFuncList myCleanUpFunctions; }; extern "C" diff --git a/src/SUIT/SUIT_ViewWindow.cxx b/src/SUIT/SUIT_ViewWindow.cxx index 6bf0ebe3c..b063cbb8b 100755 --- a/src/SUIT/SUIT_ViewWindow.cxx +++ b/src/SUIT/SUIT_ViewWindow.cxx @@ -25,16 +25,19 @@ #include "SUIT_ViewWindow.h" #include "SUIT_Tools.h" +#include "SUIT_Session.h" #include "SUIT_Study.h" #include "SUIT_Desktop.h" #include "SUIT_MessageBox.h" #include "SUIT_Application.h" #include "SUIT_ViewManager.h" +#include "SUIT_ResourceMgr.h" #include "QtxActionToolMgr.h" #include "QtxMultiAction.h" #include #include +#include #include #include @@ -47,7 +50,7 @@ const int DUMP_EVENT = QEvent::User + 123; /*! Constructor.*/ SUIT_ViewWindow::SUIT_ViewWindow( SUIT_Desktop* theDesktop ) - : QMainWindow( theDesktop ), myManager( 0 ), myIsDropDown( true ) + : QMainWindow( theDesktop ), myManager( 0 ), myIsDropDown( true ), mySyncAction( 0 ) { myDesktop = theDesktop; @@ -259,7 +262,7 @@ QtxActionToolMgr* SUIT_ViewWindow::toolMgr() const } /*! - \brief Set buttons mode to drop-down (\a on = \c true) or ligned (\a on = \c false) + \brief Set buttons mode to drop-down (\a on = \c true) or ligned (\a on = \c false) \param on new buttons mode \sa dropDownButtons() */ @@ -320,9 +323,222 @@ bool SUIT_ViewWindow::dropDownButtons() const } /*! - \return window unique identifier + \return window unique identifier */ int SUIT_ViewWindow::getId() const { return int(long(this)); } + +/*! + Get camera properties for the view window. + \return shared pointer on camera properties. Base implementation + returns null properties. +*/ +SUIT_CameraProperties SUIT_ViewWindow::cameraProperties() +{ + return SUIT_CameraProperties(); +} + +/*! + Synchronize this view window's camera properties with specified + view window. + + This method is a part of general views synchronization mechanism. + It should be redefined in successors. Base imlementation does nothing. + + \param otherWindow other view window +*/ +void SUIT_ViewWindow::synchronize( SUIT_ViewWindow* /*otherWindow*/ ) +{ + // base implementation does nothing +} + +/*! + Get action for views syncronization. + + This method is a part of general views synchronization mechanism. + It creates an action that can be inserted, for instance, to the toolbar. + + \return action for views synchronization +*/ +QAction* SUIT_ViewWindow::synchronizeAction() +{ + if ( !mySyncAction ) { + SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr(); + mySyncAction = new QtxAction( tr( "MNU_SYNCHRONIZE_VIEW" ), + resMgr->loadPixmap( "SUIT", tr( "ICON_VIEW_SYNC" ) ), + tr( "MNU_SYNCHRONIZE_VIEW" ), 0, this ); + mySyncAction->setStatusTip( tr( "DSC_SYNCHRONIZE_VIEW" ) ); + mySyncAction->setMenu( new QMenu( this ) ); + mySyncAction->setCheckable( true ); + connect( mySyncAction->menu(), SIGNAL( aboutToShow() ), this, SLOT( updateSyncViews() ) ); + connect( mySyncAction, SIGNAL( triggered( bool ) ), this, SLOT( onSynchronizeView( bool ) ) ); + } + return mySyncAction; +} + +/*! + Emit notification signal that the view is transformed. + Other views can use the signal for synchronization. +*/ +void SUIT_ViewWindow::emitViewModified() +{ + emit viewModified( this ); +} + +/*! + Update list of available view for the "Synchronize View" action +*/ +void SUIT_ViewWindow::updateSyncViews() +{ + SUIT_CameraProperties props = cameraProperties(); + if ( !props.isValid() ) + return; + + QAction* anAction = synchronizeAction(); + if ( anAction && anAction->menu() ) { + int currentId = anAction->data().toInt(); + anAction->menu()->clear(); + SUIT_Application* app = SUIT_Session::session()->activeApplication(); + if ( app ) { + SUIT_Desktop* d = app->desktop(); + QList allViews = qFindChildren( d ); + foreach( SUIT_ViewWindow* vw, allViews ) { + if ( !vw || vw == this ) continue; // skip invalid views and this one + SUIT_CameraProperties otherProps = vw->cameraProperties(); + if ( otherProps.isCompatible( props ) ) { + QAction* a = anAction->menu()->addAction( vw->windowTitle() ); + if ( vw->getId() == currentId ) { + QFont f = a->font(); + f.setBold( true ); + a->setFont( f ); + } + a->setData( vw->getId() ); + connect( a, SIGNAL( triggered( bool ) ), this, SLOT( onSynchronizeView( bool ) ) ); + } + else if ( vw->getId() == currentId ) { + // other view, this one is being currently synchronized to, seems has become incompatible + // we have to break synchronization + vw->disconnect( SIGNAL( viewModified( SUIT_ViewWindow* ) ), this, SLOT( synchronize( SUIT_ViewWindow* ) ) ); + this->disconnect( SIGNAL( viewModified( SUIT_ViewWindow* ) ), vw, SLOT( synchronize( SUIT_ViewWindow* ) ) ); + // + bool blocked = anAction->blockSignals( true ); + anAction->setChecked( false ); + anAction->blockSignals( blocked ); + anAction->setData( 0 ); + // + QAction* a = vw->synchronizeAction(); + if ( a ) { + blocked = a->blockSignals( true ); + a->setChecked( false ); + a->blockSignals( blocked ); + } + } + } + } + if ( anAction->menu()->actions().isEmpty() ) { + anAction->setData( 0 ); + anAction->menu()->addAction( tr( "MNU_SYNC_NO_VIEW" ) ); + } + } +} + +/*! + "Synchronize View" action slot. +*/ +void SUIT_ViewWindow::onSynchronizeView( bool checked ) +{ + QAction* a = qobject_cast( sender() ); + if ( a ) { + synchronizeView( this, a->data().toInt() ); + } +} + +/*! + Synchronize camera properties of view \a viewWindow with + camera properties of view specified via \a id +*/ +void SUIT_ViewWindow::synchronizeView( SUIT_ViewWindow* viewWindow, int id ) +{ + SUIT_ViewWindow* sourceView = 0; + QList otherViews; + + bool isSync = viewWindow->synchronizeAction() && viewWindow->synchronizeAction()->isChecked(); + + int vwid = viewWindow->getId(); + + SUIT_Application* app = SUIT_Session::session()->activeApplication(); + if ( !app ) return; + SUIT_Desktop* d = app->desktop(); + if ( !d ) return; + + QList allViews = qFindChildren( d ); + foreach( SUIT_ViewWindow* vw, allViews ) { + if ( !vw->cameraProperties().isValid() ) + continue; // omit views not supporting camera properties + if ( vw->getId() == id ) + sourceView = vw; // remember source view + else if ( vw != viewWindow ) + otherViews.append( vw ); // collect all remaining views + } + + if ( isSync && id ) { + // remove all possible disconnections + foreach( SUIT_ViewWindow* vw, otherViews ) { + // disconnect target view + vw->disconnect( SIGNAL( viewModified( SUIT_ViewWindow* ) ), viewWindow, SLOT( synchronize( SUIT_ViewWindow* ) ) ); + viewWindow->disconnect( SIGNAL( viewModified( SUIT_ViewWindow* ) ), vw, SLOT( synchronize( SUIT_ViewWindow* ) ) ); + if ( sourceView ) { + // disconnect source view + vw->disconnect( SIGNAL( viewModified( SUIT_ViewWindow* ) ), sourceView, SLOT( synchronize( SUIT_ViewWindow* ) ) ); + sourceView->disconnect( SIGNAL( viewModified( SUIT_ViewWindow* ) ), vw, SLOT( synchronize( SUIT_ViewWindow* ) ) ); + } + QAction* a = vw->synchronizeAction(); + if ( a ) { + int anid = a->data().toInt(); + if ( a->isChecked() && ( anid == id || anid == vwid ) ) { + bool blocked = a->blockSignals( true ); + a->setChecked( false ); + a->blockSignals( blocked ); + } + } + } + if ( sourceView ) { + // reconnect source and target views + sourceView->disconnect( SIGNAL( viewModified( SUIT_ViewWindow* ) ), viewWindow, SLOT( synchronize( SUIT_ViewWindow* ) ) ); + viewWindow->disconnect( SIGNAL( viewModified( SUIT_ViewWindow* ) ), sourceView, SLOT( synchronize( SUIT_ViewWindow* ) ) ); + sourceView->connect( viewWindow, SIGNAL( viewModified( SUIT_ViewWindow* ) ), SLOT( synchronize( SUIT_ViewWindow* ) ) ); + viewWindow->connect( sourceView, SIGNAL( viewModified( SUIT_ViewWindow* ) ), SLOT( synchronize( SUIT_ViewWindow* ) ) ); + // synchronize target view with source view + viewWindow->synchronize( sourceView ); + if ( viewWindow->synchronizeAction() ) + viewWindow->synchronizeAction()->setData( sourceView->getId() ); + QAction* sourceAction = sourceView->synchronizeAction(); + if ( sourceAction ) { + sourceAction->setData( viewWindow->getId() ); + if ( !sourceAction->isChecked() ) { + bool blocked = sourceAction->blockSignals( true ); + sourceAction->setChecked( true ); + sourceAction->blockSignals( blocked ); + } + } + } + } + else if ( sourceView ) { + // reconnect source and target view + sourceView->disconnect( SIGNAL( viewModified( SUIT_ViewWindow* ) ), viewWindow, SLOT( synchronize( SUIT_ViewWindow* ) ) ); + viewWindow->disconnect( SIGNAL( viewModified( SUIT_ViewWindow* ) ), sourceView, SLOT( synchronize( SUIT_ViewWindow* ) ) ); + viewWindow->synchronize( sourceView ); + if ( viewWindow->synchronizeAction() ) + viewWindow->synchronizeAction() ->setData( sourceView->getId() ); + QAction* sourceAction = sourceView->synchronizeAction(); + if ( sourceAction ) { + if ( sourceAction->data().toInt() == viewWindow->getId() && sourceAction->isChecked() ) { + bool blocked = sourceAction->blockSignals( true ); + sourceAction->setChecked( false ); + sourceAction->blockSignals( blocked ); + } + } + } +} diff --git a/src/SUIT/SUIT_ViewWindow.h b/src/SUIT/SUIT_ViewWindow.h index e7dc87a1a..bf39ba042 100755 --- a/src/SUIT/SUIT_ViewWindow.h +++ b/src/SUIT/SUIT_ViewWindow.h @@ -26,6 +26,7 @@ #define SUIT_VIEWWINDOW_H #include "SUIT.h" +#include "SUIT_CameraProperties.h" #include #include @@ -71,6 +72,8 @@ public: virtual void setDropDownButtons( bool ); bool dropDownButtons() const; + virtual SUIT_CameraProperties cameraProperties(); + public slots: virtual void onDumpView(); @@ -85,7 +88,8 @@ signals: void keyPressed( SUIT_ViewWindow*, QKeyEvent* ); void keyReleased( SUIT_ViewWindow*, QKeyEvent* ); void contextMenuRequested( QContextMenuEvent *e ); - + void viewModified( SUIT_ViewWindow* ); + protected: void closeEvent( QCloseEvent* ); virtual void contextMenuEvent( QContextMenuEvent* ); @@ -93,15 +97,25 @@ protected: virtual bool action( const int ); virtual bool dumpViewToFormat( const QImage&, const QString& fileName, const QString& format ); + virtual QAction* synchronizeAction(); + static void synchronizeView( SUIT_ViewWindow* viewWindow, int id ); + SUIT_Desktop* myDesktop; SUIT_ViewManager* myManager; +protected slots: + void updateSyncViews(); + void onSynchronizeView(bool); + virtual void synchronize( SUIT_ViewWindow* ); + void emitViewModified(); + private: typedef QMap< int, QList > ActionsMap; QtxActionToolMgr* myToolMgr; bool myIsDropDown; ActionsMap myMultiActions; + QAction* mySyncAction; }; #endif // SUIT_VIEWWINDOW_H diff --git a/src/SUIT/resources/SUIT_images.ts b/src/SUIT/resources/SUIT_images.ts index ff3f7d4fc..63c601050 100644 --- a/src/SUIT/resources/SUIT_images.ts +++ b/src/SUIT/resources/SUIT_images.ts @@ -11,5 +11,9 @@ ICON_DATAOBJ_INVISIBLE icon_visibility_off.png + + ICON_VIEW_SYNC + view_sync.png + diff --git a/src/SUIT/resources/SUIT_msg_en.ts b/src/SUIT/resources/SUIT_msg_en.ts index c1435da5b..31bbc382a 100644 --- a/src/SUIT/resources/SUIT_msg_en.ts +++ b/src/SUIT/resources/SUIT_msg_en.ts @@ -113,6 +113,18 @@ Do you want to overwrite it? NAME_COLUMN Name + + MNU_SYNCHRONIZE_VIEW + Synchronize + + + DSC_SYNCHRONIZE_VIEW + Synchronize view + + + MNU_SYNC_NO_VIEW + [ No appropriate view ] + SUIT_Study diff --git a/src/SUIT/resources/SUIT_msg_fr.ts b/src/SUIT/resources/SUIT_msg_fr.ts index 345b25512..d3785c28d 100755 --- a/src/SUIT/resources/SUIT_msg_fr.ts +++ b/src/SUIT/resources/SUIT_msg_fr.ts @@ -113,6 +113,18 @@ Voulez-vous l'écraser ? NAME_COLUMN Nom + + MNU_SYNCHRONIZE_VIEW + Synchroniser + + + DSC_SYNCHRONIZE_VIEW + Synchroniser la vue + + + MNU_SYNC_NO_VIEW + [ Pas de vue appropriée ] + SUIT_Study diff --git a/src/OCCViewer/resources/occ_view_sync.png b/src/SUIT/resources/view_sync.png old mode 100755 new mode 100644 similarity index 100% rename from src/OCCViewer/resources/occ_view_sync.png rename to src/SUIT/resources/view_sync.png diff --git a/src/SVTK/Makefile.am b/src/SVTK/Makefile.am index c048c3f49..ad697f4fa 100755 --- a/src/SVTK/Makefile.am +++ b/src/SVTK/Makefile.am @@ -20,11 +20,6 @@ # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com # -# File : Makefile.in -# Author : Alexander Solovyov(OCN) -# Module : SVTK -# $Header$ -# include $(top_srcdir)/adm_local/unix/make_common_starter.am lib_LTLIBRARIES = libSVTK.la @@ -135,7 +130,6 @@ dist_salomeres_DATA=\ resources/vtk_view_recording_play.png \ resources/vtk_view_recording_pause.png \ resources/vtk_view_recording_stop.png \ - resources/vtk_view_sync.png \ resources/vtk_view_highlight.png nodist_salomeres_DATA = \ diff --git a/src/SVTK/SVTK_ViewWindow.cxx b/src/SVTK/SVTK_ViewWindow.cxx index 3a81fc72a..271aa4c93 100755 --- a/src/SVTK/SVTK_ViewWindow.cxx +++ b/src/SVTK/SVTK_ViewWindow.cxx @@ -76,7 +76,6 @@ #include "VTKViewer_Trihedron.h" #include "SVTK_View.h" -//#include "SVTK_MainWindow.h" #include "SVTK_Selector.h" #include "SVTK_Event.h" @@ -229,6 +228,8 @@ void SVTK_ViewWindow::Initialize(SVTK_ViewModelBase* theModel) GetInteractor()->GetInteractorStyle()->AddObserver(SVTK::OperationFinished, myEventCallbackCommand.GetPointer(), 0.0); + myKeyFreeInteractorStyle->AddObserver(SVTK::OperationFinished, + myEventCallbackCommand.GetPointer(), 0.0); @@ -259,6 +260,8 @@ void SVTK_ViewWindow::Initialize(SVTK_View* theView, this,SIGNAL(contextMenuRequested(QContextMenuEvent *))); connect(theView,SIGNAL(selectionChanged()), theModel,SLOT(onSelectionChanged())); + + connect( this, SIGNAL( transformed( SVTK_ViewWindow* ) ), SLOT( emitViewModified() ) ); } /*! @@ -1843,6 +1846,8 @@ void SVTK_ViewWindow::onPerspectiveMode() vtkCamera* aCamera = getRenderer()->GetActiveCamera(); aCamera->SetParallelProjection(anIsParallelMode); GetInteractor()->GetDevice()->CreateTimer(VTKI_TIMER_FIRST); + + emit transformed( this ); } void SVTK_ViewWindow::SetEventDispatcher(vtkObject* theDispatcher) @@ -2065,15 +2070,7 @@ void SVTK_ViewWindow::createActions(SUIT_ResourceMgr* theResourceMgr) mgr->registerAction( anAction, ViewParametersId ); // Synchronize View - anAction = new QtxAction(tr("MNU_SYNCHRONIZE_VIEW"), - theResourceMgr->loadPixmap( "VTKViewer", tr( "ICON_SVTK_SYNCHRONIZE" ) ), - tr( "MNU_SYNCHRONIZE_VIEW" ), 0, this); - anAction->setStatusTip(tr("DSC_SYNCHRONIZE_VIEW")); - anAction->setMenu( new QMenu( this ) ); - anAction->setCheckable(true); - connect(anAction->menu(), SIGNAL(aboutToShow()), this, SLOT(updateSyncViews())); - connect(anAction, SIGNAL(triggered(bool)), this, SLOT(onSynchronizeView(bool))); - mgr->registerAction( anAction, SynchronizeId ); + mgr->registerAction( synchronizeAction(), SynchronizeId ); // Switch between interaction styles anAction = new QtxAction(tr("MNU_SVTK_STYLE_SWITCH"), @@ -2361,134 +2358,6 @@ void SVTK_ViewWindow::hideEvent( QHideEvent * theEvent ) emit Hide( theEvent ); } -void SVTK_ViewWindow::synchronizeView( SVTK_ViewWindow* viewWindow, int id ) -{ - SVTK_ViewWindow* otherViewWindow = 0; - QList compatibleViews; - - bool isSync = viewWindow->toolMgr()->action( SynchronizeId )->isChecked(); - - int vwid = viewWindow->getId(); - - SUIT_Application* app = SUIT_Session::session()->activeApplication(); - if ( !app ) return; - - QList wmlist; - app->viewManagers( viewWindow->getViewManager()->getType(), wmlist ); - - foreach( SUIT_ViewManager* wm, wmlist ) { - QVector vwlist = wm->getViews(); - - foreach( SUIT_ViewWindow* vw, vwlist ) { - SVTK_ViewWindow* vtkVW = dynamic_cast( vw ); - if ( !vtkVW ) continue; - if ( vtkVW->getId() == id ) - otherViewWindow = vtkVW; - else if ( vtkVW != viewWindow ) - compatibleViews.append( vtkVW ); - } - } - - if ( isSync && id ) { - // remove all possible disconnections - foreach( SVTK_ViewWindow* vw, compatibleViews ) { - // disconnect target view - vw->disconnect( SIGNAL( transformed( SVTK_ViewPort* ) ), viewWindow, SLOT( synchronize( SVTK_ViewPort* ) ) ); - viewWindow->disconnect( SIGNAL( transformed( SVTK_ViewPort* ) ), vw, SLOT( synchronize( SVTK_ViewPort* ) ) ); - if ( otherViewWindow ) { - // disconnect source view - vw->disconnect( SIGNAL( transformed( SVTK_ViewPort* ) ), otherViewWindow, SLOT( synchronize( SVTK_ViewPort* ) ) ); - otherViewWindow->disconnect( SIGNAL( transformed( SVTK_ViewPort* ) ), vw, SLOT( synchronize( SVTK_ViewPort* ) ) ); - } - QAction* a = vw->toolMgr()->action( SynchronizeId ); - if ( a ) { - int anid = a->data().toInt(); - if ( a->isChecked() && ( anid == id || anid == vwid ) ) { - bool blocked = a->blockSignals( true ); - a->setChecked( false ); - a->blockSignals( blocked ); - } - } - } - if ( otherViewWindow ) { - // reconnect source and target view - otherViewWindow->disconnect( SIGNAL( transformed( SVTK_ViewWindow* ) ), viewWindow, SLOT( synchronize( SVTK_ViewWindow* ) ) ); - viewWindow->disconnect( SIGNAL( transformed( SVTK_ViewWindow* ) ), otherViewWindow, SLOT( synchronize( SVTK_ViewWindow* ) ) ); - otherViewWindow->connect( viewWindow, SIGNAL( transformed( SVTK_ViewWindow* ) ), SLOT( synchronize( SVTK_ViewWindow* ) ) ); - viewWindow->connect( otherViewWindow, SIGNAL( transformed( SVTK_ViewWindow* ) ), SLOT( synchronize( SVTK_ViewWindow* ) ) ); - // synchronize target view with source view - viewWindow->doSetVisualParameters( otherViewWindow->getVisualParameters(), true ); - viewWindow->toolMgr()->action( SynchronizeId )->setData( otherViewWindow->getId() ); - otherViewWindow->toolMgr()->action( SynchronizeId )->setData( viewWindow->getId() ); - if ( !otherViewWindow->toolMgr()->action( SynchronizeId )->isChecked() ) { - bool blocked = otherViewWindow->toolMgr()->action( SynchronizeId )->blockSignals( true ); - otherViewWindow->toolMgr()->action( SynchronizeId )->setChecked( true ); - otherViewWindow->toolMgr()->action( SynchronizeId )->blockSignals( blocked ); - } - } - } - else if ( otherViewWindow ) { - // reconnect source and target view - otherViewWindow->disconnect( SIGNAL( transformed( SVTK_ViewWindow* ) ), viewWindow, SLOT( synchronize( SVTK_ViewWindow* ) ) ); - viewWindow->disconnect( SIGNAL( transformed( SVTK_ViewWindow* ) ), otherViewWindow, SLOT( synchronize( SVTK_ViewWindow* ) ) ); - viewWindow->doSetVisualParameters( otherViewWindow->getVisualParameters(), true ); - viewWindow->toolMgr()->action( SynchronizeId )->setData( otherViewWindow->getId() ); - if ( otherViewWindow->toolMgr()->action( SynchronizeId )->data().toInt() == viewWindow->getId() && otherViewWindow->toolMgr()->action( SynchronizeId )->isChecked() ) { - bool blocked = otherViewWindow->toolMgr()->action( SynchronizeId )->blockSignals( true ); - otherViewWindow->toolMgr()->action( SynchronizeId )->setChecked( false ); - otherViewWindow->toolMgr()->action( SynchronizeId )->blockSignals( blocked ); - } - } -} - -/*! - "Synchronize View" action slot. -*/ -void SVTK_ViewWindow::onSynchronizeView(bool checked) -{ - QAction* a = qobject_cast( sender() ); - if ( a ) { - synchronizeView( this, a->data().toInt() ); - } -} - -/*! - Update list of available view for the "Synchronize View" action -*/ -void SVTK_ViewWindow::updateSyncViews() -{ - QAction* anAction = toolMgr()->action( SynchronizeId ); - if ( anAction && anAction->menu() ) { - int currentId = anAction->data().toInt(); - anAction->menu()->clear(); - SUIT_Application* app = SUIT_Session::session()->activeApplication(); - if ( app ) { - QList wmlist; - app->viewManagers( getViewManager()->getType(), wmlist ); - foreach( SUIT_ViewManager* wm, wmlist ) { - QVector vwlist = wm->getViews(); - foreach ( SUIT_ViewWindow* vw, vwlist ) { - SVTK_ViewWindow* vtkVW = dynamic_cast( vw ); - if ( !vtkVW || vtkVW == this ) continue; - QAction* a = anAction->menu()->addAction( vtkVW->windowTitle() ); - if ( vtkVW->getId() == currentId ) { - QFont f = a->font(); - f.setBold( true ); - a->setFont( f ); - } - a->setData( vtkVW->getId() ); - connect( a, SIGNAL( triggered(bool) ), this, SLOT( onSynchronizeView(bool) ) ); - } - } - } - if ( anAction->menu()->actions().isEmpty() ) { - anAction->setData( 0 ); - anAction->menu()->addAction( tr( "MNU_SYNC_NO_VIEW" ) ); - } - } -} - - /*! Emit transformed signal. */ @@ -2508,3 +2377,99 @@ void SVTK_ViewWindow::ProcessEvents(vtkObject* vtkNotUsed(theObject), if(self) self->emitTransformed(); } + +/*! + Get camera properties for the SVTK view window. + \return shared pointer on camera properties. +*/ +SUIT_CameraProperties SVTK_ViewWindow::cameraProperties() +{ + SUIT_CameraProperties aProps; + + // get vtk camera + vtkCamera* aCamera = getRenderer()->GetActiveCamera(); + if ( !aCamera ) + return aProps; + + aProps.setDimension( SUIT_CameraProperties::Dim3D ); + if ( toolMgr()->action( ParallelModeId ) ) { + if ( toolMgr()->action( ParallelModeId )->isChecked() ) + aProps.setProjection( SUIT_CameraProperties::PrjOrthogonal ); + else + aProps.setProjection( SUIT_CameraProperties::PrjPerspective ); + } + + double aFocalPoint[3]; + double aPosition[3]; + double aViewUp[3]; + double anAxialScale[3]; + + aCamera->OrthogonalizeViewUp(); + aCamera->GetFocalPoint(aFocalPoint); + aCamera->GetPosition(aPosition); + aCamera->GetViewUp(aViewUp); + + aProps.setFocalPoint(aFocalPoint[0], aFocalPoint[1], aFocalPoint[2]); + aProps.setPosition(aPosition[0], aPosition[1], aPosition[2]); + aProps.setViewUp(aViewUp[0], aViewUp[1], aViewUp[2]); + aProps.setMappingScale(aCamera->GetParallelScale()); + + if (aProps.getProjection() == SUIT_CameraProperties::PrjPerspective) + { + aProps.setViewAngle(aCamera->GetViewAngle()); + } + + GetRenderer()->GetScale(anAxialScale); + aProps.setAxialScale(anAxialScale[0], anAxialScale[1], anAxialScale[2]); + + return aProps; +} + +/*! + Synchronize views. + This implementation synchronizes camera propreties. +*/ +void SVTK_ViewWindow::synchronize( SUIT_ViewWindow* theView ) +{ + bool blocked = blockSignals( true ); + + SUIT_CameraProperties aProps = theView->cameraProperties(); + if ( !cameraProperties().isCompatible( aProps ) ) { + // other view, this one is being currently synchronized to, seems has become incompatible + // we have to break synchronization + updateSyncViews(); + return; + } + + // get camera + vtkCamera* aCamera = getRenderer()->GetActiveCamera(); + + double aFocalPoint[3]; + double aPosition[3]; + double aViewUp[3]; + double anAxialScale[3]; + + // get common properties + aProps.getViewUp(aViewUp[0], aViewUp[1], aViewUp[2]); + aProps.getPosition(aPosition[0], aPosition[1], aPosition[2]); + aProps.getFocalPoint(aFocalPoint[0], aFocalPoint[1], aFocalPoint[2]); + aProps.getAxialScale(anAxialScale[0], anAxialScale[1], anAxialScale[2]); + + // restore properties to the camera + aCamera->SetViewUp(aViewUp); + aCamera->SetPosition(aPosition); + aCamera->SetFocalPoint(aFocalPoint); + aCamera->SetParallelScale(aProps.getMappingScale()); + + if (aProps.getProjection() == SUIT_CameraProperties::PrjPerspective) + { + aCamera->SetViewAngle(aProps.getViewAngle()); + } + + GetRenderer()->SetScale(anAxialScale); + + getRenderer()->ResetCameraClippingRange(); + Repaint(false); + + blockSignals( blocked ); +} diff --git a/src/SVTK/SVTK_ViewWindow.h b/src/SVTK/SVTK_ViewWindow.h index 15c977e3e..abb6c0968 100755 --- a/src/SVTK/SVTK_ViewWindow.h +++ b/src/SVTK/SVTK_ViewWindow.h @@ -276,6 +276,8 @@ class SVTK_EXPORT SVTK_ViewWindow : public SUIT_ViewWindow //! To invoke a VTK event on #SVTK_RenderWindowInteractor instance void InvokeEvent(unsigned long theEvent, void* theCallData); + virtual SUIT_CameraProperties cameraProperties(); + signals: void Show( QShowEvent * ); void Hide( QHideEvent * ); @@ -372,6 +374,7 @@ public slots: virtual void synchronize(SVTK_ViewWindow*); protected slots: + void synchronize( SUIT_ViewWindow* ); void onKeyPressed(QKeyEvent* event); void onKeyReleased(QKeyEvent* event); void onMousePressed(QMouseEvent* event); @@ -446,13 +449,6 @@ protected: vtkPVAxesWidget* myAxesWidget; Qtx::BackgroundData myBackground; -private slots: - void onSynchronizeView(bool); - void updateSyncViews(); - -private: - static void synchronizeView( SVTK_ViewWindow*, int ); - private: QImage myDumpImage; }; diff --git a/src/SVTK/resources/SVTK_images.ts b/src/SVTK/resources/SVTK_images.ts index 362ffef6e..3794dfb54 100644 --- a/src/SVTK/resources/SVTK_images.ts +++ b/src/SVTK/resources/SVTK_images.ts @@ -55,10 +55,6 @@ ICON_SVTK_RECORDING_STOP vtk_view_recording_stop.png - - ICON_SVTK_SYNCHRONIZE - vtk_view_sync.png - ICON_SVTK_DYNAMIC_PRESLECTION_SWITCH vtk_view_highlight.png diff --git a/src/SVTK/resources/SVTK_msg_en.ts b/src/SVTK/resources/SVTK_msg_en.ts index f4da48aa4..623656fef 100644 --- a/src/SVTK/resources/SVTK_msg_en.ts +++ b/src/SVTK/resources/SVTK_msg_en.ts @@ -179,18 +179,6 @@ DSC_VIEWPARAMETERS_VIEW Change the parameters of the view - - MNU_SYNCHRONIZE_VIEW - Synchronize - - - DSC_SYNCHRONIZE_VIEW - Synchronize view - - - MNU_SYNC_NO_VIEW - [ No appropriate view ] - MNU_SVTK_PARALLEL_MODE Orthogonal Mode diff --git a/src/SVTK/resources/SVTK_msg_fr.ts b/src/SVTK/resources/SVTK_msg_fr.ts index 57c6e2f05..5c188b2f5 100755 --- a/src/SVTK/resources/SVTK_msg_fr.ts +++ b/src/SVTK/resources/SVTK_msg_fr.ts @@ -179,18 +179,6 @@ DSC_VIEWPARAMETERS_VIEW Changer les paramètres de la vue - - MNU_SYNCHRONIZE_VIEW - Synchroniser - - - DSC_SYNCHRONIZE_VIEW - Synchroniser la vue - - - MNU_SYNC_NO_VIEW - [ Pas de vue appropriée ] - MNU_SVTK_PARALLEL_MODE Mode orthogonal diff --git a/src/SVTK/resources/vtk_view_sync.png b/src/SVTK/resources/vtk_view_sync.png deleted file mode 100755 index 32b95228a8b97c791405a2b82d9a472aecf37c1b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 627 zcmV-(0*w8MP)Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2ipl4 z3JE46$lxyk00Hw!L_t(I%axR|Yuiu|hrcs|q>D9Vh|v%-G{c)ab#!py(IJZ|9ZL-{ zT?!Gz7(=1zR7?UIv;-Fn?XJZ`2qaW<|A643OX;AxLnshQR>$Nc0wC)uoT|!)0R%9aLf=&G|T-TmeK{i{-N-Eru*LP^!6(1GJI z@L~WeWuM>gon^2xwZ5;YJ5CD4_f>WeR$BDr^*gqA_cC=UEdTDhV*{Yn7=Tfl&p9Cj zZtw2#`^Wc!l00mYUuV5)EjnBlTU$GGxxt?ua9)7tL8?&eU?ra{^Q+bY79bZFZ?j|+ z$Aw#+7Mgs`>}>N - + diff --git a/src/Session/SALOME_Session_Server.cxx b/src/Session/SALOME_Session_Server.cxx index f94e9a639..a0c6f8833 100755 --- a/src/Session/SALOME_Session_Server.cxx +++ b/src/Session/SALOME_Session_Server.cxx @@ -659,11 +659,14 @@ int main( int argc, char **argv ) // unlock Session mutex _SessionMutex.unlock(); - if ( shutdownAll ) + if ( myServerLauncher ) + myServerLauncher->ShutdownAll(); // shutdown embedded servers + + if ( shutdownAll ) // shutdown standalone servers shutdownServers( _NS ); if ( myServerLauncher ) - myServerLauncher->KillAll(); // kill embedded servers + myServerLauncher->KillAll(); // kill embedded servers // Unregister session server SALOME_Session_i* sessionServant = dynamic_cast( poa->reference_to_servant( session.in() ) ); diff --git a/src/Session/Session_ServerLauncher.cxx b/src/Session/Session_ServerLauncher.cxx index 39c9c5ef6..9a442e9f7 100755 --- a/src/Session/Session_ServerLauncher.cxx +++ b/src/Session/Session_ServerLauncher.cxx @@ -230,6 +230,16 @@ void Session_ServerLauncher::ActivateAll() delete[] argv; } +void Session_ServerLauncher::ShutdownAll() +{ + MESSAGE("Session_ServerLauncher::ShutdownAll()"); + std::list::reverse_iterator itServ; + for (itServ = _serverThreads.rbegin(); itServ !=_serverThreads.rend(); itServ++) + { + (*itServ)->Shutdown(); + } +} + /*! Destruction des classes serveur dans l'ordre inverse de creation */ diff --git a/src/Session/Session_ServerLauncher.hxx b/src/Session/Session_ServerLauncher.hxx index 39b9eaa83..c2cd32176 100755 --- a/src/Session/Session_ServerLauncher.hxx +++ b/src/Session/Session_ServerLauncher.hxx @@ -67,6 +67,7 @@ public: QWaitCondition *SessionStarted); virtual ~Session_ServerLauncher(); void run(); + void ShutdownAll(); void KillAll(); protected: diff --git a/src/Session/Session_ServerThread.cxx b/src/Session/Session_ServerThread.cxx index 07e1e6726..341231c87 100755 --- a/src/Session/Session_ServerThread.cxx +++ b/src/Session/Session_ServerThread.cxx @@ -84,6 +84,7 @@ Session_ServerThread::Session_ServerThread(int argc, _servType =-1; _NS = new SALOME_NamingService(_orb); // one instance per server to limit // multi thread coherence problems + _container = 0; // embedded container } /*! @@ -165,6 +166,11 @@ void Session_ServerThread::Init() } } +void Session_ServerThread::Shutdown() +{ + if ( _container ) _container->Shutdown(); +} + void Session_ServerThread::ActivateModuleCatalog(int argc, char ** argv) { @@ -356,7 +362,7 @@ void Session_ServerThread::ActivateContainer(int argc, containerName = argv[1]; } - new Engines_Container_i(_orb, _root_poa, containerName , argc , argv , true , false); + _container = new Engines_Container_i(_orb, _root_poa, containerName , argc , argv , true , false); } catch(CORBA::SystemException&) { INFOS("Caught CORBA::SystemException."); diff --git a/src/Session/Session_ServerThread.hxx b/src/Session/Session_ServerThread.hxx index e6a970008..46bd6d3cd 100755 --- a/src/Session/Session_ServerThread.hxx +++ b/src/Session/Session_ServerThread.hxx @@ -35,6 +35,7 @@ void WaitForServerReadiness(std::string serverName); class SALOME_NamingService; +class Engines_Container_i; class SESSION_EXPORT Session_ServerThread { @@ -49,6 +50,7 @@ public: PortableServer::POA_ptr poa); virtual ~Session_ServerThread(); void Init(); + void Shutdown(); protected: void ActivateModuleCatalog ( int argc, char ** argv ); void ActivateSALOMEDS ( int argc, char ** argv ); @@ -64,6 +66,7 @@ protected: CORBA::ORB_var _orb; PortableServer::POA_var _root_poa; SALOME_NamingService * _NS; + Engines_Container_i* _container; }; class QMutex; diff --git a/src/TreeData/Test/Makefile.am b/src/TreeData/Test/Makefile.am index 8d6141e76..cf7bf98db 100644 --- a/src/TreeData/Test/Makefile.am +++ b/src/TreeData/Test/Makefile.am @@ -39,7 +39,7 @@ CORBA_CXXFLAGS=@OMNIORB_CXXFLAGS@ @OMNIORB_INCLUDES@ CORBA_LIBS=@OMNIORB_LIBS@ QT_CXXFLAGS=@QT_INCLUDES@ @QT_MT_INCLUDES@ -TEST_CPPFLAGS = \ +COMMON_CPP_FLAGS = \ $(QT_CXXFLAGS) \ $(CORBA_CXXFLAGS) \ $(KERNEL_CXXFLAGS) \ @@ -47,11 +47,16 @@ TEST_CPPFLAGS = \ -I$(top_srcdir)/src/TreeData \ -I. -TEST_LDFLAGS = \ +COMMON_LIBS = \ $(CORBA_LIBS) $(QT_LIBS) \ $(top_builddir)/src/TreeData/libSalomeTreeData.la \ $(top_builddir)/src/GuiHelpers/libSalomeGuiHelpers.la \ - $(KERNEL_LDFLAGS) -lSalomeLifeCycleCORBA -lSalomeKernelHelpers + $(top_builddir)/src/SUIT/libsuit.la \ + $(top_builddir)/src/CAM/libCAM.la \ + $(top_builddir)/src/Plot2d/libPlot2d.la \ + $(top_builddir)/src/LightApp/libLightApp.la \ + $(top_builddir)/src/SalomeApp/libSalomeApp.la \ + $(KERNEL_LDFLAGS) -lSalomeLifeCycleCORBA -lSalomeKernelHelpers @LIBXML_LIBS@ # Program targets bin_PROGRAMS = TreeData_guitester TreeData_tester @@ -76,20 +81,20 @@ TreeData_guitester_SOURCES = \ MyDataModel.cxx TreeData_guitester_CPPFLAGS = \ - $(TEST_CPPFLAGS) + $(COMMON_CPP_FLAGS) TreeData_guitester_LDFLAGS = \ - $(TEST_LDFLAGS) + $(COMMON_LIBS) TreeData_tester_SOURCES = \ tester.cxx \ MyDataModel.cxx TreeData_tester_CPPFLAGS = \ - $(TEST_CPPFLAGS) + $(COMMON_CPP_FLAGS) TreeData_tester_LDFLAGS = \ - $(TEST_LDFLAGS) + $(COMMON_LIBS) # test data files testdir = $(salomeresdir)/testdata diff --git a/src/VTKViewer/VTKViewer_GeometryFilter.cxx b/src/VTKViewer/VTKViewer_GeometryFilter.cxx index f004c867b..7d139de07 100755 --- a/src/VTKViewer/VTKViewer_GeometryFilter.cxx +++ b/src/VTKViewer/VTKViewer_GeometryFilter.cxx @@ -68,6 +68,28 @@ //#define __MYDEBUG__ //#define USE_ROBUST_TRIANGULATION +/////////////////////////////////////////////////////////////////////////////////////////////// +// VSR 26/10/2012: fix of regression (issue 21924) - increased memory consumption +// for displaying of 3d elements, introduced by fix for issue 20314. +// ... +// The macro SHOW_COINCIDING_3D_PAL20314, when defined, allows correct visualization of +// coincident 3d elements but causes substantial increasing of memory consumption, as all 3d +// elements are always shown, even if they are totally covered by surrounding faces. +// If this macro is not defined (commented), the behaviour is defined by another macro - +// SHOW_COINCIDING_3D_PAL21924, as follows: +// - If SHOW_COINCIDING_3D_PAL21924 is defined, an alternative solution for computing +// visibility of 3d elements is used; this solution allows to fix problem with visibility +// of coinciding 3d elements in most cases (though some cases might not work), while not +// causing significant increasing of memory consumption. +// - If SHOW_COINCIDING_3D_PAL21924 is not defined (commented), coinciding 3d elements are +// not shown at all (this corresponds to the state before issue 20314 fixing). +/////////////////////////////////////////////////////////////////////////////////////////////// +//#define SHOW_COINCIDING_3D_PAL20314 +#ifndef SHOW_COINCIDING_3D_PAL20314 +#define SHOW_COINCIDING_3D_PAL21924 +#endif +/////////////////////////////////////////////////////////////////////////////////////////////// + vtkCxxRevisionMacro(VTKViewer_GeometryFilter, "$Revision$"); vtkStandardNewMacro(VTKViewer_GeometryFilter); @@ -156,6 +178,8 @@ VTKViewer_GeometryFilter vtkIdList *cellIds = vtkIdList::New(); vtkIdList *faceIds = vtkIdList::New(); + vtkIdList *cellIdsTmp = vtkIdList::New(); + vtkIdList *faceIdsTmp = vtkIdList::New(); char *cellVis; vtkIdType newCellId; @@ -331,7 +355,7 @@ VTKViewer_GeometryFilter cellId, myShowInside, allVisible, - myAppendCoincident3D, + GetAppendCoincident3D(), cellVis, output, outputCD, @@ -345,7 +369,7 @@ VTKViewer_GeometryFilter cellId, myShowInside, allVisible, - myAppendCoincident3D, + GetAppendCoincident3D(), cellVis, output, outputCD, @@ -357,6 +381,12 @@ VTKViewer_GeometryFilter break; } case VTK_TETRA: { +#ifdef SHOW_COINCIDING_3D_PAL21924 + faceIdsTmp->Reset(); + for (int ai=0; aiInsertNextId(pts[ai]); + input->GetCellNeighbors(cellId, faceIdsTmp, cellIdsTmp); +#endif for (faceId = 0; faceId < 4; faceId++) { faceIds->Reset(); @@ -367,7 +397,15 @@ VTKViewer_GeometryFilter aCellType = VTK_TRIANGLE; numFacePts = 3; input->GetCellNeighbors(cellId, faceIds, cellIds); - bool process = cellIds->GetNumberOfIds() <= 0 ? true : myAppendCoincident3D; +#ifdef SHOW_COINCIDING_3D_PAL21924 + int nbNeighbors = 0; + for(int ai=0;aiGetNumberOfIds();ai++) { + if (cellIdsTmp->IsId(cellIds->GetId(ai)) == -1) nbNeighbors++; + } + bool process = nbNeighbors <= 0; +#else + bool process = cellIds->GetNumberOfIds() <= 0 || GetAppendCoincident3D(); +#endif if ( process || myShowInside || (!allVisible && !cellVis[cellIds->GetId(0)]) ) { @@ -382,6 +420,12 @@ VTKViewer_GeometryFilter break; } case VTK_VOXEL: { +#ifdef SHOW_COINCIDING_3D_PAL21924 + faceIdsTmp->Reset(); + for (int ai=0; aiInsertNextId(pts[ai]); + input->GetCellNeighbors(cellId, faceIdsTmp, cellIdsTmp); +#endif for (faceId = 0; faceId < 6; faceId++) { faceIds->Reset(); @@ -393,7 +437,15 @@ VTKViewer_GeometryFilter aCellType = VTK_QUAD; numFacePts = 4; input->GetCellNeighbors(cellId, faceIds, cellIds); - bool process = cellIds->GetNumberOfIds() <= 0 ? true : myAppendCoincident3D; +#ifdef SHOW_COINCIDING_3D_PAL21924 + int nbNeighbors = 0; + for(int ai=0;aiGetNumberOfIds();ai++) { + if (cellIdsTmp->IsId(cellIds->GetId(ai)) == -1) nbNeighbors++; + } + bool process = nbNeighbors <= 0; +#else + bool process = cellIds->GetNumberOfIds() <= 0 || GetAppendCoincident3D(); +#endif if ( process || myShowInside || (!allVisible && !cellVis[cellIds->GetId(0)]) ) { @@ -408,6 +460,12 @@ VTKViewer_GeometryFilter break; } case VTK_HEXAHEDRON: { +#ifdef SHOW_COINCIDING_3D_PAL21924 + faceIdsTmp->Reset(); + for (int ai=0; aiInsertNextId(pts[ai]); + input->GetCellNeighbors(cellId, faceIdsTmp, cellIdsTmp); +#endif for (faceId = 0; faceId < 6; faceId++) { faceIds->Reset(); @@ -419,7 +477,15 @@ VTKViewer_GeometryFilter aCellType = VTK_QUAD; numFacePts = 4; input->GetCellNeighbors(cellId, faceIds, cellIds); - bool process = cellIds->GetNumberOfIds() <= 0 ? true : myAppendCoincident3D; +#ifdef SHOW_COINCIDING_3D_PAL21924 + int nbNeighbors = 0; + for(int ai=0;aiGetNumberOfIds();ai++) { + if (cellIdsTmp->IsId(cellIds->GetId(ai)) == -1) nbNeighbors++; + } + bool process = nbNeighbors <= 0; +#else + bool process = cellIds->GetNumberOfIds() <= 0 || GetAppendCoincident3D(); +#endif if ( process || myShowInside || (!allVisible && !cellVis[cellIds->GetId(0)]) ) { @@ -434,6 +500,12 @@ VTKViewer_GeometryFilter break; } case VTK_WEDGE: { +#ifdef SHOW_COINCIDING_3D_PAL21924 + faceIdsTmp->Reset(); + for (int ai=0; aiInsertNextId(pts[ai]); + input->GetCellNeighbors(cellId, faceIdsTmp, cellIdsTmp); +#endif for (faceId = 0; faceId < 5; faceId++) { faceIds->Reset(); @@ -451,7 +523,15 @@ VTKViewer_GeometryFilter } input->GetCellNeighbors(cellId, faceIds, cellIds); - bool process = cellIds->GetNumberOfIds() <= 0 ? true : myAppendCoincident3D; +#ifdef SHOW_COINCIDING_3D_PAL21924 + int nbNeighbors = 0; + for(int ai=0;aiGetNumberOfIds();ai++) { + if (cellIdsTmp->IsId(cellIds->GetId(ai)) == -1) nbNeighbors++; + } + bool process = nbNeighbors <= 0; +#else + bool process = cellIds->GetNumberOfIds() <= 0 || GetAppendCoincident3D(); +#endif if ( process || myShowInside || (!allVisible && !cellVis[cellIds->GetId(0)]) ) { @@ -466,6 +546,12 @@ VTKViewer_GeometryFilter break; } case VTK_HEXAGONAL_PRISM: { +#ifdef SHOW_COINCIDING_3D_PAL21924 + faceIdsTmp->Reset(); + for (int ai=0; aiInsertNextId(pts[ai]); + input->GetCellNeighbors(cellId, faceIdsTmp, cellIdsTmp); +#endif for (faceId = 0; faceId < 8; faceId++) { faceVerts = vtkHexagonalPrism::GetFaceArray(faceId); @@ -484,7 +570,15 @@ VTKViewer_GeometryFilter numFacePts = 6; } input->GetCellNeighbors(cellId, faceIds, cellIds); - bool process = cellIds->GetNumberOfIds() <= 0 ? true : myAppendCoincident3D; +#ifdef SHOW_COINCIDING_3D_PAL21924 + int nbNeighbors = 0; + for(int ai=0;aiGetNumberOfIds();ai++) { + if (cellIdsTmp->IsId(cellIds->GetId(ai)) == -1) nbNeighbors++; + } + bool process = nbNeighbors <= 0; +#else + bool process = cellIds->GetNumberOfIds() <= 0 || GetAppendCoincident3D(); +#endif if ( process || myShowInside || (!allVisible && !cellVis[cellIds->GetId(0)]) ) { @@ -499,6 +593,12 @@ VTKViewer_GeometryFilter break; } case VTK_PYRAMID: { +#ifdef SHOW_COINCIDING_3D_PAL21924 + faceIdsTmp->Reset(); + for (int ai=0; aiInsertNextId(pts[ai]); + input->GetCellNeighbors(cellId, faceIdsTmp, cellIdsTmp); +#endif for (faceId = 0; faceId < 5; faceId++) { faceIds->Reset(); @@ -515,7 +615,15 @@ VTKViewer_GeometryFilter numFacePts = 4; } input->GetCellNeighbors(cellId, faceIds, cellIds); - bool process = cellIds->GetNumberOfIds() <= 0 ? true : myAppendCoincident3D; +#ifdef SHOW_COINCIDING_3D_PAL21924 + int nbNeighbors = 0; + for(int ai=0;aiGetNumberOfIds();ai++) { + if (cellIdsTmp->IsId(cellIds->GetId(ai)) == -1) nbNeighbors++; + } + bool process = nbNeighbors <= 0; +#else + bool process = cellIds->GetNumberOfIds() <= 0 || GetAppendCoincident3D(); +#endif if ( process || myShowInside || (!allVisible && !cellVis[cellIds->GetId(0)]) ) { @@ -538,6 +646,12 @@ VTKViewer_GeometryFilter vtkIdType* ptIds = 0; int idp = 0; input->GetFaceStream(cellId, nFaces, ptIds); +#ifdef SHOW_COINCIDING_3D_PAL21924 + faceIdsTmp->Reset(); + for (int ai=0; aiInsertNextId(pts[ai]); + input->GetCellNeighbors(cellId, faceIdsTmp, cellIdsTmp); +#endif for (faceId = 0; faceId < nFaces; faceId++) { faceIds->Reset(); @@ -564,7 +678,15 @@ VTKViewer_GeometryFilter } // TODO understand and fix display of several polyhedrons input->GetCellNeighbors(cellId, faceIds, cellIds); - bool process = cellIds->GetNumberOfIds() <= 0 ? true : myAppendCoincident3D; +#ifdef SHOW_COINCIDING_3D_PAL21924 + int nbNeighbors = 0; + for(int ai=0;aiGetNumberOfIds();ai++) { + if (cellIdsTmp->IsId(cellIds->GetId(ai)) == -1) nbNeighbors++; + } + bool process = nbNeighbors <= 0; +#else + bool process = cellIds->GetNumberOfIds() <= 0 || GetAppendCoincident3D(); +#endif if (process || myShowInside || (!allVisible && !cellVis[cellIds->GetId(0)])) { @@ -643,12 +765,36 @@ VTKViewer_GeometryFilter } else //3D nonlinear cell { +#ifdef SHOW_COINCIDING_3D_PAL21924 + faceIdsTmp->Reset(); + int npts1 = 0; + switch (aCellType ){ + case VTK_QUADRATIC_TETRA: npts1 = 4; break; + case VTK_QUADRATIC_HEXAHEDRON: npts1 = 8; break; + case VTK_TRIQUADRATIC_HEXAHEDRON: npts1 = 8; break; + case VTK_QUADRATIC_WEDGE: npts1 = 6; break; + case VTK_QUADRATIC_PYRAMID: npts1 = 5; break; + } + if ( npts1 > 0 ) { + for (int ai=0; aiInsertNextId(pts[ai]); + input->GetCellNeighbors(cellId, faceIdsTmp, cellIdsTmp); + } +#endif aCellType = VTK_TRIANGLE; numFacePts = 3; for (int j=0; j < cell->GetNumberOfFaces(); j++){ vtkCell *face = cell->GetFace(j); input->GetCellNeighbors(cellId, face->PointIds, cellIds); - bool process = cellIds->GetNumberOfIds() <= 0 ? true : myAppendCoincident3D; +#ifdef SHOW_COINCIDING_3D_PAL21924 + int nbNeighbors = 0; + for(int ai=0;aiGetNumberOfIds();ai++) { + if (cellIdsTmp->IsId(cellIds->GetId(ai)) == -1) nbNeighbors++; + } + bool process = nbNeighbors <= 0; +#else + bool process = cellIds->GetNumberOfIds() <= 0 || GetAppendCoincident3D(); +#endif if ( process || myShowInside ) { face->Triangulate(0,lpts,coords); for (i=0; i < lpts->GetNumberOfIds(); i+=3) { @@ -1075,6 +1221,8 @@ VTKViewer_GeometryFilter cellIds->Delete(); faceIds->Delete(); + cellIdsTmp->Delete(); + faceIdsTmp->Delete(); if ( cellVis ) { @@ -1390,9 +1538,14 @@ vtkFloatingPointType VTKViewer_GeometryFilter:: GetQuadraticArcAngle() const return myMaxArcAngle; } - int VTKViewer_GeometryFilter::GetAppendCoincident3D() const { +// VSR 26/10/2012: see description of SHOW_COINCIDING_3D_PAL20314 +// in the top of this file +#ifdef SHOW_COINCIDING_3D_PAL20314 return myAppendCoincident3D; +#else + return false; +#endif } void VTKViewer_GeometryFilter::SetAppendCoincident3D(int theFlag) { -- 2.39.2