]> SALOME platform Git repositories - modules/visu.git/commitdiff
Salome HOME
Adjust Display/Erase popup functionality
authorapo <apo@opencascade.com>
Fri, 24 Nov 2006 15:45:48 +0000 (15:45 +0000)
committerapo <apo@opencascade.com>
Fri, 24 Nov 2006 15:45:48 +0000 (15:45 +0000)
src/VISUGUI/VisuGUI.cxx
src/VISUGUI/VisuGUI_Displayer.cxx
src/VISUGUI/VisuGUI_Tools.cxx
src/VISUGUI/VisuGUI_ViewTools.cxx

index 87143741017a1dbdd1128df17c6aa6e9e73be418..4809eeb67460896d7f1cb96af3c97b2329ad3c73 100644 (file)
@@ -624,78 +624,45 @@ OnDisplayPrs()
 {
   if(MYDEBUG) MESSAGE("VisuGUI::OnDisplayPrs");
 
-  LightApp_SelectionMgr* mgr = GetSelectionMgr(this);
-  if (!mgr) return;
+  LightApp_SelectionMgr* aSelectionMgr = GetSelectionMgr(this);
+  if (!aSelectionMgr)
+    return;
 
   QApplication::setOverrideCursor(Qt::waitCursor);
 
-  SVTK_ViewWindow* vw = GetActiveViewWindow<SVTK_ViewWindow>(this);
-
   SALOME_ListIO aSel, aList;
-  mgr->selectedObjects(aSel);
+  aSelectionMgr->selectedObjects(aSel);
   extractContainers(aSel, aList);
 
   for (SALOME_ListIteratorOfListIO it (aList); it.More(); it.Next()) {
     Handle(SALOME_InteractiveObject) anIO = it.Value();
     CORBA::Object_var anObject = GetSelectedObj(GetAppStudy(this), anIO->getEntry());
-
-    if (!CORBA::is_nil(anObject)) {
-      // is it Holder ?
-      VISU::ColoredPrs3dHolder_i* aHolder = 
-       dynamic_cast<VISU::ColoredPrs3dHolder_i*>(VISU::GetServant(anObject).in());
-      if (aHolder) {
-        if(MYDEBUG) MESSAGE("VisuGUI::OnDisplayPrs : Holder object");
-        //UpdateViewer( this, aHolder );
-        if (vw) {
-         displayer()->Display(anIO->getEntry());
-         vw->highlight(anIO, 1);
-        }
-        continue;
-      }
-
-      // is it Prs3d object ?
-      VISU::Prs3d_i* aPrsObject = dynamic_cast<VISU::Prs3d_i*>(VISU::GetServant(anObject).in());
-      if (aPrsObject) {
-        if(MYDEBUG) MESSAGE("VisuGUI::OnDisplayPrs : Prs3d object");
-        //UpdateViewer( this, aPrsObject );
-        if (vw) {
-         displayer()->Display(anIO->getEntry());
-         vw->highlight(anIO, 1);
-        }
-        continue;
-      }
-      // is it Curve ?
-      VISU::Curve_i* aCurve = dynamic_cast<VISU::Curve_i*>(VISU::GetServant(anObject).in());
-      if (aCurve) {
-        if(MYDEBUG) MESSAGE("VisuGUI::OnDisplayPrs : Curve object");
-        //PlotCurve( this, aCurve, VISU::eDisplay );
-       displayer()->Display(anIO->getEntry());
-        continue;
-      }
-      // is it Container ?
-      VISU::Container_i* aContainer = dynamic_cast<VISU::Container_i*>(VISU::GetServant(anObject).in());
-      if (aContainer) {
-        if(MYDEBUG) MESSAGE("VisuGUI::DisplayPrs : Container object");
-        //PlotContainer( this, aContainer, VISU::eDisplay );
+    if(CORBA::is_nil(anObject)) 
+      continue;
+
+    VISU::Base_var aBase = VISU::Base::_narrow(anObject);
+    if(!CORBA::is_nil(aBase)){
+      VISU::VISUType aType = aBase->GetType();
+      switch (aType) {
+      case VISU::TCURVE: 
+      case VISU::TCONTAINER: 
+      case VISU::TTABLE: 
        displayer()->Display(anIO->getEntry());
-        continue;
-      }
-      // is it Table ?
-      VISU::Table_i* aTable = dynamic_cast<VISU::Table_i*>(VISU::GetServant(anObject).in());
-      if (aTable) {
-        if(MYDEBUG) MESSAGE("VisuGUI::DisplayPrs : Table object");
-        //PlotTable( this, aTable, VISU::eDisplay );
-       displayer()->Display(anIO->getEntry());
-        continue;
-      }
+       break;
+      default: {
+       VISU::Prs3d_var aPrs3d = VISU::Prs3d::_narrow(aBase);
+       if(!CORBA::is_nil(aPrs3d) || aType == VISU::TCOLOREDPRS3DHOLDER){
+         if(SVTK_ViewWindow* aViewWindow = GetActiveViewWindow<SVTK_ViewWindow>(this)){
+           displayer()->Display(anIO->getEntry());
+           aViewWindow->highlight(anIO, 1);
+           aViewWindow->getRenderer()->ResetCameraClippingRange();
+           aViewWindow->Repaint();
+         }
+       }
+      }}
     }
   }
 
-  if (vw) {
-    vw->getRenderer()->ResetCameraClippingRange();
-    vw->Repaint();
-  }
-
   QApplication::restoreOverrideCursor();
 }
 
index 9d1ff6b048f60d3b60127ac7b4cc2bc9743452e8..af25a1bcf05070faab7d49ec1b8ce8b1e768085e 100644 (file)
@@ -57,86 +57,98 @@ VisuGUI_Displayer::~VisuGUI_Displayer()
 {
 }
 
-SALOME_Prs* VisuGUI_Displayer::buildPresentation( const QString& entry, SALOME_View* theViewFrame )
+SALOME_Prs* VisuGUI_Displayer::buildPresentation( const QString& theEntry, SALOME_View* theView )
 {
-  SALOME_Prs* prs = 0;
+  SALOME_Prs* aPrs = 0;
 
-  SALOME_View* aViewFrame = theViewFrame ? theViewFrame : GetActiveView();
-  SalomeApp_Study* study = dynamic_cast<SalomeApp_Study*>( myApp->activeStudy() );
+  SALOME_View* aView = theView ? theView : GetActiveView();
+  SalomeApp_Study* aStudy = dynamic_cast<SalomeApp_Study*>( myApp->activeStudy() );
 
-  if ( study && aViewFrame )
-  {
-    _PTR(SObject) obj = study->studyDS()->FindObjectID( entry.latin1() );
-    CORBA::Object_var anObj = VISU::ClientSObjectToObject( obj );
-    if( CORBA::is_nil( anObj ) )
+  if(aStudy && aView){
+    _PTR(SObject) aSObject = aStudy->studyDS()->FindObjectID( theEntry.latin1() );
+    CORBA::Object_var anObject = VISU::ClientSObjectToObject( aSObject );
+    if( CORBA::is_nil( anObject ) )
       return 0;
 
-    SVTK_Viewer* vtk_viewer = dynamic_cast<VVTK_Viewer*>( aViewFrame );
-    if (!vtk_viewer)
-      vtk_viewer = dynamic_cast<SVTK_Viewer*>( aViewFrame );
-    if( vtk_viewer )
-    {
-      SVTK_ViewWindow* wnd =
-        dynamic_cast<SVTK_ViewWindow*>( vtk_viewer->getViewManager()->getActiveView() );
-      if( wnd )
-      {
-       VISU::Prs3d_i* thePrs;
-       VISU::Base_i* aBase = dynamic_cast<VISU::Base_i*>(VISU::GetServant(anObj).in());
-       if(aBase->GetType() == VISU::TCOLOREDPRS3DHOLDER)
-       {
-         VISU::ColoredPrs3dHolder_i* aHolder = dynamic_cast<VISU::ColoredPrs3dHolder_i*>( aBase );
-         thePrs = dynamic_cast<VISU::Prs3d_i*>( VISU::GetServant(aHolder->GetDevice()).in() );
-       }
-       else
-         thePrs = dynamic_cast<VISU::Prs3d_i*>( aBase );
+    VISU::Base_var aBase = VISU::Base::_narrow(anObject);
+    if (CORBA::is_nil(aBase)) 
+      return 0;
 
-       if( thePrs )
-       {
-         buildPrs3d( wnd, thePrs );
-         prs = LightApp_Displayer::buildPresentation( thePrs->GetEntry(), aViewFrame );
+    VISU::Base_i* aBaseServant = dynamic_cast<VISU::Base_i*>(VISU::GetServant(aBase).in());
+
+    VISU::VISUType aType = aBase->GetType();
+    VISU::Prs3d_var aPrs3d = VISU::Prs3d::_narrow(aBase);
+    if(!CORBA::is_nil(aPrs3d) || aType == VISU::TCOLOREDPRS3DHOLDER){
+      SVTK_Viewer* aViewer = dynamic_cast<VVTK_Viewer*>( aView );
+      if (!aViewer)
+       aViewer = dynamic_cast<SVTK_Viewer*>( aView );
+      if( aViewer ){
+       SUIT_ViewManager* aViewManager = aViewer->getViewManager();
+       SUIT_ViewWindow* aWindow = aViewManager->getActiveView();
+       if(SVTK_ViewWindow* aViewWindow = dynamic_cast<SVTK_ViewWindow*>( aWindow )){
+         VISU::Prs3d_i* aPrs3d = NULL;
+         if(aType == VISU::TCOLOREDPRS3DHOLDER){
+           VISU::ColoredPrs3dHolder_var aHolder = VISU::ColoredPrs3dHolder::_narrow(aBase);
+           VISU::ColoredPrs3d_var aColoredPrs3d = aHolder->GetDevice();
+           aPrs3d = dynamic_cast<VISU::Prs3d_i*>(VISU::GetServant(aColoredPrs3d).in());
+         }else
+           aPrs3d = dynamic_cast<VISU::Prs3d_i*>(aBaseServant);
+
+         if(aPrs3d){
+           buildPrs3d( aViewWindow, aPrs3d );
+           Handle(SALOME_InteractiveObject) anIO = aPrs3d->GetIO();
+           if(anIO->hasEntry()){
+             std::string anEntry = anIO->getEntry();
+             aPrs = LightApp_Displayer::buildPresentation( anEntry, aView );
+           }
+         }
        }
       }
     }
 
-    SPlot2d_Viewer* plot_viewer = dynamic_cast<SPlot2d_Viewer*>( aViewFrame );
-    if( plot_viewer )
-    {
-      Plot2d_ViewWindow* wnd =
-        dynamic_cast<Plot2d_ViewWindow*>( plot_viewer->getViewManager()->getActiveView() );
-      if( !wnd )
+    if(SPlot2d_Viewer* aViewer = dynamic_cast<SPlot2d_Viewer*>(aView)){
+      SUIT_ViewManager* aViewManager = aViewer->getViewManager();
+      SUIT_ViewWindow* aWindow = aViewManager->getActiveView();
+      Plot2d_ViewWindow* aViewWindow = dynamic_cast<Plot2d_ViewWindow*>( aWindow );
+      if( !aViewWindow )
        return 0;
+      
+      SPlot2d_Prs* aPlot2dPrs = 0;
+      switch (aType) {
+      case VISU::TCURVE: {
+       VISU::Curve_i* aCurve = dynamic_cast<VISU::Curve_i*>(aBaseServant);
+       aPlot2dPrs = buildCurve( aViewWindow, aCurve );
+       break;
+      }
+      case VISU::TCONTAINER: {
+       VISU::Container_i* aContainer = dynamic_cast<VISU::Container_i*>(aBaseServant);
+       aPlot2dPrs = buildContainer( aViewWindow, aContainer );
+       break;
+      }
+      case VISU::TTABLE: {
+       VISU::Table_i* aTable = dynamic_cast<VISU::Table_i*>(aBaseServant);
+       aPlot2dPrs = buildTable( aViewWindow, aTable );
+       break;
+      }}
 
-      VISU::Curve_i* aCurve = dynamic_cast<VISU::Curve_i*>( VISU::GetServant( anObj ).in() );
-      SPlot2d_Prs* iprs = 0;
-      if( aCurve )
-       iprs = buildCurve( wnd, aCurve );
-
-      VISU::Container_i* aCont = dynamic_cast<VISU::Container_i*>( VISU::GetServant( anObj ).in() );
-      if( aCont )
-       iprs = buildContainer( wnd, aCont );
-
-      VISU::Table_i* aTable = dynamic_cast<VISU::Table_i*>(VISU::GetServant( anObj ).in() );
-      if( aTable )
-       iprs = buildTable( wnd, aTable );
-
-      if( iprs )
-       prs = new SPlot2d_Prs( iprs );
+      if( aPlot2dPrs )
+       aPrs = new SPlot2d_Prs( aPlot2dPrs );
 
-      if( prs )
-       UpdatePrs( prs );
+      if( aPrs )
+       UpdatePrs( aPrs );
     }
   }
-  return prs;
+  return aPrs;
 }
 
-void VisuGUI_Displayer::buildPrs3d( SVTK_ViewWindow* wnd, VISU::Prs3d_i* thePrs ) const
+void VisuGUI_Displayer::buildPrs3d( SVTK_ViewWindow* theViewWindow, VISU::Prs3d_i* thePrs3d ) const
 {
-  VISU_Actor* newAct = VISU::FindActor(wnd, thePrs);
-  if (!newAct) {
+  VISU_Actor* anActor = VISU::FindActor(theViewWindow, thePrs3d);
+  if (!anActor) {
     try {
-      newAct = thePrs->CreateActor();
+      anActor = thePrs3d->CreateActor();
     } catch (std::runtime_error& exc) {
-      thePrs->RemoveActors();
+      thePrs3d->RemoveActors();
 
       INFOS(exc.what());
       SUIT_MessageBox::warn1
@@ -144,11 +156,12 @@ void VisuGUI_Displayer::buildPrs3d( SVTK_ViewWindow* wnd, VISU::Prs3d_i* thePrs
          QObject::tr("ERR_CANT_BUILD_PRESENTATION") + ": " + QObject::tr(exc.what()),
          QObject::tr("BUT_OK"));
     }
-  }
-  if (newAct) {
-    wnd->AddActor(newAct);
-    wnd->Repaint();
-  }
+    if (anActor)
+      theViewWindow->AddActor(anActor);
+  } else 
+    anActor->SetVisibility(true);
+
+  theViewWindow->Repaint();
 }
 
 bool VisuGUI_Displayer::addCurve( SPlot2d_Prs* prs, Plot2d_ViewWindow* wnd, VISU::Curve_i* c ) const
index 4aa51ac2315b9ed0949d71c4829ed157b61ae557..ad1e41d6d0b66b33af04555ec479e760a233e079 100644 (file)
@@ -708,9 +708,12 @@ namespace VISU
   FindActor(SVTK_ViewWindow* theViewWindow,
             VISU::Prs3d_i* thePrs)
   {
-    SALOMEDS::SObject_var aSObject = thePrs->GetSObject();
-    CORBA::String_var anEntry = aSObject->GetID();
-    return FindActor(theViewWindow,anEntry.in());
+    Handle(SALOME_InteractiveObject) anIO = thePrs->GetIO();
+    if(anIO->hasEntry()){
+      std::string anEntry = anIO->getEntry();
+      return FindActor(theViewWindow, anEntry.c_str());
+    }
+    return NULL;
   }
 
   void
index 047603e99ff765a5ef3ace35f36eb8543f9eeeb3..966636b4f66792a05cb712730a251f318d92d372 100644 (file)
 
 namespace VISU 
 {
+  //----------------------------------------------------------------------------
+  void
+  ErasePrs3dObject(VisuGUI* theModule,
+                  VISU::Prs3d_ptr thePrs3d, 
+                  bool theDoRepaint)
+  {
+    if(VISU::Prs3d_i* aPrs3d = dynamic_cast<VISU::Prs3d_i*>(VISU::GetServant(thePrs3d).in())){
+      SVTK_ViewWindow* aViewWindow = GetActiveViewWindow<SVTK_ViewWindow>(theModule);
+      RemoveScalarBarPosition(theModule, aViewWindow, aPrs3d);
+      ErasePrs3d(theModule, aPrs3d, theDoRepaint);
+    }
+  }
+
+  //----------------------------------------------------------------------------
   void
   ErasePrs(VisuGUI* theModule,
           CORBA::Object_ptr theObject, 
-          bool theDoRepaintVW)
+          bool theDoRepaint)
   {
-    if (CORBA::is_nil(theObject)) return;
+    if (CORBA::is_nil(theObject))
+      return;
+
     VISU::Base_var aBase = VISU::Base::_narrow(theObject);
-    if (CORBA::is_nil(aBase)) return;
+    if (CORBA::is_nil(aBase)) 
+      return;
 
     VISU::VISUType aType = aBase->GetType();
     switch (aType) {
@@ -61,12 +78,16 @@ namespace VISU
        PlotTable(theModule, aTable, VISU::eErase );
       break;
     }
+    case VISU::TCOLOREDPRS3DHOLDER: {
+      VISU::ColoredPrs3dHolder_var aHolder = VISU::ColoredPrs3dHolder::_narrow(aBase);
+      VISU::ColoredPrs3d_var aPrs3d = aHolder->GetDevice();
+      ErasePrs3dObject(theModule, aPrs3d, theDoRepaint);
+      break;
+    }
     default: {
-      if (VISU::Prs3d_i* aPrsObject = dynamic_cast<VISU::Prs3d_i*>(VISU::GetServant(aBase).in())) {
-        SVTK_ViewWindow* vw = GetActiveViewWindow<SVTK_ViewWindow>(theModule);
-       RemoveScalarBarPosition(theModule, vw, aPrsObject);
-        ErasePrs3d(theModule, aPrsObject, theDoRepaintVW);
-      }
+      VISU::Prs3d_var aPrs3d = VISU::Prs3d::_narrow(aBase);
+      ErasePrs3dObject(theModule, aPrs3d, theDoRepaint);
     }} // switch (aType)
   }
+
 }