Salome HOME
Implementation of the Point 2 of the 20948: EDF 1468 SMESH: Histogram of the quality...
[modules/smesh.git] / src / SMESHGUI / SMESHGUI_VTKUtils.cxx
index 772dd80f5eb891eafba45d0ee7387d9df301b585..184eb903cb05f34e53a23b96a6d746761d2155fb 100644 (file)
@@ -30,6 +30,7 @@
 #include "SMESHGUI.h"
 #include "SMESHGUI_Utils.h"
 #include "SMESHGUI_Filter.h"
+#include "SMESH_ControlsDef.hxx"
 
 #include <SMESH_Actor.h>
 #include <SMESH_ActorUtils.h>
 #include <SalomeApp_Application.h>
 #include <SalomeApp_Study.h>
 
+#ifndef DISABLE_PLOT2DVIEWER
+#include <SPlot2d_ViewModel.h>
+#include <SPlot2d_Histogram.h>
+#include <Plot2d_ViewManager.h>
+#endif
+
 // SALOME KERNEL includes
 #include <utilities.h>
 
@@ -333,7 +340,7 @@ namespace SMESH
 #endif
         //MESSAGE("GetVisualObj");
         if (nulData)
-               objModified = aVisualObj->NulData();
+                objModified = aVisualObj->NulData();
         else
           objModified = aVisualObj->Update();
       }
@@ -640,7 +647,7 @@ namespace SMESH
 
   void RemoveActor( SUIT_ViewWindow *theWnd, SMESH_Actor* theActor){
     if(SVTK_ViewWindow* vtkWnd = GetVtkViewWindow(theWnd)){
-       MESSAGE("RemoveActor " << theActor);
+        MESSAGE("RemoveActor " << theActor);
       vtkWnd->RemoveActor(theActor);
       if(theActor->hasIO()){
         Handle(SALOME_InteractiveObject) anIO = theActor->getIO();
@@ -652,6 +659,9 @@ namespace SMESH
           VISUAL_OBJ_CONT.erase(aKey);
         }
       }
+#ifndef DISABLE_PLOT2DVIEWER
+       ProcessIn2DViewers(theActor,RemoveFrom2dViewer);
+#endif
       theActor->Delete();
       vtkWnd->Repaint();
     }
