Salome HOME
Fix for PAL14092 : EDF PAL 337 : SMESH Display problem on VTK.
[modules/smesh.git] / src / SMESHGUI / SMESHGUI_VTKUtils.cxx
index ac064ec25a41bd753af8242a86d2464219513e69..16eecc6966c619b774b44d4767a6d63af6624940 100644 (file)
@@ -15,7 +15,7 @@
 //  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.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org
+// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 
 
 #include "SMESHGUI_VTKUtils.h"
 #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,8 +142,9 @@ namespace SMESH{
   SVTK_ViewWindow*
   GetViewWindow(const SalomeApp_Module* theModule)
   {
-    if(SalomeApp_Application* anApp = theModule->getApp())
+    if (SalomeApp_Application* anApp = theModule->getApp())
       return dynamic_cast<SVTK_ViewWindow*>(anApp->desktop()->activeWindow());
+    return NULL;
   }
 
   SVTK_ViewWindow* FindVtkViewWindow( SUIT_ViewManager* theMgr,
@@ -338,6 +336,7 @@ namespace SMESH{
            case eDisplay:
            case eDisplayOnly:
              anActor->SetVisibility(true);
+             if (theAction == eDisplayOnly) aRenderer->ResetCameraClippingRange();
              break;
            case eErase:
              anActor->SetVisibility(false);
@@ -372,7 +371,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){
@@ -447,85 +446,83 @@ namespace SMESH{
     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++ ) {
-        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);
-         }
-       }
+    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)
   {
-    if (theStyle)
-      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);
   }
 
 
@@ -568,8 +565,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 = "";
@@ -582,8 +579,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 = "";
@@ -603,12 +600,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;
@@ -638,7 +635,7 @@ namespace SMESH{
   }
 
   //----------------------------------------------------------------------------
-  int GetNameOfSelectedNodes(SalomeApp_SelectionMgr *theMgr,
+  int GetNameOfSelectedNodes(LightApp_SelectionMgr *theMgr,
                             const Handle(SALOME_InteractiveObject)& theIO,
                             QString& theName)
   {
@@ -656,7 +653,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){
@@ -665,9 +662,9 @@ namespace SMESH{
     }
     return -1;
   }
-  
 
-  int GetNameOfSelectedElements(SalomeApp_SelectionMgr *theMgr,
+
+  int GetNameOfSelectedElements(LightApp_SelectionMgr *theMgr,
                                const Handle(SALOME_InteractiveObject)& theIO,
                                QString& theName)
   {
@@ -691,7 +688,7 @@ namespace SMESH{
   }
 
 
-  int GetNameOfSelectedElements(SalomeApp_SelectionMgr *theMgr, QString& theName)
+  int GetNameOfSelectedElements(LightApp_SelectionMgr *theMgr, QString& theName)
   {
     theName = "";
     SALOME_ListIO selected; theMgr->selectedObjects( selected );
@@ -703,7 +700,7 @@ namespace SMESH{
     return -1;
   }
 
-  int GetSelected(SalomeApp_SelectionMgr*      theMgr,
+  int GetSelected(LightApp_SelectionMgr*       theMgr,
                  TColStd_IndexedMapOfInteger& theMap,
                  const bool                   theIsElement)
   {
@@ -721,7 +718,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 );
 
@@ -763,7 +760,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 ) )