From 8d973f87a441c75acab8b1cf0d3f54434735008e Mon Sep 17 00:00:00 2001 From: vsr Date: Fri, 9 Aug 2013 08:55:09 +0000 Subject: [PATCH] 0021883 [CEA 674] Deactivate pre-selection in OCC and VTK viewer 0022174 [CEA 793] De-activate entirely selection in order to have a fast view usage --- doc/salome/gui/images/vtkviewer_toolbar.png | Bin 15471 -> 18150 bytes doc/salome/gui/input/vtk_3d_viewer.doc | 18 ++- src/LightApp/LightApp_Application.cxx | 49 ++++++- src/LightApp/resources/LightApp.xml | 3 +- src/Qtx/QtxActionGroup.cxx | 9 ++ src/Qtx/QtxActionGroup.h | 2 + src/SVTK/SALOME_Actor.cxx | 6 +- src/SVTK/SVTK_InteractorStyle.cxx | 3 + src/SVTK/SVTK_Selection.h | 6 + src/SVTK/SVTK_Selector.cxx | 30 +++++ src/SVTK/SVTK_Selector.h | 16 +++ src/SVTK/SVTK_SelectorDef.h | 18 +++ src/SVTK/SVTK_ViewModel.cxx | 32 +++-- src/SVTK/SVTK_ViewModel.h | 13 +- src/SVTK/SVTK_ViewWindow.cxx | 124 ++++++++++++++---- src/SVTK/SVTK_ViewWindow.h | 15 ++- src/SVTK/resources/SVTK_images.ts | 16 ++- src/SVTK/resources/SVTK_msg_en.ts | 34 ++++- src/SVTK/resources/SVTK_msg_fr.ts | 32 ++++- src/SVTK/resources/vtk_view_highlight_dyn.png | Bin 0 -> 835 bytes src/SVTK/resources/vtk_view_highlight_off.png | Bin 0 -> 616 bytes src/SVTK/resources/vtk_view_highlight_std.png | Bin 0 -> 621 bytes src/SVTK/resources/vtk_view_selection.png | Bin 0 -> 620 bytes 23 files changed, 357 insertions(+), 69 deletions(-) create mode 100755 src/SVTK/resources/vtk_view_highlight_dyn.png create mode 100755 src/SVTK/resources/vtk_view_highlight_off.png create mode 100755 src/SVTK/resources/vtk_view_highlight_std.png create mode 100644 src/SVTK/resources/vtk_view_selection.png diff --git a/doc/salome/gui/images/vtkviewer_toolbar.png b/doc/salome/gui/images/vtkviewer_toolbar.png index 460794973adcd0fc51257e24efdd993d305da502..e97246d60d4cf7b3e076661fb78483fb337b94b9 100644 GIT binary patch literal 18150 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%0Dhj1S^PqaXo7J~* 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 G1OE@6BP+T9 diff --git a/doc/salome/gui/input/vtk_3d_viewer.doc b/doc/salome/gui/input/vtk_3d_viewer.doc index 1774bf1f5..e3838531e 100644 --- a/doc/salome/gui/input/vtk_3d_viewer.doc +++ b/doc/salome/gui/input/vtk_3d_viewer.doc @@ -35,12 +35,20 @@ only for parallel (non-perspective) view's mode. \image html vtk_view_highlight.png -Dynamic pre-selection switch - allows to switch on/off dynamic -pre-selection of objects. When the dynamic pre-selection is switched -on, an objects can be selected by clicking the point/cell belonging to +These buttons allow to switch between three pre-selection modes. +Possible choices: +- Standard preselection mode - pre-selection is enabled in a standard mode; +- Dynamic preselection mode - when the dynamic pre-selection is chosen, +an objects can be selected by clicking the point/cell belonging to this object, with some performance loss. Switch dynamic pre-selection -off to have a good performance on big objects (for example, huge -meshes). +off to have a good performance on big objects (for example, huge meshes); +- Disable preselection - pre-selection is disabled. + +
+ +\image html vtk_view_selection.png + +Enable/Disable selection - enables or disables selection in the view.
\image html vtk_view_triedre.png diff --git a/src/LightApp/LightApp_Application.cxx b/src/LightApp/LightApp_Application.cxx index 7059f2474..eebf92b7b 100644 --- a/src/LightApp/LightApp_Application.cxx +++ b/src/LightApp/LightApp_Application.cxx @@ -1491,7 +1491,8 @@ SUIT_ViewManager* LightApp_Application::createViewManager( const QString& vmType vm->setStaticTrihedronVisible( resMgr->booleanValue( "3DViewer", "show_static_trihedron", vm->isStaticTrihedronVisible() ) ); vm->setInteractionStyle( resMgr->integerValue( "3DViewer", "navigation_mode", vm->interactionStyle() ) ); vm->setZoomingStyle( resMgr->integerValue( "3DViewer", "zooming_mode", vm->zoomingStyle() ) ); - vm->setDynamicPreSelection( resMgr->booleanValue( "VTKViewer", "dynamic_preselection", vm->dynamicPreSelection() ) ); + vm->setPreSelectionMode(resMgr->integerValue( "VTKViewer", "preselection", vm->preSelectionMode() ) ); + vm->enableSelection( resMgr->booleanValue( "VTKViewer", "enable_selection", vm->isSelectionEnabled() ) ); vm->setIncrementalSpeed( resMgr->integerValue( "VTKViewer", "speed_value", vm->incrementalSpeed() ), resMgr->integerValue( "VTKViewer", "speed_mode", vm->incrementalSpeedMode() ) ); vm->setSpacemouseButtons( resMgr->integerValue( "VTKViewer", "spacemouse_func1_btn", vm->spacemouseBtn(1) ), @@ -2273,8 +2274,23 @@ void LightApp_Application::createPreferences( LightApp_Preferences* pref ) anIndicesList << 0 << 1; pref->setItemProperty( "strings", aValuesList, vtkSpeedMode ); pref->setItemProperty( "indexes", anIndicesList, vtkSpeedMode ); - // .... -> dynamic pre-selection - pref->addPreference( tr( "PREF_DYNAMIC_PRESELECTION" ), vtkGen, LightApp_Preferences::Bool, "VTKViewer", "dynamic_preselection" ); + + // ... "Selection" group <> + int vtkSelectionGroup = pref->addPreference( tr( "PREF_GROUP_SELECTION" ), vtkGroup ); + pref->setItemProperty( "columns", 2, vtkSelectionGroup ); + // .... -> preselection + int vtkPreselection = pref->addPreference( tr( "PREF_PRESELECTION" ), vtkSelectionGroup, + LightApp_Preferences::Selector, "VTKViewer", "preselection" ); + aValuesList.clear(); + anIndicesList.clear(); + aValuesList << tr("PREF_PRESELECTION_STANDARD") << tr("PREF_PRESELECTION_DYNAMIC") << tr("PREF_PRESELECTION_DISABLED"); + anIndicesList << 0 << 1 << 2; + pref->setItemProperty( "strings", aValuesList, vtkPreselection ); + pref->setItemProperty( "indexes", anIndicesList, vtkPreselection ); + // .... -> enable selection + pref->addPreference( tr( "PREF_ENABLE_SELECTION" ), vtkSelectionGroup, LightApp_Preferences::Bool, "VTKViewer", "enable_selection" ); + // ... "Selection" group <> + // ... -> empty frame (for layout) <> // ... space mouse sub-group <> @@ -2729,9 +2745,30 @@ void LightApp_Application::preferencesChanged( const QString& sec, const QString #endif #ifndef DISABLE_VTKVIEWER - if ( sec == QString( "VTKViewer" ) && param == QString( "dynamic_preselection" ) ) + if ( sec == QString( "VTKViewer" ) && param == QString( "preselection" ) ) + { + int mode = resMgr->integerValue( "VTKViewer", "preselection", 0 ); + QList lst; +#ifndef DISABLE_SALOMEOBJECT + viewManagers( SVTK_Viewer::Type(), lst ); + QListIterator it( lst ); + while ( it.hasNext() ) + { + SUIT_ViewModel* vm = it.next()->getViewModel(); + if ( !vm || !vm->inherits( "SVTK_Viewer" ) ) + continue; + + SVTK_Viewer* vtkVM = dynamic_cast( vm ); + if( vtkVM ) vtkVM->setPreSelectionMode( mode ); + } +#endif + } +#endif + +#ifndef DISABLE_VTKVIEWER + if ( sec == QString( "VTKViewer" ) && param == QString( "enable_selection" ) ) { - bool mode = resMgr->booleanValue( "VTKViewer", "dynamic_preselection", true ); + bool isToEnableSelection = resMgr->booleanValue( "VTKViewer", "enable_selection", true ); QList lst; #ifndef DISABLE_SALOMEOBJECT viewManagers( SVTK_Viewer::Type(), lst ); @@ -2743,7 +2780,7 @@ void LightApp_Application::preferencesChanged( const QString& sec, const QString continue; SVTK_Viewer* vtkVM = dynamic_cast( vm ); - if( vtkVM ) vtkVM->setDynamicPreSelection( mode ); + if( vtkVM ) vtkVM->enableSelection( isToEnableSelection ); } #endif } diff --git a/src/LightApp/resources/LightApp.xml b/src/LightApp/resources/LightApp.xml index a1a6eb82e..078a2185d 100644 --- a/src/LightApp/resources/LightApp.xml +++ b/src/LightApp/resources/LightApp.xml @@ -151,7 +151,8 @@ - + + diff --git a/src/Qtx/QtxActionGroup.cxx b/src/Qtx/QtxActionGroup.cxx index 420f329bc..52e3bf688 100644 --- a/src/Qtx/QtxActionGroup.cxx +++ b/src/Qtx/QtxActionGroup.cxx @@ -208,6 +208,15 @@ void QtxActionGroup::onTriggered( QAction* a ) emit selected( a ); } +/*! + \brief Enable/disable action group +*/ +void QtxActionGroup::setEnabled( bool on ) +{ + QtxActionSet::setEnabled( on ); + myActionGroup->setEnabled( on ); +} + /*! \brief Update action group for the specified widget. \param w a widget this action group is added to diff --git a/src/Qtx/QtxActionGroup.h b/src/Qtx/QtxActionGroup.h index f1c333bf6..e62a4f950 100644 --- a/src/Qtx/QtxActionGroup.h +++ b/src/Qtx/QtxActionGroup.h @@ -46,6 +46,8 @@ public: void add( QAction* ); + void setEnabled( bool ); + public slots: void setExclusive( const bool ); void setUsesDropDown( const bool ); diff --git a/src/SVTK/SALOME_Actor.cxx b/src/SVTK/SALOME_Actor.cxx index 5f74dd561..6a2291996 100644 --- a/src/SVTK/SALOME_Actor.cxx +++ b/src/SVTK/SALOME_Actor.cxx @@ -431,7 +431,7 @@ SALOME_Actor { mySelector = theSelector; } - + /*! To map current selection to VTK representation */ @@ -500,7 +500,7 @@ SALOME_Actor SVTK_SelectionEvent* theSelectionEvent, bool theIsHighlight) { - if ( !GetPickable() ) + if ( !GetPickable() || !mySelector->IsPreSelectionEnabled() ) return false; vtkRenderer *aRenderer = theInteractorStyle->GetCurrentRenderer(); @@ -655,7 +655,7 @@ SALOME_Actor SVTK_SelectionEvent* theSelectionEvent, bool theIsHighlight) { - if ( !GetPickable() || !mySelector ) + if ( !GetPickable() || !mySelector || !mySelector->IsSelectionEnabled() ) return false; myOutlineActor->SetVisibility( false ); diff --git a/src/SVTK/SVTK_InteractorStyle.cxx b/src/SVTK/SVTK_InteractorStyle.cxx index ea8c11bd3..831110451 100644 --- a/src/SVTK/SVTK_InteractorStyle.cxx +++ b/src/SVTK/SVTK_InteractorStyle.cxx @@ -1298,6 +1298,9 @@ void SVTK_InteractorStyle::onOperation(QPoint mousePos) */ void SVTK_InteractorStyle::onCursorMove(QPoint mousePos) { + if ( !GetSelector()->IsPreSelectionEnabled() ) + return; + // processing highlighting SVTK_SelectionEvent* aSelectionEvent = GetSelectionEventFlipY(); this->FindPokedRenderer(aSelectionEvent->myX,aSelectionEvent->myY); diff --git a/src/SVTK/SVTK_Selection.h b/src/SVTK/SVTK_Selection.h index b4586d076..4dd1f8aef 100644 --- a/src/SVTK/SVTK_Selection.h +++ b/src/SVTK/SVTK_Selection.h @@ -41,5 +41,11 @@ const Selection_Mode ActorSelection = 6; const Selection_Mode Elem0DSelection = 7; const Selection_Mode BallSelection = 8; +//! Preselection modes +typedef int Preselection_Mode; + +const Preselection_Mode Standard_Preselection = 0; +const Preselection_Mode Dynamic_Preselection = 1; +const Preselection_Mode Preselection_Disabled = 2; #endif diff --git a/src/SVTK/SVTK_Selector.cxx b/src/SVTK/SVTK_Selector.cxx index 5c9fb1059..8af1ef2b1 100644 --- a/src/SVTK/SVTK_Selector.cxx +++ b/src/SVTK/SVTK_Selector.cxx @@ -61,6 +61,8 @@ SVTK_SelectorDef { mySelectionMode = ActorSelection; myDynamicPreselection = true; + myPreselectionEnabled = true; + mySelectionEnabled = true; myPicker->Delete(); myCellPicker->Delete(); @@ -573,3 +575,31 @@ SVTK_SelectorDef { return myDynamicPreselection; } + +void +SVTK_SelectorDef +::SetPreSelectionEnabled( bool theEnabled ) +{ + myPreselectionEnabled = theEnabled; +} + +bool +SVTK_SelectorDef +::IsPreSelectionEnabled() const +{ + return mySelectionEnabled && myPreselectionEnabled; +} + +void +SVTK_SelectorDef +::SetSelectionEnabled( bool theEnabled ) +{ + mySelectionEnabled = theEnabled; +} + +bool +SVTK_SelectorDef +::IsSelectionEnabled() const +{ + return mySelectionEnabled; +} diff --git a/src/SVTK/SVTK_Selector.h b/src/SVTK/SVTK_Selector.h index a745648a0..801ea715b 100644 --- a/src/SVTK/SVTK_Selector.h +++ b/src/SVTK/SVTK_Selector.h @@ -224,6 +224,22 @@ public: virtual bool GetDynamicPreSelection() const = 0; + + virtual + void + SetPreSelectionEnabled( bool theEnabled ) = 0; + + virtual + bool + IsPreSelectionEnabled() const = 0; + + virtual + void + SetSelectionEnabled( bool theEnabled ) = 0; + + virtual + bool + IsSelectionEnabled() const = 0; }; diff --git a/src/SVTK/SVTK_SelectorDef.h b/src/SVTK/SVTK_SelectorDef.h index 4fbc54d8c..3e4e6c42c 100644 --- a/src/SVTK/SVTK_SelectorDef.h +++ b/src/SVTK/SVTK_SelectorDef.h @@ -184,10 +184,28 @@ public: bool GetDynamicPreSelection() const; + virtual + void + SetPreSelectionEnabled( bool theEnabled ); + + virtual + bool + IsPreSelectionEnabled() const; + + virtual + void + SetSelectionEnabled( bool theEnabled ); + + virtual + bool + IsSelectionEnabled() const; + private: int mySelectionMode; bool myDynamicPreselection; + bool myPreselectionEnabled; + bool mySelectionEnabled; struct TIOLessThan { diff --git a/src/SVTK/SVTK_ViewModel.cxx b/src/SVTK/SVTK_ViewModel.cxx index d89674a8a..4a13dd7ee 100644 --- a/src/SVTK/SVTK_ViewModel.cxx +++ b/src/SVTK/SVTK_ViewModel.cxx @@ -29,7 +29,6 @@ #include //#include "SUIT_Session.h" -#include "SVTK_Selection.h" #include "SVTK_ViewModel.h" #include "SVTK_ViewWindow.h" #include "SVTK_View.h" @@ -87,7 +86,8 @@ SVTK_Viewer::SVTK_Viewer() myProjMode = 0; myStyle = 0; myZoomingStyle = 0; - myDynamicPreSelection = false; + mySelectionEnabled = true; + myPreSelectionMode = Standard_Preselection; mySpaceBtn[0] = 1; mySpaceBtn[1] = 2; mySpaceBtn[2] = 9; @@ -179,7 +179,8 @@ SUIT_ViewWindow* SVTK_Viewer::createView( SUIT_Desktop* theDesktop ) aViewWindow->SetProjectionMode( projectionMode() ); aViewWindow->SetInteractionStyle( interactionStyle() ); aViewWindow->SetZoomingStyle( zoomingStyle() ); - aViewWindow->SetDynamicPreSelection( dynamicPreSelection() ); + aViewWindow->SetPreSelectionMode( preSelectionMode() ); + aViewWindow->SetSelectionEnabled( isSelectionEnabled() ); aViewWindow->SetIncrementalSpeed( incrementalSpeed(), incrementalSpeedMode() ); aViewWindow->SetSpacemouseButtons( spacemouseBtn(1), spacemouseBtn(2), spacemouseBtn(3) ); @@ -335,27 +336,27 @@ void SVTK_Viewer::setZoomingStyle( const int theStyle ) } /*! - \return dynamic preselection + \return current preselection mode */ -bool SVTK_Viewer::dynamicPreSelection() const +Preselection_Mode SVTK_Viewer::preSelectionMode() const { - return myDynamicPreSelection; + return myPreSelectionMode; } /*! - Sets dynamic preselection - \param theMode - new dynamic preselection mode + Sets preselection mode + \param theMode - new preselection mode */ -void SVTK_Viewer::setDynamicPreSelection( const bool theMode ) +void SVTK_Viewer::setPreSelectionMode( Preselection_Mode theMode ) { - myDynamicPreSelection = theMode; + myPreSelectionMode = theMode; if (SUIT_ViewManager* aViewManager = getViewManager()) { QVector aViews = aViewManager->getViews(); for ( uint i = 0; i < aViews.count(); i++ ) { if ( TViewWindow* aView = dynamic_cast(aViews.at( i )) ) - aView->SetDynamicPreSelection( theMode ); + aView->SetPreSelectionMode( theMode ); } } } @@ -494,6 +495,15 @@ void SVTK_Viewer::enableSelection(bool isEnabled) { mySelectionEnabled = isEnabled; //!! To be done for view windows + + if (SUIT_ViewManager* aViewManager = getViewManager()) { + QVector aViews = aViewManager->getViews(); + for ( uint i = 0; i < aViews.count(); i++ ) + { + if ( TViewWindow* aView = dynamic_cast(aViews.at( i )) ) + aView->SetSelectionEnabled( isEnabled ); + } + } } /*! diff --git a/src/SVTK/SVTK_ViewModel.h b/src/SVTK/SVTK_ViewModel.h index c4a73cf8e..155fd1f61 100644 --- a/src/SVTK/SVTK_ViewModel.h +++ b/src/SVTK/SVTK_ViewModel.h @@ -25,6 +25,7 @@ #include "SVTK.h" #include "SVTK_ViewModelBase.h" +#include "SVTK_Selection.h" #include "Qtx.h" @@ -125,12 +126,12 @@ public: //! Sets zooming style void setZoomingStyle( const int ); - //! Gets dynamic preselection - bool dynamicPreSelection() const; - - //! Sets dynamic preselection - void setDynamicPreSelection( const bool ); + //! Gets current preselection mode (standard, dynamic or disabled) + Preselection_Mode preSelectionMode() const; + //! Sets new preselection mode + void setPreSelectionMode( Preselection_Mode ); + //! Get incremental speed (see #SVTK_InteractorStyle::ControllerIncrement) int incrementalSpeed() const; @@ -207,7 +208,7 @@ private: int myProjMode; int myStyle; int myZoomingStyle; - bool myDynamicPreSelection; + Preselection_Mode myPreSelectionMode; int mySpaceBtn[3]; }; diff --git a/src/SVTK/SVTK_ViewWindow.cxx b/src/SVTK/SVTK_ViewWindow.cxx index 4f7091ac4..fba7c6f76 100755 --- a/src/SVTK/SVTK_ViewWindow.cxx +++ b/src/SVTK/SVTK_ViewWindow.cxx @@ -35,6 +35,7 @@ #include #include #include +#include #include #include #include @@ -71,6 +72,7 @@ #include "SUIT_ViewManager.h" #include "QtxActionToolMgr.h" #include "QtxMultiAction.h" +#include "QtxActionGroup.h" #include "VTKViewer_Utilities.h" #include "VTKViewer_Trihedron.h" @@ -148,10 +150,15 @@ void SVTK_ViewWindow::Initialize(SVTK_ViewModelBase* theModel) { myInteractor = new SVTK_RenderWindowInteractor(this,"SVTK_RenderWindowInteractor"); - SVTK_Selector* aSelector = SVTK_Selector::New(); - aSelector->SetDynamicPreSelection( SUIT_Session::session()->resourceMgr()-> - booleanValue( "VTKViewer", "dynamic_preselection", true ) ); - + SVTK_Selector* aSelector = SVTK_Selector::New(); + int aPreselectionMode = SUIT_Session::session()->resourceMgr()-> + integerValue( "VTKViewer", "preselection", Standard_Preselection ); + aSelector->SetDynamicPreSelection( aPreselectionMode == Dynamic_Preselection ); + aSelector->SetPreSelectionEnabled( aPreselectionMode != Preselection_Disabled ); + bool isSelectionEnabled = SUIT_Session::session()->resourceMgr()-> + booleanValue( "VTKViewer", "enable_selection", true ); + aSelector->SetSelectionEnabled( isSelectionEnabled ); + SVTK_GenericRenderWindowInteractor* aDevice = SVTK_GenericRenderWindowInteractor::New(); aDevice->SetRenderWidget(myInteractor); aDevice->SetSelector(aSelector); @@ -891,12 +898,21 @@ void SVTK_ViewWindow::SetZoomingStyle(const int theStyle) } /*! - Switch dynamic preselection on / off - \param theDynPreselection - dynamic pre-selection mode + Set preselection mode. + \param theMode the mode to set (standard, dynamic or disabled) +*/ +void SVTK_ViewWindow::SetPreSelectionMode( Preselection_Mode theMode ) +{ + onSwitchPreSelectionMode( theMode ); +} + +/*! + Enables/disables selection. + \param theEnable if true - selection will be enabled */ -void SVTK_ViewWindow::SetDynamicPreSelection( bool theDynPreselection ) +void SVTK_ViewWindow::SetSelectionEnabled( bool theEnable ) { - onSwitchDynamicPreSelection( theDynPreselection ); + onEnableSelection( theEnable ); } /*! @@ -946,16 +962,36 @@ void SVTK_ViewWindow::onSwitchZoomingStyle( bool theOn ) } /*! - Toogles dynamic preselection on/off + Switch preselection mode. + \param theMode the preselection mode */ -void SVTK_ViewWindow::onSwitchDynamicPreSelection( bool theOn ) +void SVTK_ViewWindow::onSwitchPreSelectionMode( int theMode ) { - GetSelector()->SetDynamicPreSelection( theOn ); + GetSelector()->SetDynamicPreSelection( theMode == Dynamic_Preselection ); + GetSelector()->SetPreSelectionEnabled( theMode != Preselection_Disabled ); // update action state if method is called outside - QtxAction* a = getAction( SwitchDynamicPreselectionId ); - if ( a->isChecked() != theOn ) - a->setChecked( theOn ); + QtxAction* a = getAction( StandardPreselectionId + theMode ); + if ( a && !a->isChecked() ) + a->setChecked( true ); +} + +/*! + Enables/disables selection. + \param theOn if true - selection will be enabled +*/ +void SVTK_ViewWindow::onEnableSelection( bool on ) +{ + GetSelector()->SetSelectionEnabled( on ); + + // update action state if method is called outside + QtxAction* a = getAction( EnableSelectionId ); + if ( a->isChecked() != on ) + a->setChecked( on ); + QtxActionGroup* aPreselectionGroup = + dynamic_cast( getAction( PreselectionId ) ); + if ( aPreselectionGroup ) + aPreselectionGroup->setEnabled( on ); } /*! @@ -2094,14 +2130,51 @@ void SVTK_ViewWindow::createActions(SUIT_ResourceMgr* theResourceMgr) connect(anAction, SIGNAL(toggled(bool)), this, SLOT(onSwitchZoomingStyle(bool))); mgr->registerAction( anAction, SwitchZoomingStyleId ); - // Turn on/off dynamic pre-selection - anAction = new QtxAction(tr("MNU_SVTK_DYNAMIC_PRESLECTION_SWITCH"), - theResourceMgr->loadPixmap( "VTKViewer", tr( "ICON_SVTK_DYNAMIC_PRESLECTION_SWITCH" ) ), - tr( "MNU_SVTK_DYNAMIC_PRESLECTION_SWITCH" ), 0, this); - anAction->setStatusTip(tr("DSC_SVTK_DYNAMIC_PRESLECTION_SWITCH")); + // Pre-selection + QSignalMapper* aSignalMapper = new QSignalMapper( this ); + connect(aSignalMapper, SIGNAL(mapped(int)), this, SLOT(onSwitchPreSelectionMode(int))); + + anAction = new QtxAction(tr("MNU_SVTK_PRESELECTION_STANDARD"), + theResourceMgr->loadPixmap( "VTKViewer", tr( "ICON_SVTK_PRESELECTION_STANDARD" ) ), + tr( "MNU_SVTK_PRESELECTION_STANDARD" ), 0, this); + anAction->setStatusTip(tr("DSC_SVTK_PRESELECTION_STANDARD")); + anAction->setCheckable(true); + connect(anAction, SIGNAL(activated()), aSignalMapper, SLOT(map())); + aSignalMapper->setMapping( anAction, Standard_Preselection ); + mgr->registerAction( anAction, StandardPreselectionId ); + + anAction = new QtxAction(tr("MNU_SVTK_PRESELECTION_DYNAMIC"), + theResourceMgr->loadPixmap( "VTKViewer", tr( "ICON_SVTK_PRESELECTION_DYNAMIC" ) ), + tr( "MNU_SVTK_PRESELECTION_DYNAMIC" ), 0, this); + anAction->setStatusTip(tr("DSC_SVTK_PRESELECTION_DYNAMIC")); anAction->setCheckable(true); - connect(anAction, SIGNAL(toggled(bool)), this, SLOT(onSwitchDynamicPreSelection(bool))); - mgr->registerAction( anAction, SwitchDynamicPreselectionId ); + connect(anAction, SIGNAL(activated()), aSignalMapper, SLOT(map())); + aSignalMapper->setMapping( anAction, Dynamic_Preselection ); + mgr->registerAction( anAction, DynamicPreselectionId ); + + anAction = new QtxAction(tr("MNU_SVTK_PRESELECTION_DISABLED"), + theResourceMgr->loadPixmap( "VTKViewer", tr( "ICON_SVTK_PRESELECTION_DISABLED" ) ), + tr( "MNU_SVTK_PRESELECTION_DISABLED" ), 0, this); + anAction->setStatusTip(tr("DSC_SVTK_PRESELECTION_DISABLED")); + anAction->setCheckable(true); + connect(anAction, SIGNAL(activated()), aSignalMapper, SLOT(map())); + aSignalMapper->setMapping( anAction, Preselection_Disabled ); + mgr->registerAction( anAction, DisablePreselectionId ); + + QtxActionGroup* aPreselectionAction = new QtxActionGroup( this, true ); + aPreselectionAction->add( getAction( StandardPreselectionId ) ); + aPreselectionAction->add( getAction( DynamicPreselectionId ) ); + aPreselectionAction->add( getAction( DisablePreselectionId ) ); + mgr->registerAction( aPreselectionAction, PreselectionId ); + + // Selection + anAction = new QtxAction(tr("MNU_SVTK_ENABLE_SELECTION"), + theResourceMgr->loadPixmap( "VTKViewer", tr( "ICON_SVTK_SELECTION" ) ), + tr( "MNU_SVTK_ENABLE_SELECTION" ), 0, this); + anAction->setStatusTip(tr("DSC_SVTK_ENABLE_SELECTION")); + anAction->setCheckable(true); + connect(anAction, SIGNAL(toggled(bool)), this, SLOT(onEnableSelection(bool))); + mgr->registerAction( anAction, EnableSelectionId ); // Start recording myStartAction = new QtxAction(tr("MNU_SVTK_RECORDING_START"), @@ -2149,7 +2222,14 @@ void SVTK_ViewWindow::createToolBar() mgr->append( DumpId, myToolBar ); mgr->append( SwitchInteractionStyleId, myToolBar ); mgr->append( SwitchZoomingStyleId, myToolBar ); - mgr->append( SwitchDynamicPreselectionId, myToolBar ); + + mgr->append( mgr->separator(), myToolBar ); + + mgr->append( PreselectionId, myToolBar ); + mgr->append( EnableSelectionId, myToolBar ); + + mgr->append( mgr->separator(), myToolBar ); + mgr->append( ViewTrihedronId, myToolBar ); QtxMultiAction* aScaleAction = new QtxMultiAction( this ); diff --git a/src/SVTK/SVTK_ViewWindow.h b/src/SVTK/SVTK_ViewWindow.h index e4a916ebb..58f2e8a73 100755 --- a/src/SVTK/SVTK_ViewWindow.h +++ b/src/SVTK/SVTK_ViewWindow.h @@ -233,8 +233,11 @@ class SVTK_EXPORT SVTK_ViewWindow : public SUIT_ViewWindow //! Set zooming style virtual void SetZoomingStyle( const int ); - //! Set dynamic preselection on/off - virtual void SetDynamicPreSelection( bool ); + //! Set preselection mode + virtual void SetPreSelectionMode( Preselection_Mode ); + + //! Enable/disable selection + virtual void SetSelectionEnabled( bool ); //! Customize space mouse buttons virtual void SetSpacemouseButtons( const int, const int, const int ); @@ -315,7 +318,9 @@ public slots: void onSwitchInteractionStyle(bool theOn); void onSwitchZoomingStyle(bool theOn); - void onSwitchDynamicPreSelection(bool theOn); + + void onSwitchPreSelectionMode(int theMode); + void onEnableSelection(bool theOn); void onStartRecording(); void onPlayRecording(); @@ -411,7 +416,9 @@ protected: FrontId, BackId, TopId, BottomId, LeftId, RightId, ClockWiseId, AntiClockWiseId, ResetId, ViewTrihedronId, NonIsometric, GraduatedAxes, UpdateRate, ParallelModeId, ProjectionModeId, ViewParametersId, SynchronizeId, SwitchInteractionStyleId, - SwitchZoomingStyleId,SwitchDynamicPreselectionId, + SwitchZoomingStyleId, + PreselectionId, StandardPreselectionId, DynamicPreselectionId, DisablePreselectionId, + EnableSelectionId, StartRecordingId, PlayRecordingId, PauseRecordingId, StopRecordingId }; SVTK_View* myView; diff --git a/src/SVTK/resources/SVTK_images.ts b/src/SVTK/resources/SVTK_images.ts index 3794dfb54..f446c7718 100644 --- a/src/SVTK/resources/SVTK_images.ts +++ b/src/SVTK/resources/SVTK_images.ts @@ -56,8 +56,20 @@ vtk_view_recording_stop.png - ICON_SVTK_DYNAMIC_PRESLECTION_SWITCH - vtk_view_highlight.png + ICON_SVTK_PRESELECTION_STANDARD + vtk_view_highlight_std.png + + + ICON_SVTK_PRESELECTION_DYNAMIC + vtk_view_highlight_dyn.png + + + ICON_SVTK_PRESELECTION_DISABLED + vtk_view_highlight_off.png + + + ICON_SVTK_SELECTION + vtk_view_selection.png diff --git a/src/SVTK/resources/SVTK_msg_en.ts b/src/SVTK/resources/SVTK_msg_en.ts index 623656fef..947d70d93 100644 --- a/src/SVTK/resources/SVTK_msg_en.ts +++ b/src/SVTK/resources/SVTK_msg_en.ts @@ -209,16 +209,40 @@ MNU_SVTK_ZOOMING_STYLE_SWITCH - Zomming style switch + Zooming style switch + + + DSC_SVTK_PRESELECTION_STANDARD + Standard preselection mode + + + MNU_SVTK_PRESELECTION_STANDARD + Standard Preselection Mode + + + DSC_SVTK_PRESELECTION_DYNAMIC + Dynamic preselection mode + + + MNU_SVTK_PRESELECTION_DYNAMIC + Dynamic Preselection Mode - DSC_SVTK_DYNAMIC_PRESLECTION_SWITCH - Dynamic preselection switch + DSC_SVTK_PRESELECTION_DISABLED + Disable preselection - MNU_SVTK_DYNAMIC_PRESLECTION_SWITCH - Dynamic preselection switch + MNU_SVTK_PRESELECTION_DISABLED + Disable Preselection + + DSC_SVTK_ENABLE_SELECTION + Enable/Disable selection + + + MNU_SVTK_ENABLE_SELECTION + Enable/Disable selection + SVTK_FontWidget diff --git a/src/SVTK/resources/SVTK_msg_fr.ts b/src/SVTK/resources/SVTK_msg_fr.ts index 048f36de3..ba75a9bda 100755 --- a/src/SVTK/resources/SVTK_msg_fr.ts +++ b/src/SVTK/resources/SVTK_msg_fr.ts @@ -212,13 +212,37 @@ Changer le style de zoom - DSC_SVTK_DYNAMIC_PRESLECTION_SWITCH - Pré-sélection dynamique + DSC_SVTK_PRESELECTION_STANDARD + Standard preselection mode - MNU_SVTK_DYNAMIC_PRESLECTION_SWITCH - Pré-sélection dynamique + MNU_SVTK_PRESELECTION_STANDARD + Standard Preselection Mode + + DSC_SVTK_PRESELECTION_DYNAMIC + Dynamic preselection mode + + + MNU_SVTK_PRESELECTION_DYNAMIC + Dynamic Preselection Mode + + + DSC_SVTK_PRESELECTION_DISABLED + Disable preselection + + + MNU_SVTK_PRESELECTION_DISABLED + Disable Preselection + + + DSC_SVTK_ENABLE_SELECTION + Enable/Disable selection + + + MNU_SVTK_ENABLE_SELECTION + Enable/Disable selection + SVTK_FontWidget diff --git a/src/SVTK/resources/vtk_view_highlight_dyn.png b/src/SVTK/resources/vtk_view_highlight_dyn.png new file mode 100755 index 0000000000000000000000000000000000000000..0aa1d6f9c6624693ee049035e8551d882e557438 GIT binary patch literal 835 zcmV-J1HAl+P)Px#24YJ`L;ykni2&i^nL@V!000SaNLh0L01m_e01m_fl`9S#00007bV*G`2ipl4 z5ds^DCplyQ00P5FL_t(I%dM2pOH@%5$3OR++cZwoPqQ2$E3=%0Hd;hc|3JH`Re`%A z`awjZ3kRVeN?B2sL|8!)LW^h-L{WiJk_9yov}hKg4T+VaNx!T{=e2lm#u;(SMHepb z@ZRHdzUQ3py(SzE^S@R+9>;pI^B-Vqf&Mg*^U*$xC@P8(!5Brv-8&m*(Z8k%D~eb_ z)uJM(wTK7>Pxb*+0~v*g2u1`lFqwDNF!UL3*mAR#+K`L(9)>WFlG7T`I6Wa*MMMV9jB?ejpjW&XluJnEEWS` z+}p`Xe#`(T`%FZc6)Xbd=l;WI1Oh&4Yimg)5=0`A-T4fj0Z#UrF+xFLKE8s*d>;A0 z&0Dt_Oa34ltxEv0X#qvWou*YBCq*(jia+SXT0bL$BV4<7m7(EJOXKnQ%ZiGMN@L8M z$v~L^=K3tz4p$LW03&9Y^s zUB=9~l&^sxn;|?ZIPqa7hq-}SW{X&uVbqJ{s8y$zKYI`L1zE} N002ovPDHLkV1n7(bgcjY literal 0 HcmV?d00001 diff --git a/src/SVTK/resources/vtk_view_highlight_off.png b/src/SVTK/resources/vtk_view_highlight_off.png new file mode 100755 index 0000000000000000000000000000000000000000..d0a344d5c5b0529bfdbfce8c9458997f74a2c5ad GIT binary patch literal 616 zcmV-u0+;=XP)A*qC=ujm-p#g5`!doD>5! zYI1iZatjNAs$hA6M?uYCN+7`b_oErW<;aVIU_eHj|00n%;MQ)Gccpe7E^fnOpdbsB zE3{YyHk+M$)^pkIHdY^bSW2J}Cn&Yq8U6Ds`)@xiF?b`Mw?hhA;qXorfV(M;+k2Y; zobBmXO$nI-qpfWKJg&KhrdipI$MCFtHB%}CgoK%A?I*3owthe=iNjHa&v%EnO?9T8 z3Kgt;>J>ZjHQaRPn&;8|){Nj{r+v z-O|rWz+u(_y?xJ{z22Kov{NOVF0uKX6=f6o>iz=DcgckFa#LLZ0000=6Z0yPRtQct2J5ZDbo<4hxXsDsL_ZEk`KmD6RK@hRq9gL(hw0GR*!6_S!b9XCO zD2fJbb_WP%hMtdNwVH@TA{>`xniK2(_#rD&XtCC?zIH2u!OX))Pw4L-!0-3VI#1He z0yRxVQRWd1CX7Zib2CK-2k#M%wA2lSH|qh@`nJ(jzRgZkEXbgiaJ#n<3Y}n+V%>H@PfUufJHV2#a`mj>HExN{sSJ5lhM>WvL7d6Z#wrj{M9z)5%ep*7G80G zAc`fK;6f5EUA|6RTNm%g#&Eh^$K*Q)^?~K#82GJa>9?_H-_54Q+$Z^B+qS!yo|@u^ zQo0BTOWLixx&ZfbwQ29@Ivflhy<#+3S!=b2JkAaArSAO%t^ue1e^00000NkvXX Hu0mjfCr1{d literal 0 HcmV?d00001 diff --git a/src/SVTK/resources/vtk_view_selection.png b/src/SVTK/resources/vtk_view_selection.png new file mode 100644 index 0000000000000000000000000000000000000000..24fb63242e3b70d071682069ad6ab4554dafc85a GIT binary patch literal 620 zcmV-y0+aoTP)v=t3|%rGg-8pbHl+YU87b zR>fjaFlYozanV);5foZX7i~dYNEVWK+mM>ZhR}+FH_f<-^_7G+1`ix&hMD;|bIw0U z5kgQei^t=bN^@BUSUZsZ0pw11u4dSY^L79)fPp&O{{!ycKUrU3QL)n~9@P(+OeVQ} zHOdyxFujrX6$4F`HgtW7r_WwvFxu$ryFvQR-hYcwQ4CnE4UEO&^n`AqI)}MCw6FFE z4F)6Ytqq{4Jby8c#bPEH45Dd=u<4zD{g4$!xXxl@gMAx{QDyMS5dHo4@OV60g)384 zBb2g;u75?fnlYJF^4UC*$bIH>nU+fzNBQ{HR~A@VHnPa)#Vq-p2E_sn$5sM?BQ!Q_ zB9TboJDky0l|xxvVsT-Xjy+!1s4ix-6sOMyak+LzCq_0O9UY`)RaKUnQ&Fz2q6$c$Ul8Lm60b; zompN#9vG4C)(-jL;eed|v=A!w&|m#$4ol6^`&-GTCc?LGUSAfRTe!p9cQlioo8y~a zI0q