From 5ab4e9f868874916c91b51f12aa8beacf09f4125 Mon Sep 17 00:00:00 2001 From: vsr Date: Thu, 13 Dec 2012 08:17:51 +0000 Subject: [PATCH] Merge from V6_main 13/12/2012 --- CMakeLists.txt | 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/images/studyproperties.png | Bin 9515 -> 24304 bytes doc/salome/gui/input/salome_desktop.doc | 24 +- .../gui/input/study_management_chapter.doc | 15 +- src/CAM/CAM_Application.cxx | 18 +- src/CAM/CAM_Application.h | 22 +- src/LightApp/LightApp_Application.cxx | 15 +- src/LightApp/LightApp_Application.h | 2 +- src/LightApp/LightApp_ShowHideOp.cxx | 2 +- src/LightApp/resources/LightApp.xml | 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 | 111 +++--- src/Plot2d/Plot2d_ViewFrame.h | 6 +- src/Qtx/QtxMainWindow.cxx | 42 ++- src/Qtx/QtxMainWindow.h | 4 + src/Qtx/QtxPopupMgr.cxx | 2 +- src/SALOME_PYQT/SalomePyQt/Makefile.am | 10 +- 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 | 36 +- src/SVTK/resources/SVTK_msg_fr.ts | 36 +- src/SVTK/resources/vtk_view_sync.png | Bin 627 -> 0 bytes src/SalomeApp/CMakeLists.txt | 2 + src/SalomeApp/Makefile.am | 11 +- .../SalomeApp_Engine_i.cxx | 22 +- .../SalomeApp_Engine_i.h} | 8 +- src/SalomeApp/SalomeApp_Study.cxx | 2 +- .../SalomeApp_StudyPropertiesDlg.cxx | 45 ++- src/SalomeApp/SalomeApp_StudyPropertiesDlg.h | 1 + src/SalomeApp/pluginsdemo/salome_plugins.py | 16 +- src/SalomeApp/resources/SalomeApp.xml | 2 +- src/SalomeApp/resources/SalomeApp_msg_en.ts | 12 + src/SalomeApp/resources/SalomeApp_msg_fr.ts | 12 + src/Session/CMakeLists.txt | 2 - src/Session/Makefile.am | 6 +- 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 ++++++++- 65 files changed, 1572 insertions(+), 560 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 rename src/{Session => SalomeApp}/SalomeApp_Engine_i.cxx (95%) rename src/{Session/SalomeApp_Engine_i.hxx => SalomeApp/SalomeApp_Engine_i.h} (97%) mode change 100755 => 100644 diff --git a/CMakeLists.txt b/CMakeLists.txt index 3284c0519..a03543dd2 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 "7.0.0") SET(VERSION_DEV "1") SET(KERNEL_ROOT_DIR $ENV{KERNEL_ROOT_DIR}) 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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 diff --git a/doc/salome/gui/input/salome_desktop.doc b/doc/salome/gui/input/salome_desktop.doc index f6361c620..5ce734d80 100644 --- a/doc/salome/gui/input/salome_desktop.doc +++ b/doc/salome/gui/input/salome_desktop.doc @@ -12,23 +12,23 @@ viewers, dialogs, etc. Each desktop also has its own menu and toolbar. The main SALOME Desktop consists of the following sections and toolbars: -\image html geomview-alt.png +\image html desktop.png Basic 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/doc/salome/gui/input/study_management_chapter.doc b/doc/salome/gui/input/study_management_chapter.doc index 71f3ed5e2..b06d86873 100644 --- a/doc/salome/gui/input/study_management_chapter.doc +++ b/doc/salome/gui/input/study_management_chapter.doc @@ -86,25 +86,32 @@ To confirm your choice click \b Save. To confirm your choice click \b Open. -Properties - allows to edit the properties of the current study. +Properties - allows to show/edit the properties of the current study. \image html studyproperties.png
    • \b Author - allows to change the name of the study author.
    • Creation date - gives the date and time of Study creation.
    • -
    • \b Locked - allows to lock the study for modifications. +
    • \b Locked - allows to lock the study for modifications. In case if \b Locked checkbox is checked your study will be locked for any modifications for all users. Next time you try to edit it, you will see the following warning message: \image html lockedstudy.png
    • -
    • Modified/Not Modified - allows to see if any modifications have been +
    • Modified/Not Modified - allows to see if any modifications have been introduced into study since its last save.
    • Length units - allows to change the units of the study.
    • -
    • \b Comment - allows to change the comment of the study.
    • +
    • \b Comment - allows to add arbitrary comment for the study.
    • \b Modifications - allows to view the list of changes made in the study. Each record contains the date and time of the modification and the name of the user, who has introduced it.
    • +
    • Stored data - Shows the versions of data currently stored +in the study. Note, that this information does not concern current +versions of SALOME modules, it shows the version in which the data has been +initially created. If the study is re-saved in the version of SALOME, +different from initial one, the version information is +highlighted by red-colored font; this means that version information +is not actually valid.
    \b Preferences - allows \ref setting_preferences_page "setting preferences" diff --git a/src/CAM/CAM_Application.cxx b/src/CAM/CAM_Application.cxx index fc99c754c..0f742ad87 100755 --- a/src/CAM/CAM_Application.cxx +++ b/src/CAM/CAM_Application.cxx @@ -82,6 +82,8 @@ extern "C" CAM_EXPORT SUIT_Application* createApplication() - etc */ +CAM_Application::ModuleInfoList CAM_Application::myInfoList; + /*! \brief Constructor. @@ -361,7 +363,7 @@ CAM_Module* CAM_Application::loadModule( const QString& modName, const bool show char* version = getVersion ? getVersion() : 0; - if(version) { + if ( version ) { for ( ModuleInfoList::iterator it = myInfoList.begin(); it != myInfoList.end(); ++it ) { if ( (*it).title == modName ) { if( (*it).version.isEmpty() ) { @@ -518,7 +520,7 @@ void CAM_Application::moduleAdded( CAM_Module* /*mod*/ ) \param title module title (user name) \return module name or null QString if module is not found */ -QString CAM_Application::moduleName( const QString& title ) const +QString CAM_Application::moduleName( const QString& title ) { QString res; for ( ModuleInfoList::const_iterator it = myInfoList.begin(); it != myInfoList.end() && res.isEmpty(); ++it ) @@ -534,7 +536,7 @@ QString CAM_Application::moduleName( const QString& title ) const \param name module name \return module title (user name) or null QString if module is not found */ -QString CAM_Application::moduleTitle( const QString& name ) const +QString CAM_Application::moduleTitle( const QString& name ) { QString res; for ( ModuleInfoList::const_iterator it = myInfoList.begin(); it != myInfoList.end() && res.isEmpty(); ++it ) @@ -550,7 +552,7 @@ QString CAM_Application::moduleTitle( const QString& name ) const \param name module name \return module icon or null QString if module is not found */ -QString CAM_Application::moduleIcon( const QString& name ) const +QString CAM_Application::moduleIcon( const QString& name ) { QString res; for ( ModuleInfoList::const_iterator it = myInfoList.begin(); it != myInfoList.end() && res.isNull(); ++it ) @@ -568,7 +570,7 @@ QString CAM_Application::moduleIcon( const QString& name ) const \param title module title (user name) \return \c true if module is accessible (can be loaded) or \c false otherwise */ -bool CAM_Application::isModuleAccessible( const QString& title ) const +bool CAM_Application::isModuleAccessible( const QString& title ) { bool found = false; bool blocked = false; @@ -599,7 +601,7 @@ bool CAM_Application::isModuleAccessible( const QString& title ) const \param full if \c true, return full library name, otherwise return its internal name \return module library name or null QString if module is not found */ -QString CAM_Application::moduleLibrary( const QString& title, const bool full ) const +QString CAM_Application::moduleLibrary( const QString& title, const bool full ) { QString res; for ( ModuleInfoList::const_iterator it = myInfoList.begin(); it != myInfoList.end() && res.isEmpty(); ++it ) @@ -777,8 +779,8 @@ void CAM_Application::createEmptyStudy() /*! \brief Return information about version of the each module. */ -CAM_Application::ModuleShortInfoList CAM_Application::getVersionInfo() const { - +CAM_Application::ModuleShortInfoList CAM_Application::getVersionInfo() +{ ModuleShortInfoList info; ModuleShortInfo kernel; diff --git a/src/CAM/CAM_Application.h b/src/CAM/CAM_Application.h index 45b527a65..546781b97 100755 --- a/src/CAM/CAM_Application.h +++ b/src/CAM/CAM_Application.h @@ -66,14 +66,14 @@ public: virtual void contextMenuPopup( const QString&, QMenu*, QString& ); - QString moduleName( const QString& ) const; - QString moduleTitle( const QString& ) const; - QString moduleIcon( const QString& ) const; - bool isModuleAccessible( const QString& ) const; + static QString moduleName( const QString& ); + static QString moduleTitle( const QString& ); + static QString moduleIcon( const QString& ); + static bool isModuleAccessible( const QString& ); virtual void createEmptyStudy(); - ModuleShortInfoList getVersionInfo() const; + static ModuleShortInfoList getVersionInfo(); protected: virtual SUIT_Study* createNewStudy(); @@ -86,7 +86,7 @@ protected: virtual void setActiveStudy( SUIT_Study* ); - QString moduleLibrary( const QString&, const bool = true ) const; + static QString moduleLibrary( const QString&, const bool = true ); private: void readModuleList(); @@ -96,11 +96,11 @@ private: typedef QList ModuleInfoList; private: - CAM_Module* myModule; //!< active module - ModuleList myModules; //!< loaded modules list - ModuleInfoList myInfoList; //!< modules info list - bool myAutoLoad; //!< auto loading flag - bool myBlocked; //!< "blocked" flag, internal usage + CAM_Module* myModule; //!< active module + ModuleList myModules; //!< loaded modules list + static ModuleInfoList myInfoList; //!< modules info list + bool myAutoLoad; //!< auto loading flag + bool myBlocked; //!< "blocked" flag, internal usage }; #ifdef WIN32 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/LightApp/resources/LightApp.xml b/src/LightApp/resources/LightApp.xml index 104d123d6..0ae06e0a1 100644 --- a/src/LightApp/resources/LightApp.xml +++ b/src/LightApp/resources/LightApp.xml @@ -127,7 +127,7 @@
    - +
    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 3e65e51fe..a1fb36487 100755 --- a/src/Plot2d/Plot2d_ViewFrame.cxx +++ b/src/Plot2d/Plot2d_ViewFrame.cxx @@ -298,31 +298,7 @@ void Plot2d_ViewFrame::EraseAll() } myIntermittentSegmentList.clear(); } - - // 2)- Erase all curves points markers - - int nbMark = myMarkerList.size(); - if (nbMark > 0) - { - for (int imar=0; imar < nbMark; imar++) - { - QwtPlotMarker *marker = myMarkerList[imar]; - - marker->detach(); // erase in QwtPlot window - delete marker; - } - myMarkerList.clear(); - } - - // The graphic view's picker - Plot2d_QwtPlotPicker *picker = myPlot->getPicker(); - - // Clear points markers list and associations (marker,tooltip) - if ( picker ) { - picker->pMarkers.clear(); // QList - picker->pMarkersToolTip.clear(); // QMap - } - + // 3)- Erase all QwtPlotCurve associated with the Plot2d_Curve int nbCur1 = myQwtPlotCurveList.size(); @@ -1435,6 +1411,7 @@ void Plot2d_ViewFrame::fitAll() double xmin, xmax, y1min, y1max, y2min, y2max; getFitRangeByCurves(xmin, xmax, y1min, y1max, y2min, y2max); + getFitRangeByMarkers(xmin, xmax, y1min, y1max, y2min, y2max); myPlot->setAxisScale( QwtPlot::xBottom, xmin, xmax ); myPlot->setAxisScale( QwtPlot::yLeft, y1min, y1max ); @@ -1586,6 +1563,47 @@ void Plot2d_ViewFrame::getFitRangeByCurves(double& xMin, double& xMax, } } +/*! + Gets current fit ranges by Markers + All parameters are inout. +*/ +void Plot2d_ViewFrame::getFitRangeByMarkers(double& xMin, double& xMax, + double& yMin, double& yMax, + double& y2Min, double& y2Max) +{ + Plot2d_QwtPlotPicker *picker=myPlot->getPicker(); + if(!picker) + return; + if(picker->pMarkers.empty()) + return; + foreach(QwtPlotMarker *mrker,picker->pMarkers) + { + bool isV2 = mrker->yAxis() == QwtPlot::yRight; + xMin = qMin( xMin, mrker->xValue() ); + xMax = qMax( xMax, mrker->xValue() ); + if ( isV2 ) { + y2Min = qMin( y2Min, mrker->yValue() ); + y2Max = qMax( y2Max, mrker->yValue() ); + } + else { + yMin = qMin( yMin, mrker->yValue() ); + yMax = qMax( yMax, mrker->yValue() ); + } + if ( xMin == xMax ) { + xMin = xMin == 0. ? -1. : xMin - xMin/10.; + xMax = xMax == 0. ? 1. : xMax + xMax/10.; + } + if ( yMin == yMax ) { + yMin = yMin == 0. ? -1. : yMin - yMin/10.; + yMax = yMax == 0. ? 1 : yMax + yMax/10.; + } + if ( y2Min == y2Max ) { + y2Min = y2Min == 0. ? -1. : y2Min - y2Min/10.; + y2Max = y2Max == 0. ? 1 : y2Max + y2Max/10.; + } + } +} + /*! Tests if it is necessary to start operation on mouse action */ @@ -2813,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() ); @@ -4294,28 +4313,28 @@ Plot2d_QwtPlotPicker::~Plot2d_QwtPlotPicker() */ QwtText Plot2d_QwtPlotPicker::trackerText( const QwtDoublePoint & pos ) const { - for (QList::const_iterator pMarkerIt = pMarkers.begin(); - pMarkerIt != pMarkers.end(); - ++pMarkerIt ) - { + for (QList::const_iterator pMarkerIt = pMarkers.begin();pMarkerIt != pMarkers.end(); ++pMarkerIt ) + { QwtPlotMarker* pMarker = *pMarkerIt; if ( pMarker != NULL ) - { - QwtDoubleRect bound0 = pMarker->boundingRect(); - QwtDoublePoint center_bound0 = bound0.center(); - double left = center_bound0.x()-(BOUND_HV_SIZE/2.); - double top = center_bound0.y()-(BOUND_HV_SIZE/2.); - - QwtDoubleRect bound( left, top , BOUND_HV_SIZE, BOUND_HV_SIZE); - - if( bound.contains(pos) ) - { - //QString toolTip = "X=" + QString::number( pMarker->xValue() ) - // + " Y=" + QString::number( pMarker->yValue() ); - return pMarkersToolTip[pMarker]; - } - } + { + const QwtSymbol &symb=pMarker->symbol(); + const QSize& sz=symb.size(); + const QwtScaleMap yMapRef=plot()->canvasMap(QwtPlot::yLeft); + const QwtScaleMap xMap=plot()->canvasMap(pMarker->xAxis()); + const QwtScaleMap yMap=plot()->canvasMap(pMarker->yAxis()); + QwtDoubleRect bound0=pMarker->boundingRect(); + QRect bound00=pMarker->transform(xMap,yMap,bound0); + QPoint toto(xMap.transform(pos.x()),yMapRef.transform(pos.y())); + bound00.setX(bound00.x()-sz.width()); + bound00.setY(bound00.y()-sz.height()); + bound00.setWidth(bound00.width()+sz.width()); + bound00.setHeight(bound00.height()+sz.height()); + if( bound00.contains(toto) ) + { + return pMarkersToolTip[pMarker]; + } + } } - return QwtText(); } diff --git a/src/Plot2d/Plot2d_ViewFrame.h b/src/Plot2d/Plot2d_ViewFrame.h index a517e96a2..0455f1c85 100755 --- a/src/Plot2d/Plot2d_ViewFrame.h +++ b/src/Plot2d/Plot2d_ViewFrame.h @@ -154,6 +154,9 @@ public: void getFitRangeByCurves( double&, double&, double&, double&, double&, double& ); + void getFitRangeByMarkers(double&, double&, double&, double&, + double&, double& ); + void addAnalyticalCurve( Plot2d_AnalyticalCurve* ); void removeAnalyticalCurve( Plot2d_AnalyticalCurve* ); void updateAnalyticalCurve( Plot2d_AnalyticalCurve*, bool = false ); @@ -319,9 +322,6 @@ protected: // List of intermittent segments to connect curves QList myIntermittentSegmentList; - // List of markers associated with curves points - QList myMarkerList; - // List of curves Plot2d_Curve QList myPlot2dCurveList; }; 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/Qtx/QtxPopupMgr.cxx b/src/Qtx/QtxPopupMgr.cxx index 2710a0933..1c9055c9b 100644 --- a/src/Qtx/QtxPopupMgr.cxx +++ b/src/Qtx/QtxPopupMgr.cxx @@ -374,7 +374,7 @@ int QtxPopupMgr::insertAction( QAction* a, const int pId, const QString& rule, c */ bool QtxPopupMgr::hasRule( QAction* a, const RuleType t ) const { - return a ? expression( a, t, false ) : false; + return a ? expression( a, t, false )!=0 : false; } /*! diff --git a/src/SALOME_PYQT/SalomePyQt/Makefile.am b/src/SALOME_PYQT/SalomePyQt/Makefile.am index e08d35457..7fdb22aa4 100644 --- a/src/SALOME_PYQT/SalomePyQt/Makefile.am +++ b/src/SALOME_PYQT/SalomePyQt/Makefile.am @@ -27,8 +27,8 @@ include $(top_srcdir)/adm_local/unix/make_common_starter.am # extra source files (generated by sip) -SIP_SRC = sipAPISalomePyQt.h \ - sipSalomePyQtSalomePyQt.cc \ +SIP_API = sipAPISalomePyQt.h +SIP_SRC = sipSalomePyQtSalomePyQt.cc \ sipSalomePyQtSALOME_Selection.cc \ sipSalomePyQtQtxAction.cc \ sipSalomePyQtQtxActionGroup.cc \ @@ -42,7 +42,7 @@ SIP_FILES = SalomePyQt.sip EXTRA_DIST += $(SIP_FILES) # extra clean files -CLEANFILES = $(SIP_SRC) +CLEANFILES = $(SIP_SRC) $(SIP_API) # moc files (generated my moc) MOC_FILES = SalomePyQt_moc.cxx @@ -80,7 +80,9 @@ libSalomePyQt_la_CPPFLAGS = $(COMMON_CPP_FLAGS) libSalomePyQt_la_LIBADD = $(COMMON_LIBS) # custom build step: generate C++ wrapping according to $(SIP_FILES) -$(SIP_SRC): $(SIP_FILES) +$(SIP_SRC): $(SIP_API) + +$(SIP_API): $(SIP_FILES) $(SIP) $(PYQT_SIPFLAGS) $< # custom install step: create symbolic link 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 a991c7902..623656fef 100644 --- a/src/SVTK/resources/SVTK_msg_en.ts +++ b/src/SVTK/resources/SVTK_msg_en.ts @@ -21,7 +21,7 @@ MNU_FRONT_VIEW - Front + -OX ERROR @@ -33,7 +33,7 @@ DSC_TOP_VIEW - Top View + -OZ View MNU_PAN_VIEW @@ -41,7 +41,7 @@ MNU_TOP_VIEW - Top + -OZ DSC_GLOBALPAN_VIEW @@ -61,7 +61,7 @@ DSC_LEFT_VIEW - Left View + +OY View DSC_FITALL @@ -81,7 +81,7 @@ DSC_FRONT_VIEW - Front View + -OX View MNU_GLOBALPAN_VIEW @@ -93,7 +93,7 @@ MNU_BACK_VIEW - Back + +OX MNU_SHOW_TRIHEDRON @@ -105,7 +105,7 @@ MNU_BOTTOM_VIEW - Bottom + +OZ MNU_RESET_VIEW @@ -113,11 +113,11 @@ MNU_LEFT_VIEW - Left + +OY DSC_RIGHT_VIEW - Right View + -OY View MNU_CHANGINGROTATIONPOINT_VIEW @@ -133,7 +133,7 @@ DSC_BOTTOM_VIEW - Bottom View + +OZ View DSC_DUMP_VIEW @@ -157,7 +157,7 @@ MNU_RIGHT_VIEW - Right + -OY LBL_TOOLBAR_LABEL @@ -165,7 +165,7 @@ DSC_BACK_VIEW - Back View + +OX View SVTK_IMAGE_FILES @@ -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 9ea65e81e..5c188b2f5 100755 --- a/src/SVTK/resources/SVTK_msg_fr.ts +++ b/src/SVTK/resources/SVTK_msg_fr.ts @@ -21,7 +21,7 @@ MNU_FRONT_VIEW - Avant + -OX ERROR @@ -33,7 +33,7 @@ DSC_TOP_VIEW - Vue de dessus + Vue -OZ MNU_PAN_VIEW @@ -41,7 +41,7 @@ MNU_TOP_VIEW - Dessus + -OZ DSC_GLOBALPAN_VIEW @@ -61,7 +61,7 @@ DSC_LEFT_VIEW - Vue de gauche + Vue +OY DSC_FITALL @@ -81,7 +81,7 @@ DSC_FRONT_VIEW - Vue de face + Vue -OX MNU_GLOBALPAN_VIEW @@ -93,7 +93,7 @@ MNU_BACK_VIEW - Arrière + +OX MNU_SHOW_TRIHEDRON @@ -105,7 +105,7 @@ MNU_BOTTOM_VIEW - Dessous + +OZ MNU_RESET_VIEW @@ -113,11 +113,11 @@ MNU_LEFT_VIEW - Gauche + +OY DSC_RIGHT_VIEW - Vue de droite + Vue -OY MNU_CHANGINGROTATIONPOINT_VIEW @@ -133,7 +133,7 @@ DSC_BOTTOM_VIEW - Vue de dessous + Vue +OZ DSC_DUMP_VIEW @@ -157,7 +157,7 @@ MNU_RIGHT_VIEW - Droite + -OY LBL_TOOLBAR_LABEL @@ -165,7 +165,7 @@ DSC_BACK_VIEW - Vue arrière + Vue +OX SVTK_IMAGE_FILES @@ -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 #include @@ -278,6 +279,24 @@ char* SalomeApp_Engine_i::ComponentDataType() return const_cast( myComponentName.c_str() ); } +/*! + \return Component version +*/ +char* SalomeApp_Engine_i::getVersion() +{ + SalomeApp_Application::ModuleShortInfoList versions = SalomeApp_Application::getVersionInfo(); + QString version; + SalomeApp_Application::ModuleShortInfo version_info; + foreach ( version_info, versions ) { + if ( SalomeApp_Application::moduleName( version_info.name ) == myComponentName.c_str() ) { + version = version_info.version; + break; + } + } + + return CORBA::string_dup( version.toLatin1().constData() ); +} + /*! \return */ @@ -393,4 +412,3 @@ SalomeApp_Engine_i* SalomeApp_Engine_i::GetInstance( const char* theComponentNam theComponentName << ", aServant = " << aServant); return aServant; } - diff --git a/src/Session/SalomeApp_Engine_i.hxx b/src/SalomeApp/SalomeApp_Engine_i.h old mode 100755 new mode 100644 similarity index 97% rename from src/Session/SalomeApp_Engine_i.hxx rename to src/SalomeApp/SalomeApp_Engine_i.h index 0e728da62..51b8f6967 --- a/src/Session/SalomeApp_Engine_i.hxx +++ b/src/SalomeApp/SalomeApp_Engine_i.h @@ -27,7 +27,7 @@ #ifndef _SALOMEAPP_ENGINE_I_HXX_ #define _SALOMEAPP_ENGINE_I_HXX_ -#include "SALOME_Session.hxx" +#include "SalomeApp.h" #include "SALOME_Component_i.hxx" @@ -39,8 +39,8 @@ class SALOME_NamingService; -class SESSION_EXPORT SalomeApp_Engine_i: public POA_SalomeApp::Engine, - public Engines_Component_i +class SALOMEAPP_EXPORT SalomeApp_Engine_i: public POA_SalomeApp::Engine, + public Engines_Component_i { public: SalomeApp_Engine_i( const char* theComponentName ); @@ -88,6 +88,8 @@ public: CORBA::Boolean CanPaste( const char*, CORBA::Long ) {return 0;} SALOMEDS::SObject_ptr PasteInto( const SALOMEDS::TMPFile&, CORBA::Long, SALOMEDS::SObject_ptr ) {return 0;} + char* getVersion(); + private: static CORBA::ORB_var orb(); static PortableServer::POA_var poa(); diff --git a/src/SalomeApp/SalomeApp_Study.cxx b/src/SalomeApp/SalomeApp_Study.cxx index 1a38c88e1..a6dd9377f 100644 --- a/src/SalomeApp/SalomeApp_Study.cxx +++ b/src/SalomeApp/SalomeApp_Study.cxx @@ -26,7 +26,7 @@ #include "SalomeApp_DataObject.h" #include "SalomeApp_DataModel.h" #include "SalomeApp_Application.h" -#include "SalomeApp_Engine_i.hxx" +#include "SalomeApp_Engine_i.h" #include "SalomeApp_VisualState.h" // temporary commented diff --git a/src/SalomeApp/SalomeApp_StudyPropertiesDlg.cxx b/src/SalomeApp/SalomeApp_StudyPropertiesDlg.cxx index 2fd7dcb8a..54abf6d2f 100644 --- a/src/SalomeApp/SalomeApp_StudyPropertiesDlg.cxx +++ b/src/SalomeApp/SalomeApp_StudyPropertiesDlg.cxx @@ -109,9 +109,20 @@ SalomeApp_StudyPropertiesDlg::SalomeApp_StudyPropertiesDlg(QWidget* parent) QStringList columnNames; columnNames.append(tr("PRP_AUTHOR")); columnNames.append(tr("PRP_DATE_MODIF")); + myModifications->setHeaderLabels( columnNames ); - QTreeWidgetItem * headerItem = new QTreeWidgetItem(columnNames); - myModifications->setHeaderItem ( headerItem ); + //Component versions + QLabel* versionsLabel = new QLabel(tr("PRP_VERSIONS"),this); + myVersions = new QTreeWidget(this); + myVersions->setRootIsDecorated(false); + myVersions->setUniformRowHeights(true); + myVersions->setAllColumnsShowFocus(true); + myVersions->setColumnCount(2); + myVersions->setMaximumHeight(80); + columnNames.clear(); + columnNames.append(tr("PRP_COMPONENT")); + columnNames.append(tr("PRP_VERSION")); + myVersions->setHeaderLabels( columnNames ); QFrame* buttonFrame = new QFrame(this); @@ -140,7 +151,9 @@ SalomeApp_StudyPropertiesDlg::SalomeApp_StudyPropertiesDlg(QWidget* parent) gridLayout->addWidget(myComment, 4, 1, 1, 2); gridLayout->addWidget(modificationsLabel, 5, 0, 1, 1); gridLayout->addWidget(myModifications, 5, 1, 1, 2); - gridLayout->addWidget(buttonFrame, 6, 0, 1, 3); + gridLayout->addWidget(versionsLabel, 6, 0, 1, 1); + gridLayout->addWidget(myVersions, 6, 1, 1, 2); + gridLayout->addWidget(buttonFrame, 7, 0, 1, 3); connect(myOkButton, SIGNAL(clicked()), this, SLOT(clickOnOk())); connect(myCancelButton, SIGNAL(clicked()), this, SLOT(reject())); @@ -183,15 +196,11 @@ void SalomeApp_StudyPropertiesDlg::initData() bool isModified = false; SalomeApp_Study* study = dynamic_cast (SUIT_Session::session()->activeApplication()->activeStudy()); - if (study) { - isModified = study->isModified(); - if (hasData) { - if (propAttr->IsModified() != isModified) { - propAttr->SetModified((int)isModified); - } - } + isModified = study->isModified(); + if (propAttr->IsModified() != isModified) { + propAttr->SetModified((int)isModified); } - + QString modif = propAttr->IsModified() ? tr( "PRP_MODIFIED" ) : tr( "PRP_NOT_MODIFIED" ); myModification->setText(modif); @@ -236,6 +245,20 @@ void SalomeApp_StudyPropertiesDlg::initData() QTreeWidgetItem* item = new QTreeWidgetItem(aList); myModifications->addTopLevelItem(item); } + + //Component versions + std::vector aComponents = propAttr->GetStoredComponents(); + for ( int i = 0; i < aComponents.size(); i++ ) { + std::vector aMins, aHours, aDays, aMonths, aYears; + std::vector aVersions = propAttr->GetComponentVersions(aComponents[i]); + QStringList aData; + aData.append( aComponents[i].c_str() ); + aData.append( aVersions.empty() || aVersions[0] == "" ? "unknown" : aVersions[0].c_str() ); + QTreeWidgetItem* item = new QTreeWidgetItem( aData ); + if ( aVersions.size() > 1 ) + item->setForeground( 1, Qt::red ); + myVersions->addTopLevelItem(item); + } } adjustSize(); } diff --git a/src/SalomeApp/SalomeApp_StudyPropertiesDlg.h b/src/SalomeApp/SalomeApp_StudyPropertiesDlg.h index 8ff0500d9..ad8c18246 100644 --- a/src/SalomeApp/SalomeApp_StudyPropertiesDlg.h +++ b/src/SalomeApp/SalomeApp_StudyPropertiesDlg.h @@ -69,6 +69,7 @@ private: QComboBox* myUnits; QTextEdit* myComment; QTreeWidget* myModifications; + QTreeWidget* myVersions; QPushButton* myOkButton; QPushButton* myCancelButton; }; diff --git a/src/SalomeApp/pluginsdemo/salome_plugins.py b/src/SalomeApp/pluginsdemo/salome_plugins.py index edb361b5f..e8de87156 100755 --- a/src/SalomeApp/pluginsdemo/salome_plugins.py +++ b/src/SalomeApp/pluginsdemo/salome_plugins.py @@ -183,7 +183,7 @@ if DEMO_IS_ACTIVATED: global tubebuilder, xalome global dialogWithApply, activeStudy global previewShapeEntry, deletePreviewShape - global DEFAULT_FOLDER_NAME,DEFAULT_SHAPE_NAME + global DEFAULT_FOLDER_NAME,DEFAULT_SHAPE_NAME dialogWithApply.accept() @@ -194,7 +194,7 @@ if DEMO_IS_ACTIVATED: shape = tubebuilder.createGeometry(activeStudy, radius, length, width) entry = xalome.addToStudy(activeStudy, shape, DEFAULT_SHAPE_NAME, DEFAULT_FOLDER_NAME) xalome.displayShape(entry) - + def rejectCallback(): """Action to be done when click on Cancel""" global dialogWithApply, previewShapeEntry, deletePreviewShape @@ -262,13 +262,15 @@ def runSalomeShellSession(context): version = salome_version.getVersion(full=True) kernel_appli_dir = os.environ['KERNEL_ROOT_DIR'] command = "" - if os.path.exists("/usr/bin/xterm"): - command = 'xterm -T "SALOME %s - Shell session" -e %s/runSession &'%(version,kernel_appli_dir) - elif os.path.exists("/usr/bin/gnome-terminal"): + if os.path.exists("/usr/bin/gnome-terminal"): command = 'gnome-terminal -t "SALOME %s - Shell session" -e %s/runSession &'%(version,kernel_appli_dir) + elif os.path.exists("/usr/bin/konsole"): + command = 'PATH="/usr/bin:/sbin:/bin" LD_LIBRARY_PATH="" konsole -e %s/runSession &'%(kernel_appli_dir) + elif os.path.exists("/usr/bin/xterm"): + command = 'xterm -T "SALOME %s - Shell session" -e %s/runSession &'%(version,kernel_appli_dir) else: - print "Neither xterm nor gnome-terminal is installed." - + print "Neither xterm nor gnome-terminal nor konsole is installed." + if command is not "": try: subprocess.check_call(command, shell = True) diff --git a/src/SalomeApp/resources/SalomeApp.xml b/src/SalomeApp/resources/SalomeApp.xml index 5124442ca..8323e60c6 100644 --- a/src/SalomeApp/resources/SalomeApp.xml +++ b/src/SalomeApp/resources/SalomeApp.xml @@ -32,7 +32,7 @@ - + diff --git a/src/SalomeApp/resources/SalomeApp_msg_en.ts b/src/SalomeApp/resources/SalomeApp_msg_en.ts index c248a811d..dedd0f7c6 100644 --- a/src/SalomeApp/resources/SalomeApp_msg_en.ts +++ b/src/SalomeApp/resources/SalomeApp_msg_en.ts @@ -363,6 +363,18 @@ Do you want to reload it ? PRP_MODIFICATIONS Modifications + + PRP_COMPONENT + Component + + + PRP_VERSION + Version + + + PRP_VERSIONS + Stored data + PRP_DATE_MODIF Date diff --git a/src/SalomeApp/resources/SalomeApp_msg_fr.ts b/src/SalomeApp/resources/SalomeApp_msg_fr.ts index dc4f87c52..9adf4ae95 100755 --- a/src/SalomeApp/resources/SalomeApp_msg_fr.ts +++ b/src/SalomeApp/resources/SalomeApp_msg_fr.ts @@ -363,6 +363,18 @@ Voulez-vous le recharger ? PRP_MODIFICATIONS Modifications + + PRP_COMPONENT + Component + + + PRP_VERSION + Version + + + PRP_VERSIONS + Stored data + PRP_DATE_MODIF Date diff --git a/src/Session/CMakeLists.txt b/src/Session/CMakeLists.txt index 2968dfecd..2a8cf2c8d 100755 --- a/src/Session/CMakeLists.txt +++ b/src/Session/CMakeLists.txt @@ -69,7 +69,6 @@ SET(SalomeSession_SOURCES Session_ServerThread.cxx Session_ServerLauncher.cxx Session_ServerCheck.cxx - SalomeApp_Engine_i.cxx ) ADD_LIBRARY(SalomeSession SHARED ${SalomeSession_SOURCES}) SET_TARGET_PROPERTIES(SalomeSession PROPERTIES COMPILE_FLAGS "${COMMON_FLAGS}") @@ -106,6 +105,5 @@ SET(COMMON_HEADERS_H Session_ServerLauncher.hxx Session_ServerThread.hxx Session_ServerCheck.hxx - SalomeApp_Engine_i.hxx ) INSTALL(FILES ${COMMON_HEADERS_H} DESTINATION ${GUI_salomeinclude_HEADERS}) diff --git a/src/Session/Makefile.am b/src/Session/Makefile.am index eaf315c84..26a25db0c 100755 --- a/src/Session/Makefile.am +++ b/src/Session/Makefile.am @@ -35,8 +35,7 @@ salomeinclude_HEADERS = \ SALOME_Session.hxx \ Session_ServerLauncher.hxx \ Session_ServerThread.hxx \ - Session_ServerCheck.hxx \ - SalomeApp_Engine_i.hxx + Session_ServerCheck.hxx # Libraries targets @@ -44,8 +43,7 @@ dist_libSalomeSession_la_SOURCES = \ Session_Session_i.cxx \ Session_ServerThread.cxx \ Session_ServerLauncher.cxx \ - Session_ServerCheck.cxx \ - SalomeApp_Engine_i.cxx + Session_ServerCheck.cxx libSalomeSession_la_CPPFLAGS = $(QT_MT_INCLUDES) $(PYTHON_INCLUDES) \ $(HDF5_INCLUDES) $(BOOST_CPPFLAGS) @KERNEL_CXXFLAGS@ $(CAS_CPPFLAGS) \ 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