@@ -679,7 +689,7 @@ namespace SMESH
 
   bool UpdateView(SUIT_ViewWindow *theWnd, EDisplaing theAction, const char* theEntry)
   {
-       //MESSAGE("UpdateView");
+        //MESSAGE("UpdateView");
     bool OK = false;
     SVTK_ViewWindow* aViewWnd = GetVtkViewWindow(theWnd);
     if (!aViewWnd)
@@ -696,7 +706,7 @@ namespace SMESH
       case eDisplayAll: {
         while (vtkActor *anAct = aCollection->GetNextActor()) {
           if (SMESH_Actor *anActor = dynamic_cast<SMESH_Actor*>(anAct)) {
-               MESSAGE("--- display " << anActor);
+                MESSAGE("--- display " << anActor);
             anActor->SetVisibility(true);
           }
         }
@@ -704,10 +714,10 @@ namespace SMESH
       }
       case eDisplayOnly:
       case eEraseAll: {
-       //MESSAGE("---case eDisplayOnly");
+        //MESSAGE("---case eDisplayOnly");
         while (vtkActor *anAct = aCollection->GetNextActor()) {
           if (SMESH_Actor *anActor = dynamic_cast<SMESH_Actor*>(anAct)) {
-               //MESSAGE("--- erase " << anActor);
+                //MESSAGE("--- erase " << anActor);
             anActor->SetVisibility(false);
           }
         }
@@ -717,12 +727,12 @@ namespace SMESH
           switch (theAction) {
             case eDisplay:
             case eDisplayOnly:
-               //MESSAGE("--- display " << anActor);
+                //MESSAGE("--- display " << anActor);
               anActor->SetVisibility(true);
               if (theAction == eDisplayOnly) aRenderer->ResetCameraClippingRange();
               break;
             case eErase:
-               //MESSAGE("--- erase " << anActor);
+                //MESSAGE("--- erase " << anActor);
               anActor->SetVisibility(false);
               break;
           }
@@ -731,7 +741,7 @@ namespace SMESH
           case eDisplay:
           case eDisplayOnly:
             {
-               //MESSAGE("---");
+                //MESSAGE("---");
               SalomeApp_Study* aStudy = dynamic_cast<SalomeApp_Study*>(theWnd->getViewManager()->study());
               _PTR(Study) aDocument = aStudy->studyDS();
               // Pass non-visual objects (hypotheses, etc.), return true in this case
@@ -760,7 +770,7 @@ namespace SMESH
 
 
   bool UpdateView(EDisplaing theAction, const char* theEntry){
-       //MESSAGE("UpdateView");
+        //MESSAGE("UpdateView");
     SalomeApp_Study* aStudy = dynamic_cast< SalomeApp_Study* >( GetActiveStudy() );
     SalomeApp_Application* app = dynamic_cast< SalomeApp_Application* >( aStudy->application() );
     SUIT_ViewWindow *aWnd = app->activeViewManager()->getActiveView();
@@ -799,7 +809,7 @@ namespace SMESH
 
   bool Update(const Handle(SALOME_InteractiveObject)& theIO, bool theDisplay)
   {
-       MESSAGE("Update");
+        MESSAGE("Update");
     _PTR(Study) aStudy = GetActiveStudyDocument();
     CORBA::Long anId = aStudy->StudyId();
     if ( TVisualObjPtr aVisualObj = SMESH::GetVisualObj(anId,theIO->getEntry())) {
@@ -812,7 +822,7 @@ namespace SMESH
 
   bool UpdateNulData(const Handle(SALOME_InteractiveObject)& theIO, bool theDisplay)
   {
-       MESSAGE("UpdateNulData");
+        MESSAGE("UpdateNulData");
     _PTR(Study) aStudy = GetActiveStudyDocument();
     CORBA::Long anId = aStudy->StudyId();
     if ( TVisualObjPtr aVisualObj = SMESH::GetVisualObj(anId,theIO->getEntry(), true)) {
@@ -1303,4 +1313,44 @@ namespace SMESH
     DistanceToPosition( theBounds, theNormal, theDist, theOrigin );
     return true;
   }
+
+#ifndef DISABLE_PLOT2DVIEWER
+  //=======================================================================
+  /**
+     Get histogram from the input actor
+     Repaint/Remove the histogram in/from each opened Plot2D Viewer 
+  */
+  //=======================================================================
+  void ProcessIn2DViewers( SMESH_Actor *theActor, Viewer2dActionType aType ) {
+    SalomeApp_Application* anApp = dynamic_cast<SalomeApp_Application*>(SUIT_Session::session()->activeApplication());
+    
+    if(!anApp || !theActor)
+      return;
+
+    SPlot2d_Histogram* aHistogram = 0;
+    if(theActor->GetPlot2Histogram())
+      aHistogram = theActor->UpdatePlot2Histogram();
+    else 
+      return;
+      
+     ViewManagerList aViewManagerList;
+     anApp->viewManagers(SPlot2d_Viewer::Type(), aViewManagerList);
+     
+     aType = aHistogram->getPointList().empty() ? RemoveFrom2dViewer : aType;
+     
+     SUIT_ViewManager* aViewManager;
+     foreach( aViewManager, aViewManagerList ) {
+       if (Plot2d_ViewManager* aManager = dynamic_cast<Plot2d_ViewManager*>(aViewManager)) {
+        if (SPlot2d_Viewer* aViewer = dynamic_cast<SPlot2d_Viewer*>(aManager->getViewModel())) {
+          if (Plot2d_ViewFrame* aViewFrame = aViewer->getActiveViewFrame()) {
+            if(aType == UpdateIn2dViewer )
+              aViewFrame->displayObject(aHistogram, true);
+            else if (aType == RemoveFrom2dViewer)
+              aViewFrame->eraseObject(aHistogram, true);
+          }
+        }
+       }
+     }
+  }
+#endif //DISABLE_PLOT2DVIEWER
 } // end of namespace SMESH