]> SALOME platform Git repositories - modules/visu.git/commitdiff
Salome HOME
Sinchronize clipped presentation in all 3D views; update highlighting box
authorjfa <jfa@opencascade.com>
Wed, 20 Jul 2005 08:42:03 +0000 (08:42 +0000)
committerjfa <jfa@opencascade.com>
Wed, 20 Jul 2005 08:42:03 +0000 (08:42 +0000)
src/VISUGUI/VisuGUI_ClippingDlg.cxx
src/VISUGUI/VisuGUI_ClippingDlg.h
src/VISUGUI/VisuGUI_Tools.cxx
src/VISUGUI/VisuGUI_Tools.h

index 68f4b0c218557da672fc638da5c46f953fc055ac..02cdbb9a1fb38514d953a609db85403889d71854 100644 (file)
@@ -63,10 +63,8 @@ namespace VISU {
   void RenderViewWindow (SVTK_ViewWindow* vw)
   {
     if (vw) {
-//if (vw->getRenderer()->GetActors()->GetNumberOfItems() > 0) {
-        vw->getRenderer()->ResetCameraClippingRange();
-        vw->Repaint();
-//}
+      vw->getRenderer()->ResetCameraClippingRange();
+      vw->Repaint();
     }
   }
 
@@ -512,7 +510,8 @@ void VisuGUI_ClippingDlg::ClickOnApply()
                              tr("BUT_OK") );
     }
 
-    VISU::RenderViewWindow(aViewWindow);
+    //VISU::RenderViewWindow(aViewWindow);
+    VISU::RepaintViewWindows(myVisuGUI, myIO);
   }
 }
 
@@ -544,6 +543,7 @@ void VisuGUI_ClippingDlg::onSelectionChanged()
   if (SVTK_ViewWindow* aViewWindow = VISU::GetViewWindow(myVisuGUI)) {
     Handle(SALOME_InteractiveObject) anIO;
     CORBA::Object_var anObject = VISU::GetSelectedObj(myVisuGUI, &anIO);
+    myIO = anIO;
     if (CORBA::is_nil(anObject)) return;
     PortableServer::ServantBase_var aServant = VISU::GetServant(anObject);
     if (!aServant.in()) return;
index c0786edbe7e4ce23443f0d9a0daf9f185bddd651..b7f7fc5c3a3b001010f3b3c578f0089e7ce70330 100644 (file)
@@ -2,6 +2,8 @@
 #ifndef DIALOGBOX_CLIPPING_H
 #define DIALOGBOX_CLIPPING_H
 
+#include "SALOME_InteractiveObject.hxx"
+
 #include "QtxDblSpinBox.h"
 
 // QT Includes
@@ -67,6 +69,7 @@ public:
 private:
 
     SalomeApp_SelectionMgr* mySelectionMgr;
+    Handle(SALOME_InteractiveObject) myIO;
 
     VisuGUI       * myVisuGUI;
     VISU::Prs3d_i * myPrs3d;
index 419b71815caf3abda465a7fe87f989cae21422e3..c53d8af9b1ab5cb1ba6d096a54b3c50f7b14221b 100644 (file)
@@ -627,7 +627,7 @@ namespace VISU
     return NULL;
   }
 
-  VISU_Actor* 
+  VISU_Actor*
   PublishInView(const SalomeApp_Module* theModule,
                VISU::Prs3d_i* thePrs)
   {
@@ -644,9 +644,9 @@ namespace VISU
     return aActor;
   }
 
