Salome HOME
allow actor presentation modification from PyQt modules
authorPaul RASCLE <paul.rascle@edf.fr>
Wed, 22 Mar 2017 15:56:47 +0000 (16:56 +0100)
committerPaul RASCLE <paul.rascle@edf.fr>
Wed, 22 Mar 2017 15:56:47 +0000 (16:56 +0100)
src/SMESH_SWIG_WITHIHM/libSMESH_Swig.cxx
src/SMESH_SWIG_WITHIHM/libSMESH_Swig.h
src/SMESH_SWIG_WITHIHM/libSMESH_Swig.i

index f356bd9ba0666a8df044fe52c23bde4ba552f706..e0d44ec30fb3eaafeeebaae5b179c4311782ea0a 100644 (file)
@@ -610,6 +610,149 @@ const char* SMESH_Swig::AddSubMeshOnShape(const char* theMeshEntry,
   return "";
 }
 
+/*!
+  \brief Gets window with specified identifier
+  \internal
+  \param id window identifier
+  \return pointer on the window
+*/
+
+SUIT_ViewWindow* getWnd( const int id )
+{
+  SUIT_ViewWindow* resWnd = 0;
+  SUIT_Session* aSession          = SUIT_Session::session();
+  SUIT_Application* anApplication = aSession->activeApplication();
+  SalomeApp_Application* app    = dynamic_cast<SalomeApp_Application*>(anApplication);
+  if ( app ) {
+    ViewManagerList vmlist = app->viewManagers();
+    foreach( SUIT_ViewManager* vm, vmlist ) {
+      QVector<SUIT_ViewWindow*> vwlist = vm->getViews();
+      foreach ( SUIT_ViewWindow* vw, vwlist ) {
+        if ( id == vw->getId() ) {
+          resWnd = vw;
+          break;
+        }
+      }
+    }
+  }
+  return resWnd;
+}
+
+
+actorAspect SMESH_Swig::GetActorAspect( const char* Mesh_Entry, int viewId )
+{
+  class TGetActorAspect: public SALOME_Event
+  {
+  public:
+    typedef actorAspect TResult;
+    TResult myResult;
+    const char* _entry;
+    int _wid;
+    TGetActorAspect( const char* Mesh_Entry, int viewId )
+    {
+      _entry = Mesh_Entry;
+      _wid = viewId;
+    }
+    virtual void Execute()
+    {
+      SMESH_Actor* anActor;
+      if (_wid)
+        {
+          SUIT_ViewWindow* w = getWnd(_wid);
+          anActor = SMESH::FindActorByEntry( w, _entry );
+        }
+      else
+        anActor = SMESH::FindActorByEntry( _entry );
+      if ( !anActor )
+        {
+          MESSAGE("GetActorAspect: no actor corresponding to: " << _entry);
+          return;
+        }
+      anActor->GetSufaceColor(myResult.surfaceColor.r,
+                              myResult.surfaceColor.g,
+                              myResult.surfaceColor.b,
+                              myResult.surfaceColor.delta);
+      anActor->GetVolumeColor(myResult.volumeColor.r,
+                              myResult.volumeColor.g,
+                              myResult.volumeColor.b,
+                              myResult.volumeColor.delta);
+      anActor->GetEdgeColor(myResult.edgeColor.r,
+                            myResult.edgeColor.g,
+                            myResult.edgeColor.b);
+      anActor->GetNodeColor(myResult.nodeColor.r,
+                            myResult.nodeColor.g,
+                            myResult.nodeColor.b);
+      myResult.opacity= anActor->GetOpacity();
+      MESSAGE("opacity: " << myResult.opacity);
+    }
+  };
+
+  return ProcessEvent(new TGetActorAspect( Mesh_Entry, viewId));
+}
+
+void SMESH_Swig::SetActorAspect( const actorAspect& actorPres, const char* Mesh_Entry, int viewId )
+{
+  class TSetActorAspect: public SALOME_Event
+  {
+  public:
+    const char* _entry;
+    actorAspect _actorPres;
+    int _wid;
+    TSetActorAspect(const actorAspect& actorPres, const char* Mesh_Entry, int viewId )
+    {
+      _entry = Mesh_Entry;
+      _actorPres = actorPres;
+      _wid = viewId;
+    }
+    virtual void Execute()
+    {
+      SMESH_Actor* anActor;
+      if (_wid)
+        {
+          SUIT_ViewWindow* w = getWnd(_wid);
+          anActor = SMESH::FindActorByEntry( w, _entry );
+        }
+      else
+        anActor = SMESH::FindActorByEntry( _entry );
+      if ( !anActor )
+        {
+          MESSAGE("SetActorAspect: no actor corresponding to: " << _entry);
+          return;
+        }
+      anActor->SetSufaceColor(_actorPres.surfaceColor.r,
+                              _actorPres.surfaceColor.g,
+                              _actorPres.surfaceColor.b,
+                              _actorPres.surfaceColor.delta);
+      anActor->SetVolumeColor(_actorPres.volumeColor.r,
+                              _actorPres.volumeColor.g,
+                              _actorPres.volumeColor.b,
+                              _actorPres.volumeColor.delta);
+      anActor->SetEdgeColor(_actorPres.edgeColor.r,
+                            _actorPres.edgeColor.g,
+                            _actorPres.edgeColor.b);
+      anActor->SetNodeColor(_actorPres.nodeColor.r,
+                            _actorPres.nodeColor.g,
+                            _actorPres.nodeColor.b);
+      anActor->SetOpacity(_actorPres.opacity);
+      if (_wid)
+        {
+          SUIT_ViewWindow* w = getWnd(_wid);
+          w->repaint();
+        }
+      else
+        {
+          SUIT_Session* aSession          = SUIT_Session::session();
+          SUIT_Application* anApplication = aSession->activeApplication();
+          SalomeApp_Application* anApp    = dynamic_cast<SalomeApp_Application*>(anApplication);
+          SUIT_ViewManager* vman          = anApp->getViewManager(VTKViewer_Viewer::Type(),true);
+          vman->getActiveView()->repaint();
+        }
+    }
+  };
+
+  ProcessVoidEvent(new TSetActorAspect(actorPres, Mesh_Entry, viewId));
+}
+
 void SMESH_Swig::CreateAndDisplayActor( const char* Mesh_Entry )
 {
   //  SMESH_Actor* Mesh = smeshGUI->ReadScript(aM);
index c6c948fcf37e2b2b41db4b90d98f1a9b1183f225..86682ff5b79baa3465050fe6d74d9862fefae85e 100644 (file)
@@ -58,6 +58,37 @@ enum
     Ball       = BallSelection
   };
 
