]> SALOME platform Git repositories - modules/visu.git/commitdiff
Salome HOME
PAL9391 - display/erase objects from other module
authorasl <asl@opencascade.com>
Mon, 7 Nov 2005 06:08:56 +0000 (06:08 +0000)
committerasl <asl@opencascade.com>
Mon, 7 Nov 2005 06:08:56 +0000 (06:08 +0000)
src/VISUGUI/Makefile.in
src/VISUGUI/VisuGUI.cxx
src/VISUGUI/VisuGUI_Displayer.cxx [new file with mode: 0644]
src/VISUGUI/VisuGUI_Displayer.h [new file with mode: 0644]
src/VISUGUI/VisuGUI_PopupTools.cxx
src/VISUGUI/VisuGUI_Tools.cxx
src/VISUGUI/VisuGUI_Tools.h

index 88fccafa0086921dcf294e830f112225c73853ac..2bcb2ea5fe03dab46f6cedfad31a400b660af564 100644 (file)
@@ -70,7 +70,8 @@ LIB_SRC =     VisuGUI.cxx \
                VisuGUI_CutPlanesDlg.cxx \
                VisuGUI_StreamLinesDlg.cxx \
                VisuGUI_VectorsDlg.cxx \
-               VisuGUI_DialogRunner.cxx
+               VisuGUI_DialogRunner.cxx \
+               VisuGUI_Displayer.cxx
 
 LIB_MOC =      VisuGUI.h \
                VisuGUI_Selection.h \
index 0a521376c45be4b11893fe8b3fe199bc009460f5..97b419714e0f85a8ca3be573a5b45e6a1cfca96b 100644 (file)
 #include "VisuGUI_Plot3DDlg.h"
 #include "VisuGUI_CubeAxesDlg.h"
 #include "VisuGUI_OffsetDlg.h"
+#include "VisuGUI_Displayer.h"
 
 #include "VISU_ScalarMap_i.hh"
 #include "VisuGUI_ScalarBarDlg.h"
@@ -147,7 +148,8 @@ static int MYDEBUG = 0;
 //////////////////////////////////////////////////
 
 VisuGUI::VisuGUI():
-  SalomeApp_Module( "VISU" )
+  SalomeApp_Module( "VISU" ),
+  myDisplayer( 0 )
 {
 }
 
@@ -2930,5 +2932,8 @@ VisuGUI
 
 LightApp_Displayer* VisuGUI::displayer()
 {
-  return 0;
+  if( !myDisplayer )
+    myDisplayer = new VisuGUI_Displayer( dynamic_cast<SalomeApp_Study*>( getApp()->activeStudy() ) );
+    
+  return myDisplayer;
 }