-  VISU_Actor* 
+  VISU_Actor*
   UpdateViewer(const SalomeApp_Module* theModule,
-              VISU::Prs3d_i* thePrs, 
+              VISU::Prs3d_i* thePrs,
               bool theDispOnly)
   {
     SVTK_ViewWindow* vw = GetViewWindow( theModule );
@@ -661,15 +661,15 @@ namespace VISU
     for(anActColl->InitTraversal(); (anActor = anActColl->GetNextActor()) != NULL; ){
       if(!SALOME_Actor::SafeDownCast(anActor))
        continue;
-      if(anActor->IsA("VISU_Actor")){ 
+      if(anActor->IsA("VISU_Actor")){
        anVISUActor = VISU_Actor::SafeDownCast(anActor);
-       VISU::Prs3d_i* aPrs = anVISUActor->GetPrs3d();      
+       VISU::Prs3d_i* aPrs = anVISUActor->GetPrs3d();
        if(aPrs == NULL) continue;
        if (thePrs == aPrs) {
          aResActor = anVISUActor->GetParent();
          thePrs->UpdateActor(aResActor);
          aResActor->VisibilityOn();
-         
+
        } else if (theDispOnly) {
          anVISUActor->GetParent()->VisibilityOff();
        } else {
@@ -677,15 +677,42 @@ namespace VISU
       } else if (theDispOnly && anActor->GetVisibility()) {
        anActor->VisibilityOff();
       } else {
-      } 
+      }
     }
-    if (aResActor) 
+    if (aResActor)
       return aResActor;
 
     anVISUActor = PublishInView( theModule, thePrs );
     return anVISUActor;
   }
 
+  void
+  RepaintViewWindows (const SalomeApp_Module* theModule,
+                      const Handle(SALOME_InteractiveObject)& theIObject)
+  {
+    TViewWindows aViewWindows;
+    if (SalomeApp_Application* anApp = theModule->getApp()) {
+      ViewManagerList aViewManagerList;
+      anApp->viewManagers(SVTK_Viewer::Type(),aViewManagerList);
+      QPtrListIterator<SUIT_ViewManager> anIter (aViewManagerList);
+      while (SUIT_ViewManager* aViewManager = anIter.current()) {
+       QPtrVector<SUIT_ViewWindow> aViews = aViewManager->getViews();
+       for (int i = 0, iEnd = aViews.size(); i < iEnd; i++) {
+         if (SUIT_ViewWindow* aViewWindow = aViews.at(i)) {
+           if (SVTK_ViewWindow* vw = dynamic_cast<SVTK_ViewWindow*>(aViewWindow)) {
+              if (vw->isVisible(theIObject)) {
+                vw->getRenderer()->ResetCameraClippingRange();
+                vw->Repaint();
+                vw->highlight(theIObject, true, true);
+              }
+           }
+         }
+       }
+       ++anIter;
+      }
+    }
+  }
+
   VISU_Actor*
   FindActor(SVTK_ViewWindow* theViewWindow,
            const char* theEntry)
@@ -732,8 +759,8 @@ namespace VISU
     } catch (std::runtime_error& ex) {
       INFOS(ex.what());
       QApplication::restoreOverrideCursor();
-      SUIT_MessageBox::warn1 (GetDesktop(theModule), QObject::tr("WRN_VISU"), 
-                              QObject::tr("ERR_CANT_BUILD_PRESENTATION") + " " + QObject::tr(ex.what()), 
+      SUIT_MessageBox::warn1 (GetDesktop(theModule), QObject::tr("WRN_VISU"),
+                              QObject::tr("ERR_CANT_BUILD_PRESENTATION") + " " + QObject::tr(ex.what()),
                               QObject::tr("BUT_OK"));
 
       TViewWindows aViewWindows = GetViews(theModule);
@@ -789,7 +816,7 @@ namespace VISU
        }
        if ( !theCurve->IsAuto() ) {
          plotCurve->setLine( (Plot2d_Curve::LineType)theCurve->GetLine(), theCurve->GetLineWidth() );
-         plotCurve->setMarker( (Plot2d_Curve::MarkerType)theCurve->GetMarker() ); 
+         plotCurve->setMarker( (Plot2d_Curve::MarkerType)theCurve->GetMarker() );
          SALOMEDS::Color color = theCurve->GetColor();
          plotCurve->setColor( QColor( (int)(color.R*255.), (int)(color.G*255.), (int)(color.B*255.) ) );
        }
@@ -813,9 +840,9 @@ namespace VISU
     }
   }
 