+typedef struct
+{
+  double r, g, b;
+  int delta;
+} surfaceColorStruct;
+
+typedef struct
+{
+  double r, g, b;
+  int delta;
+} volumeColorStruct;
+
+typedef struct
+{
+  double r, g, b;
+} edgeColorStruct;
+
+typedef struct
+{
+  double r, g, b;
+} nodeColorStruct;
+
+struct actorAspect
+{
+  surfaceColorStruct surfaceColor;
+  volumeColorStruct volumeColor;
+  edgeColorStruct edgeColor;
+  nodeColorStruct nodeColor;
+  double opacity;
+};
+
 class SMESH_SWIG_EXPORT SMESH_Swig
 {
 public:
@@ -94,6 +125,9 @@ public:
    */
   void                       SetMeshIcon( const char*, const bool, const bool );
 
+  actorAspect                GetActorAspect(const char* Mesh_Entry, int viewId = 0 );
+  void                       SetActorAspect( const actorAspect& actorPres, const char* Mesh_Entry, int viewId = 0  );
+
   // --------------------- for the test purposes -----------------------
   int  getSelectionMode();
   void select( const char *id, std::vector<int> ids, bool append = false );
index 73c08a5f1efc1faa930b6784887641c84a937496..ac732d4672e8f64d8626a71b65cd20528cbd8f98 100644 (file)
@@ -68,6 +68,37 @@ enum
     Ball
   };
 
+typedef struct
+{
+  double r, g, b;
+  int delta;
+} surfaceColorStruct;
+
+typedef struct
+{
+  double r, g, b;
+  int delta;
+} volumeColorStruct;
+
+typedef struct
+{
+  double r, g, b;
+} edgeColorStruct;
+
+typedef struct
+{
+  double r, g, b;
+} nodeColorStruct;
+
+struct actorAspect
+{
+  surfaceColorStruct surfaceColor;
+  volumeColorStruct volumeColor;
+  edgeColorStruct edgeColor;
+  nodeColorStruct nodeColor;
+  double opacity;
+};
+
 class SMESH_Swig
 {
  public:
@@ -97,6 +128,9 @@ class SMESH_Swig
   void CreateAndDisplayActor( const char* Mesh_Entry );
   void EraseActor( const char* Mesh_Entry, const bool allViewers = false );
 
+  actorAspect GetActorAspect(const char* Mesh_Entry, int viewId = 0 );
+  void SetActorAspect( const actorAspect& actorPres, const char* Mesh_Entry, int viewId = 0 );
+
   // --------------------- for the test purposes -----------------------
   int  getSelectionMode();
   void select( const char *id, std::vector<int> ids, bool append = false );