diff --git a/src/VISUGUI/VisuGUI_Displayer.cxx b/src/VISUGUI/VisuGUI_Displayer.cxx
new file mode 100644 (file)
index 0000000..09c4353
--- /dev/null
@@ -0,0 +1,207 @@
+//  VISU VISUGUI : Displayer for VISU module
+//
+//  Copyright (C) 2003  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
+//  CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
+//
+//  This library is free software; you can redistribute it and/or
+//  modify it under the terms of the GNU Lesser General Public
+//  License as published by the Free Software Foundation; either
+//  version 2.1 of the License.
+//
+//  This library is distributed in the hope that it will be useful,
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+//  Lesser General Public License for more details.
+//
+//  You should have received a copy of the GNU Lesser General Public
+//  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
+//
+//
+//
+//  File   : VisuGUI_Displayer.cxx
+//  Author : Alexander SOLOVYOV
+//  Module : VISU
+//  $Header: /home/server/cvs/VISU/VISU_SRC/src/VISUGUI/VisuGUI_Displayer.cxx
+
+#include "VisuGUI_Displayer.h"
+#include "VisuGUI_Tools.h"
+#include "VISU_Actor.h"
+
+#include <SVTK_ViewModel.h>
+#include <SVTK_ViewWindow.h>
+
+#include <SPlot2d_ViewModel.h>
+#include <SPlot2d_Prs.h>
+#include <Plot2d_ViewWindow.h>
+
+#include <SalomeApp_Study.h>
+
+#include "VISU_ViewManager_i.hh"
+
+VisuGUI_Displayer::VisuGUI_Displayer( SalomeApp_Study* st )
+: LightApp_Displayer(),
+  myStudy( st )
+{
+}
+
+VisuGUI_Displayer::~VisuGUI_Displayer()
+{
+}
+
+SALOME_Prs* VisuGUI_Displayer::buildPresentation( const QString& entry, SALOME_View* theViewFrame )
+{
+  SALOME_Prs* prs = 0;
+
+  SALOME_View* aViewFrame = theViewFrame ? theViewFrame : GetActiveView();
+
+  if ( myStudy && aViewFrame )
+  {
+    CORBA::Object_var anObj = VISU::ClientSObjectToObject( myStudy->studyDS()->FindObjectID( entry.latin1() ) );
+    if( CORBA::is_nil( anObj ) )
+      return 0;
+
+    SVTK_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 = dynamic_cast<VISU::Prs3d_i*>( VISU::GetServant( anObj ).in() );
+       if( thePrs )
+       {
+         buildPrs3d( wnd, thePrs );
+         prs = LightApp_Displayer::buildPresentation( entry, aViewFrame );
+       }
+      }
+    }
+
+    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 )
+       return 0;
+
+      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( prs )
+       UpdatePrs( prs );
+    }
+  }
+  return prs;
+}
+
+void VisuGUI_Displayer::buildPrs3d( SVTK_ViewWindow* wnd, VISU::Prs3d_i* thePrs ) const
+{
+  VISU_Actor* newAct = VISU::FindActor( wnd, thePrs );
+  if( !newAct )
+  {
+    VISU_Actor* a = thePrs->CreateActor();
+    if( a )
+      newAct = a->GetParent();
+  }
+  if( newAct && newAct )
+  {
+    wnd->AddActor( newAct );
+    wnd->Repaint();
+  }
+}
+
+bool VisuGUI_Displayer::addCurve( SPlot2d_Prs* prs, Plot2d_ViewWindow* wnd, VISU::Curve_i* c ) const
+{
+  if( !prs || !wnd || !c )
+    return false;
+
+  QString entry = c->GetSObject()->GetID();
+  SPlot2d_Viewer* vv = dynamic_cast<SPlot2d_Viewer*>( wnd->getModel() );
+  if( !vv )
+    return false;
+
+  SPlot2d_Curve* curve = vv->getCurveByIO( vv->FindIObject( entry.latin1() ) );
+  if( !curve )
+  {
+    curve = c->CreatePresentation();
+    VISU::UpdateCurve( c, 0, curve, VISU::eDisplay );
+  }
+  if( curve )
+    prs->AddObject( curve );
+
+  return curve!=0;
+}
+
+SPlot2d_Prs* VisuGUI_Displayer::buildCurve( Plot2d_ViewWindow* wnd, VISU::Curve_i* c ) const
+{
+  SPlot2d_Prs* prs = new SPlot2d_Prs();
+  if( !addCurve( prs, wnd, c ) )
+  {
+    delete prs;
+    prs = 0;
+  }
+  return prs;
+}
+
+SPlot2d_Prs* VisuGUI_Displayer::buildContainer( Plot2d_ViewWindow* wnd, VISU::Container_i* c ) const
+{
+  SPlot2d_Prs* prs = new SPlot2d_Prs();
+
+  int nbCurves = c ? c->GetNbCurves() : 0;
+  for( int k=1; k<=nbCurves; k++ )
+  {
+    VISU::Curve_i* theCurve = c->GetCurve( k );
+    if( theCurve && theCurve->IsValid() )
+      addCurve( prs, wnd, theCurve );
+  }
+  if( prs->getCurves().count()==0 )
+  {
+    delete prs;
+    prs = 0;
+  }
+  return prs;
+}
+
+SPlot2d_Prs* VisuGUI_Displayer::buildTable( Plot2d_ViewWindow* wnd, VISU::Table_i* t ) const
+{
+  SPlot2d_Prs* prs = new SPlot2d_Prs();
+  _PTR(SObject) TableSO = myStudy->studyDS()->FindObjectID( t->GetEntry().latin1() );
+
+  if( !TableSO )
+    return prs;
+
+  _PTR(ChildIterator) Iter = myStudy->studyDS()->NewChildIterator( TableSO );
+  for( ; Iter->More(); Iter->Next() )
+  {
+    CORBA::Object_var childObject = VISU::ClientSObjectToObject( Iter->Value() );
+    if( !CORBA::is_nil( childObject ) )
+    {
+      CORBA::Object_ptr aCurve = VISU::Curve::_narrow( childObject );
+      if( !CORBA::is_nil( aCurve ) )
+      {
+       VISU::Curve_i* theCurve = dynamic_cast<VISU::Curve_i*>(VISU::GetServant(aCurve).in());
+       addCurve( prs, wnd, theCurve );
+      }
+    }
+  }
+  if( prs->getCurves().count()==0 )
+  {
+    delete prs;
+    prs = 0;
+  }
+  return prs;
+}
diff --git a/src/VISUGUI/VisuGUI_Displayer.h b/src/VISUGUI/VisuGUI_Displayer.h
new file mode 100644 (file)
index 0000000..288b66b
--- /dev/null
@@ -0,0 +1,60 @@
+//  VISU VISUGUI : Displayer for VISU module
+//
+//  Copyright (C) 2003  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
+//  CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
+//
+//  This library is free software; you can redistribute it and/or
+//  modify it under the terms of the GNU Lesser General Public
+//  License as published by the Free Software Foundation; either
+//  version 2.1 of the License.
+//
+//  This library is distributed in the hope that it will be useful,
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+//  Lesser General Public License for more details.
+//
+//  You should have received a copy of the GNU Lesser General Public
+//  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
+//
+//
+//
+//  File   : VisuGUI_Displayer.h
+//  Author : Alexander SOLOVYOV
+//  Module : VISU
+//  $Header: /home/server/cvs/VISU/VISU_SRC/src/VISUGUI/VisuGUI_Displayer.h
+
+#ifndef VISUGUI_DISPLAYER_HEADER
+#define VISUGUI_DISPLAYER_HEADER
+
+#include <LightApp_Displayer.h>
+#include <VISU_Prs3d_i.hh>
+#include <VISU_Table_i.hh>
+
+class SalomeApp_Study;
+class SVTK_ViewWindow;
+class Plot2d_ViewWindow;
+class SPlot2d_Prs;
+
+class VisuGUI_Displayer : public LightApp_Displayer
+{
+public:
+  VisuGUI_Displayer( SalomeApp_Study* );
+  ~VisuGUI_Displayer();
+
+  virtual SALOME_Prs* buildPresentation( const QString&, SALOME_View* = 0 );
+
+protected:
+          bool         addCurve      ( SPlot2d_Prs*, Plot2d_ViewWindow*, VISU::Curve_i* ) const;
+  virtual void         buildPrs3d    ( SVTK_ViewWindow*,   VISU::Prs3d_i* ) const;
+  virtual SPlot2d_Prs* buildCurve    ( Plot2d_ViewWindow*, VISU::Curve_i* ) const;
+  virtual SPlot2d_Prs* buildContainer( Plot2d_ViewWindow*, VISU::Container_i* ) const;
+  virtual SPlot2d_Prs* buildTable    ( Plot2d_ViewWindow*, VISU::Table_i* ) const;
+
+private:
+  SalomeApp_Study*   myStudy;
+};
+
+#endif
index 0e1c308fe2bf9ef38a5093619dc086151330fb6f..39f904b0ee0038628ff637af89b78db8fd157100 100644 (file)
@@ -49,7 +49,7 @@ QtxValue VisuGUI_Selection::param( const int ind, const QString& p ) const
     else if ( p == "nbTimeStamps"   ) val = QtxValue( nbTimeStamps( ind ) );
     else if ( p == "nbChildren"     ) val = QtxValue( nbChildren( ind ) );
     else if ( p == "nbNamedChildren") val = QtxValue( nbNamedChildren( ind ) );
