Salome HOME
Join modifications from branch OCC_debug_for_3_2_0b1
[modules/smesh.git] / src / SMESHGUI / SMESHGUI_VTKUtils.cxx
index b918db58dd3b97815a6eda2571f020e04a26a026..76a8cb1a608233aceb6e8fc244863624ef189e2c 100644 (file)
 #include <SUIT_Session.h>
 #include <SUIT_Study.h>
 
-#include "SalomeApp_SelectionMgr.h"
+#include "LightApp_SelectionMgr.h"
 
 #include "SVTK_Selector.h"
 #include "SVTK_ViewModel.h"
 #include "SVTK_ViewWindow.h"
-#include "SVTK_RenderWindow.h"
-#include "SVTK_InteractorStyle.h"
-#include "SVTK_RenderWindowInteractor.h"
 
 #include "utilities.h"
 
@@ -53,7 +50,7 @@
 #include "SMESH_ObjectDef.h"
 
 #include <SalomeApp_Application.h>
-#include <SalomeApp_SelectionMgr.h>
+#include <LightApp_SelectionMgr.h>
 #include <SalomeApp_Study.h>
 
 #include <SALOMEDSClient_Study.hxx>
@@ -93,7 +90,7 @@ namespace SMESH{
              if(!aMesh->_is_nil()){
                aVisualObj.reset(new SMESH_MeshObj(aMesh));
                aVisualObj->Update();
-               TVisualObjCont::value_type aValue(aKey,aVisualObj); 
+               TVisualObjCont::value_type aValue(aKey,aVisualObj);
                VISUAL_OBJ_CONT.insert(aValue);
                return aVisualObj;
              }
@@ -145,15 +142,8 @@ namespace SMESH{
   SVTK_ViewWindow*
   GetViewWindow(const SalomeApp_Module* theModule)
   {
-    if(SalomeApp_Application* anApp = theModule->getApp()){
-      if(SUIT_ViewManager* aViewManager = anApp->activeViewManager()){
-       if(aViewManager->getType() == SVTK_Viewer::Type()){
-         if(SUIT_ViewWindow* aViewWindow = aViewManager->getActiveView()){
-           return dynamic_cast<SVTK_ViewWindow*>(aViewWindow);
-         }
-       }
-      }
-    }
+    if (SalomeApp_Application* anApp = theModule->getApp())
+      return dynamic_cast<SVTK_ViewWindow*>(anApp->desktop()->activeWindow());
     return NULL;
   }
 
@@ -311,8 +301,10 @@ namespace SMESH{
 
   void RepaintCurrentView(){
     if(SVTK_ViewWindow* wnd = GetCurrentVtkView() )
-      wnd->getRenderer()->Render();
-      //wnd->Repaint();
+      {
+       wnd->getRenderer()->Render();
+       wnd->Repaint(false);
+      }
   }
 
   void UpdateView(SUIT_ViewWindow *theWnd, EDisplaing theAction, const char* theEntry)
@@ -378,7 +370,7 @@ namespace SMESH{
 
   void UpdateView(){
     if(SVTK_ViewWindow* aWnd = SMESH::GetCurrentVtkView()){
-      SalomeApp_SelectionMgr* mgr = SMESHGUI::selectionMgr();
+      LightApp_SelectionMgr* mgr = SMESHGUI::selectionMgr();
       SALOME_ListIO selected; mgr->selectedObjects( selected );
 
       if( selected.Extent() == 0){
@@ -416,102 +408,120 @@ namespace SMESH{
   }
 
 
-  void UpdateSelectionProp() {
-    SUIT_Study* aStudy = GetActiveStudy();
-    SalomeApp_Application* app = dynamic_cast< SalomeApp_Application* >( aStudy->application() );
+  void UpdateSelectionProp( SMESHGUI* theModule ) {
+    if( !theModule )
+      return;
+
+    SalomeApp_Application* app = dynamic_cast< SalomeApp_Application* >( theModule->application() );
+    if( !app )
+    {
+      MESSAGE( "UpdateSelectionProp: Application is null" );
+      return;
+    }
+
     SUIT_ViewManager* vm = app->activeViewManager();
+    if( !vm )
+    {
+      MESSAGE( "UpdateSelectionProp: View manager is null" );
+      return;
+    }
+
     QPtrVector<SUIT_ViewWindow> views = vm->getViews();
 
-    SUIT_ResourceMgr* mgr = SMESHGUI::resourceMgr();
-
-    QColor aHiColor = mgr->colorValue( "SMESH", "SettingsSelectColor", Qt::white ),
-           aSelColor = mgr->colorValue( "SMESH", "SettingsItemSelectColor", Qt::yellow ),
-          aPreColor = mgr->colorValue( "SMESH", "SettingsPreSelectColor", Qt::cyan );
-
-    int SW = mgr->integerValue( "SMESH", "SettingsItemSelectWidth", 5 ),
-        PW = mgr->integerValue( "SMESH", "SettingsPreSelectWidth", 5 );
-
-    double SP1 = mgr->doubleValue( "SMESH", "SettingsNodeSelectTol", 0.025 ),
-           SP2 = mgr->doubleValue( "SMESH", "SettingsElementsSelectTol", 0.001 );
-
-    for ( int i=0, n=views.count(); i<n; i++ ) {
-        SVTK_ViewWindow* aVtkView = GetVtkViewWindow( views[i] );
-       if (!aVtkView) continue;
-       // update VTK viewer properties
-       SVTK_RenderWindowInteractor* anInteractor = aVtkView->getRWInteractor();
-       if (anInteractor) {
-         // mesh element selection
-         anInteractor->SetSelectionProp(aSelColor.red()/255., aSelColor.green()/255.,
-                                        aSelColor.blue()/255., SW );
-
-         // tolerances
-         anInteractor->SetSelectionTolerance(SP1, SP2);
-
-         // pre-selection
-         SVTK_InteractorStyle* aStyle =
-           dynamic_cast<SVTK_InteractorStyle*>( anInteractor->GetInteractorStyle() );
-         if (aStyle) {
-           aStyle->setPreselectionProp(aPreColor.red()/255., aPreColor.green()/255.,
-                                       aPreColor.blue()/255., PW);
-         }
-       }
+    SUIT_ResourceMgr* mgr = SMESH::GetResourceMgr( theModule );
+    if( !mgr )
+    {
+      MESSAGE( "UpdateSelectionProp: Resource manager is null" );
+      return;
+    }
+
+    QColor aHiColor = mgr->colorValue( "SMESH", "selection_object_color", Qt::white ),
+           aSelColor = mgr->colorValue( "SMESH", "selection_element_color", Qt::yellow ),
+          aPreColor = mgr->colorValue( "SMESH", "highlight_color", Qt::cyan );
+
+    int SW = mgr->integerValue( "SMESH", "selection_width", 5 ),
+        PW = mgr->integerValue( "SMESH", "highlight_width", 5 );
+
+    double SP1 = mgr->doubleValue( "SMESH", "selection_precision_node", 0.025 ),
+           SP2 = mgr->doubleValue( "SMESH", "selection_precision_element", 0.001 );
+
+    for ( int i=0, n=views.count(); i<n; i++ ){
+      // update VTK viewer properties
+      if(SVTK_ViewWindow* aVtkView = GetVtkViewWindow( views[i] )){
+       // mesh element selection
+       aVtkView->SetSelectionProp(aSelColor.red()/255., 
+                                  aSelColor.green()/255.,
+                                  aSelColor.blue()/255., 
+                                  SW );
+       // tolerances
+       aVtkView->SetSelectionTolerance(SP1, SP2);
+
+       // pre-selection
+       aVtkView->SetPreselectionProp(aPreColor.red()/255., 
+                                     aPreColor.green()/255.,
+                                     aPreColor.blue()/255., 
+                                     PW);
        // update actors
        vtkRenderer* aRenderer = aVtkView->getRenderer();
        vtkActorCollection *aCollection = aRenderer->GetActors();
        aCollection->InitTraversal();
        while(vtkActor *anAct = aCollection->GetNextActor()){
          if(SMESH_Actor *anActor = dynamic_cast<SMESH_Actor*>(anAct)){
-           anActor->SetHighlightColor(aHiColor.red()/255., aHiColor.green()/255.,
+           anActor->SetHighlightColor(aHiColor.red()/255., 
+                                      aHiColor.green()/255.,
                                       aHiColor.blue()/255.);
-           anActor->SetPreHighlightColor(aPreColor.red()/255., aPreColor.green()/255.,
+           anActor->SetPreHighlightColor(aPreColor.red()/255., 
+                                         aPreColor.green()/255.,
                                          aPreColor.blue()/255.);
          }
        }
+      }
     }
   }
 
 
   //----------------------------------------------------------------------------
-  SVTK_InteractorStyle* GetInteractorStyle(SUIT_ViewWindow *theWindow){
-    if(SVTK_ViewWindow* aWnd = GetVtkViewWindow(theWindow)){
-      if(SVTK_RenderWindowInteractor* anInteractor = aWnd->getRWInteractor()){
-       return dynamic_cast<SVTK_InteractorStyle*>( anInteractor->GetInteractorStyle() );
-      }
-    }
+  SVTK_Selector* 
+  GetSelector(SUIT_ViewWindow *theWindow)
+  {
+    if(SVTK_ViewWindow* aWnd = GetVtkViewWindow(theWindow))
+      return aWnd->GetSelector();
+
     return NULL;
   }
 
   void SetFilter(const Handle(VTKViewer_Filter)& theFilter,
-                SVTK_InteractorStyle* theStyle)
+                SVTK_Selector* theSelector)
   {
-    theStyle->SetFilter(theFilter);
+    if (theSelector)
+      theSelector->SetFilter(theFilter);
   }
 
-  Handle(VTKViewer_Filter) GetFilter(int theId, SVTK_InteractorStyle* theStyle)
+  Handle(VTKViewer_Filter) GetFilter(int theId, SVTK_Selector* theSelector)
   {
-    return theStyle->GetFilter(theId);
+    return theSelector->GetFilter(theId);
   }
 
-  bool IsFilterPresent(int theId, SVTK_InteractorStyle* theStyle)
+  bool IsFilterPresent(int theId, SVTK_Selector* theSelector)
   {
-    return theStyle->IsFilterPresent(theId);
+    return theSelector->IsFilterPresent(theId);
   }
 
-  void RemoveFilter(int theId, SVTK_InteractorStyle* theStyle)
+  void RemoveFilter(int theId, SVTK_Selector* theSelector)
   {
-    theStyle->RemoveFilter(theId);
+    theSelector->RemoveFilter(theId);
   }
 
-  void RemoveFilters(SVTK_InteractorStyle* theStyle)
+  void RemoveFilters(SVTK_Selector* theSelector)
   {
-    for ( int id = SMESHGUI_NodeFilter; theStyle && id < SMESHGUI_LastFilter; id++ )
-      theStyle->RemoveFilter( id );
+    for ( int id = SMESHGUI_NodeFilter; theSelector && id < SMESHGUI_LastFilter; id++ )
+      theSelector->RemoveFilter( id );
   }
 
   bool IsValid(SALOME_Actor* theActor, int theCellId,
-              SVTK_InteractorStyle* theStyle)
+              SVTK_Selector* theSelector)
   {
-    return theStyle->IsValid(theActor,theCellId);
+    return theSelector->IsValid(theActor,theCellId);
   }
 
 
@@ -554,8 +564,8 @@ namespace SMESH{
 
 
   //----------------------------------------------------------------------------
-  int GetNameOfSelectedNodes(SVTK_Selector* theSelector, 
-                            const Handle(SALOME_InteractiveObject)& theIO, 
+  int GetNameOfSelectedNodes(SVTK_Selector* theSelector,
+                            const Handle(SALOME_InteractiveObject)& theIO,
                             QString& theName)
   {
     theName = "";
@@ -568,8 +578,8 @@ namespace SMESH{
     return aMapIndex.Extent();
   }
 
-  int GetNameOfSelectedElements(SVTK_Selector* theSelector, 
-                               const Handle(SALOME_InteractiveObject)& theIO, 
+  int GetNameOfSelectedElements(SVTK_Selector* theSelector,
+                               const Handle(SALOME_InteractiveObject)& theIO,
                                QString& theName)
   {
     theName = "";
@@ -589,12 +599,12 @@ namespace SMESH{
   }
 
 
-  int GetEdgeNodes(SVTK_Selector* theSelector, 
+  int GetEdgeNodes(SVTK_Selector* theSelector,
                   const TVisualObjPtr& theVisualObject,
-                  int& theId1, 
+                  int& theId1,
                   int& theId2)
   {
-    const SALOME_ListIO& selected = theSelector->StoredIObjects(); 
+    const SALOME_ListIO& selected = theSelector->StoredIObjects();
 
     if ( selected.Extent() != 1 )
       return -1;
@@ -624,7 +634,7 @@ namespace SMESH{
   }
 
   //----------------------------------------------------------------------------
-  int GetNameOfSelectedNodes(SalomeApp_SelectionMgr *theMgr,
+  int GetNameOfSelectedNodes(LightApp_SelectionMgr *theMgr,
                             const Handle(SALOME_InteractiveObject)& theIO,
                             QString& theName)
   {
@@ -642,7 +652,7 @@ namespace SMESH{
     return -1;
   }
 
-  int GetNameOfSelectedNodes(SalomeApp_SelectionMgr *theMgr, QString& theName){
+  int GetNameOfSelectedNodes(LightApp_SelectionMgr *theMgr, QString& theName){
     theName = "";
     SALOME_ListIO selected; theMgr->selectedObjects( selected );
     if(selected.Extent() == 1){
@@ -651,9 +661,9 @@ namespace SMESH{
     }
     return -1;
   }
-  
 
-  int GetNameOfSelectedElements(SalomeApp_SelectionMgr *theMgr,
+
+  int GetNameOfSelectedElements(LightApp_SelectionMgr *theMgr,
                                const Handle(SALOME_InteractiveObject)& theIO,
                                QString& theName)
   {
@@ -677,7 +687,7 @@ namespace SMESH{
   }
 
 
-  int GetNameOfSelectedElements(SalomeApp_SelectionMgr *theMgr, QString& theName)
+  int GetNameOfSelectedElements(LightApp_SelectionMgr *theMgr, QString& theName)
   {
     theName = "";
     SALOME_ListIO selected; theMgr->selectedObjects( selected );
@@ -689,7 +699,7 @@ namespace SMESH{
     return -1;
   }
 
-  int GetSelected(SalomeApp_SelectionMgr*      theMgr,
+  int GetSelected(LightApp_SelectionMgr*       theMgr,
                  TColStd_IndexedMapOfInteger& theMap,
                  const bool                   theIsElement)
   {
@@ -707,7 +717,7 @@ namespace SMESH{
   }
 
 
-  int GetEdgeNodes( SalomeApp_SelectionMgr* theMgr, int& theId1, int& theId2 )
+  int GetEdgeNodes( LightApp_SelectionMgr* theMgr, int& theId1, int& theId2 )
   {
     SALOME_ListIO selected; theMgr->selectedObjects( selected );
 
@@ -749,7 +759,7 @@ namespace SMESH{
       vtkRenderer *aRenderer = aWnd->getRenderer();
       vtkActorCollection *aCollection = aRenderer->GetActors();
       aCollection->InitTraversal();
-      
+
       while ( vtkActor *anAct = aCollection->GetNextActor())
       {
         if ( SMESH_Actor *anActor = dynamic_cast<SMESH_Actor*>( anAct ) )