-  void                                 
-  PlotTable(const SalomeApp_Module* theModule, 
-           VISU::Table_i* table, 
+  void
+  PlotTable(const SalomeApp_Module* theModule,
+           VISU::Table_i* table,
            int theDisplaying)
   {
     SPlot2d_Viewer* aView = GetPlot2dViewer( theModule, true ); // create if necessary
@@ -825,7 +852,7 @@ namespace VISU
     if ( !aPlot )
       return;
 
-    if ( theDisplaying == VISU::eDisplayOnly ) 
+    if ( theDisplaying == VISU::eDisplayOnly )
       aPlot->EraseAll();
     QList<Plot2d_Curve> clist;
     aPlot->getCurves( clist );
@@ -863,8 +890,8 @@ namespace VISU
   }
 
   void
-  PlotCurve(const SalomeApp_Module* theModule, 
-           VISU::Curve_i* theCurve, 
+  PlotCurve(const SalomeApp_Module* theModule,
+           VISU::Curve_i* theCurve,
            int theDisplaying)
   {
     SPlot2d_Viewer* aView = GetPlot2dViewer( theModule, true );
@@ -874,7 +901,7 @@ namespace VISU
     if ( !aPlot )
       return;
 
-//  if ( theDisplaying == VISU::eDisplayOnly ) 
+//  if ( theDisplaying == VISU::eDisplayOnly )
 //    aPlot->EraseAll();
     QList<Plot2d_Curve> clist;
     aPlot->getCurves( clist );
@@ -896,8 +923,8 @@ namespace VISU
   }
 
   void
-  PlotContainer(const SalomeApp_Module* theModule, 
-               VISU::Container_i* container, 
+  PlotContainer(const SalomeApp_Module* theModule,
+               VISU::Container_i* container,
                int theDisplaying)
   {
     SPlot2d_Viewer* aView = GetPlot2dViewer( theModule, true );
@@ -907,7 +934,7 @@ namespace VISU
     if ( !aPlot )
       return;
 
-    if ( theDisplaying == VISU::eDisplayOnly ) 
+    if ( theDisplaying == VISU::eDisplayOnly )
       aPlot->EraseAll();
     QList<Plot2d_Curve> clist;
     aPlot->getCurves( clist );
@@ -918,7 +945,7 @@ namespace VISU
        if ( theCurve && theCurve->IsValid() ) {
          SPlot2d_Curve* plotCurve = dynamic_cast<SPlot2d_Curve*>
             (aView->getCurveByIO(new SALOME_InteractiveObject (theCurve->GetEntry(), "", "")));
-         
+
          UpdateCurve( theCurve, aPlot, plotCurve, theDisplaying );
 
          if ( plotCurve && theDisplaying == VISU::eErase ) {
@@ -940,7 +967,7 @@ namespace VISU
       if ( !CORBA::is_nil( aTable ) && !CORBA::is_nil( aContainer ) ) {
        VISU::Table_i*     pTable     = dynamic_cast<VISU::Table_i*>(VISU::GetServant(aTable).in());
        VISU::Container_i* pContainer = dynamic_cast<VISU::Container_i*>(VISU::GetServant(aContainer).in());
-      
+
        if ( pContainer && pTable ) {
          for ( int i = 2; i <= pTable->GetNbRows(); i++ ) {
            CORBA::Object_var aNewCurve = GetVisuGen( theModule )->CreateCurve( pTable->_this(), 1, i );
index 4e8a5630eda6f4fa13e619ef27d0943db23344b0..996776bb5cbc3b121914f34700a90a1f4fb735c5 100644 (file)
@@ -132,6 +132,14 @@ namespace VISU {
                                                    VISU::Prs3d_i* thePrs,
                                                    bool theDispOnly = false);
 
+  /*!
+   * \brief Repaint all SVTK view windows, where the given object is displayed.
+   * \param theModule  - is used to access application.
+   * \param theIObject - is supposed to be selected (is highlighted in this method).
+   */
+  void                                 RepaintViewWindows(const SalomeApp_Module* theModule,
+                                                         const Handle(SALOME_InteractiveObject)& theIObject);
+
   VISU_Actor*                          FindActor(SVTK_ViewWindow* theViewWindow,
                                                 const char* theEntry);
   VISU_Actor*                          FindActor(SVTK_ViewWindow* theViewWindow,