]> SALOME platform Git repositories - modules/visu.git/commitdiff
Salome HOME
Improvement: now in rules you can use "canBeDisplayed" parameter. It is true, if...
authorasl <asl@opencascade.com>
Thu, 1 Dec 2005 10:05:59 +0000 (10:05 +0000)
committerasl <asl@opencascade.com>
Thu, 1 Dec 2005 10:05:59 +0000 (10:05 +0000)
src/VISUGUI/VisuGUI.cxx
src/VISUGUI/VisuGUI_Displayer.cxx
src/VISUGUI/VisuGUI_Displayer.h

index 5085697509f6c827c6bca782aa16b4120565dc4b..13ec0762c2cc045772d3c7a7346d04e461712fe9 100644 (file)
@@ -624,11 +624,11 @@ OnDisplayPrs()
       if(aPrsObject){
         if(MYDEBUG) MESSAGE("VisuGUI::OnDisplayPrs : Prs3d object");
         //UpdateViewer( this, aPrsObject );
-       displayer()->Display( anIO->getEntry() );
-
        SVTK_ViewWindow* vw = GetViewWindow( this, /*create=*/true );
-        if ( vw ) {
-          vw->highlight(anIO, 1);
+        if ( vw )
+       {
+         displayer()->Display( anIO->getEntry() );
+         vw->highlight(anIO, 1);
         }
         continue;
       }
@@ -2494,13 +2494,13 @@ createPopupMenus()
   QString aPrsVisible   = "(($type in {'VISU::TMESH' " + aPrsAll + "}) and isVisible)";
   QString aPrsInvisible = "(($type in {'VISU::TMESH' " + aPrsAll + "})" + andInvisible + ")";
 
-  QString anEraseRule = "selcount>0 and (" + aPrsVisible +
+  QString anEraseRule = "selcount>0 and ({true} in $canBeDisplayed) and (" + aPrsVisible +
     " or (client='ObjectBrowser' and (" + aTableOrCont + orCurveVisible + ")))";
 
-  QString aDisplayRule = "selcount>0 and (" + aPrsInvisible +
+  QString aDisplayRule = "selcount>0 and ({true} in $canBeDisplayed) and (" + aPrsInvisible +
     " or (client='ObjectBrowser' and (" + aTableOrCont + orCurveInvisible + ")))";
 
-  QString aDOnlyRule = "selcount>0 and (($type in {'VISU::TMESH' " + aPrsAll + "})"
+  QString aDOnlyRule = "selcount>0 and ({true} in $canBeDisplayed) and (($type in {'VISU::TMESH' " + aPrsAll + "})"
     " or (client='ObjectBrowser' and ((type='VISU::TTABLE' and nbChildren>0) or"
     " ($type in {'VISU::TCURVE' 'VISU::TCONTAINER'}))))";
 
index 0d604a34559ce4bf70959f55340b1cd07cae876a..bcfffa772294744ddb3810aca7e4ef7ed5c8c996 100644 (file)
@@ -212,3 +212,30 @@ SPlot2d_Prs* VisuGUI_Displayer::buildTable( Plot2d_ViewWindow* wnd, VISU::Table_
   }
   return prs;
 }
+
+bool VisuGUI_Displayer::canBeDisplayed( const QString& entry, const QString& viewer_type ) const
+{
+  SalomeApp_Study* study = dynamic_cast<SalomeApp_Study*>( myApp->activeStudy() );
+  if( !study )
+    return false;
+
+  _PTR(SObject) obj = study->studyDS()->FindObjectID( entry.latin1() );
+  CORBA::Object_var anObj = VISU::ClientSObjectToObject( obj );
+  if( CORBA::is_nil( anObj ) )
+    return false;
+
+  if( viewer_type==SVTK_Viewer::Type() )
+  {
+    VISU::Prs3d_i* thePrs = dynamic_cast<VISU::Prs3d_i*>( VISU::GetServant( anObj ).in() );
+    return thePrs;
+  }
+  else if( viewer_type==SPlot2d_Viewer::Type() )
+  {
+    VISU::Curve_i* aCurve = dynamic_cast<VISU::Curve_i*>( VISU::GetServant( anObj ).in() );
+    VISU::Container_i* aCont = dynamic_cast<VISU::Container_i*>( VISU::GetServant( anObj ).in() );
+    VISU::Table_i* aTable = dynamic_cast<VISU::Table_i*>(VISU::GetServant( anObj ).in() );
+    return aCurve || aCont || aTable;
+  }
+  else 
+    return false;
+}
index 62a2472526b016cb62fff2d331871bca16b3f6e0..f762ba0a9ab2c022923d8a9088e9ade83869a8f9 100644 (file)
@@ -45,6 +45,7 @@ public:
   ~VisuGUI_Displayer();
 
   virtual SALOME_Prs* buildPresentation( const QString&, SALOME_View* = 0 );
+  virtual bool        canBeDisplayed( const QString& /*entry*/, const QString& /*viewer_type*/ ) const;
 
 protected:
           bool         addCurve      ( SPlot2d_Prs*, Plot2d_ViewWindow*, VISU::Curve_i* ) const;