-//    else if ( p == "isVisible"      ) val = QtxValue( isVisible( ind ) );
+    else if ( p == "isVisible"      ) val = QtxValue( isVisible( ind ) );
     else if ( p == "isShrunk"       ) val = QtxValue( isShrunk( ind ) );
     else if ( p == "hasActor"       ) val = QtxValue( hasActor( ind ) );
     else if ( p == "isShading"      ) val = QtxValue( isShading( ind ) );
index 9c3f70881ed72efe05b0831931d1b28c6264c463..191964a2a94d8f6fff9665dc582d373e6d862c38 100644 (file)
@@ -960,7 +960,7 @@ namespace VISU
               int theDisplaying)
   {
     if ( theDisplaying == VISU::eErase ) {
-      if ( plotCurve )
+      if ( plotCurve && aPlot )
         aPlot->eraseCurve( plotCurve, false );
     }
     else if ( theDisplaying == VISU::eDisplay || theDisplaying == VISU::eDisplayOnly ) {
@@ -983,12 +983,14 @@ namespace VISU
           plotCurve->setColor( QColor( (int)(color.R*255.), (int)(color.G*255.), (int)(color.B*255.) ) );
         }
         plotCurve->setAutoAssign( theCurve->IsAuto() );
-        aPlot->displayCurve( plotCurve, false );
+       if( aPlot )
+         aPlot->displayCurve( plotCurve, false );
       }
       else {
         Plot2d_Curve* crv = theCurve->CreatePresentation();
         if ( crv ) {
-          aPlot->displayCurve( crv, false );
+         if( aPlot )
+           aPlot->displayCurve( crv, false );
           theCurve->SetLine( (VISU::Curve::LineType)crv->getLine(), crv->getLineWidth() );
           theCurve->SetMarker( (VISU::Curve::MarkerType)crv->getMarker());
           SALOMEDS::Color newColor;
index 9bde033e463dd5240705684f95b7d019d206521d..3f36c793a6b84df9a6df761feca81280e182f9cc 100644 (file)
@@ -45,6 +45,8 @@ class SUIT_ViewWindow;
 class VISU_Actor;
 class SVTK_ViewWindow;
 class SPlot2d_Viewer;
+class SPlot2d_Curve;
+class Plot2d_ViewFrame;
 class CAM_Module;
 class LightApp_SelectionMgr;
 class SalomeApp_Study;
@@ -178,6 +180,12 @@ namespace VISU {
   void                                 CreatePlot( SalomeApp_Module* theModule,
                                                   _PTR(SObject) theSobj );
 
+  void                                 UpdateCurve( VISU::Curve_i*,
+                                                   Plot2d_ViewFrame* frame,
+                                                   SPlot2d_Curve*,
+                                                   int theDisplaying );
+  //parameter frame may be 0, in this case there is only update without display/erase 
+
   // Others
   void CreateMesh (const SalomeApp_Module* theModule,
                   const Handle(SALOME_InteractiveObject)& theIO);