Salome HOME
GPUSPHGUI: show a custom control by setting a functor
[modules/smesh.git] / src / OBJECT / SMESH_Actor.cxx
index 48ad71c59cebebd0e143981c170ac47fb84ebb44..dac3d4a0d6418b22e1e8afcf6d0bd3ef55b6ca24 100644 (file)
@@ -804,12 +804,20 @@ bool SMESH_ActorDef::GetFacesOrientation3DVectors()
 }
 
 
+void SMESH_ActorDef::SetControl(SMESH::Controls::FunctorPtr theFunctor)
+{
+  myFunctor = theFunctor;
+  if ( !theFunctor )
+    SetControlMode( eNone, true );
+  else
+    SetControlMode( eCustomControl, true );
+}
+
 void SMESH_ActorDef::SetControlMode(eControl theMode)
 {
   SetControlMode(theMode,true);
 }
 
-
 void SMESH_ActorDef::SetControlMode( eControl theMode, bool theCheckEntityMode )
 {
   vtkLookupTable* lookupTable = static_cast<vtkLookupTable*>(myScalarBarActor->GetLookupTable());
@@ -844,11 +852,9 @@ void SMESH_ActorDef::SetControlMode( eControl theMode, bool theCheckEntityMode )
       break;
     }
     case eLength2D:
-    {
       myFunctor.reset(new SMESH::Controls::Length2D());
       myControlActor = my2DActor;
       break;
-    }
     case eFreeBorders:
       myFunctor.reset(new SMESH::Controls::FreeBorders());
       myControlActor = my1DActor;
@@ -958,6 +964,14 @@ void SMESH_ActorDef::SetControlMode( eControl theMode, bool theCheckEntityMode )
       myControlActor = my3DActor;
       break;
     }
+    case eDeflection2D:
+    {
+      SMESH::Controls::Deflection2D* aControl = new SMESH::Controls::Deflection2D();
+      aControl->SetPrecision( myControlsPrecision );
+      myFunctor.reset( aControl );
+      myControlActor = my2DActor;
+      break;
+    }
     case eBareBorderVolume:
     {
       myFunctor.reset(new SMESH::Controls::BareBorderVolume());
@@ -1000,6 +1014,19 @@ void SMESH_ActorDef::SetControlMode( eControl theMode, bool theCheckEntityMode )
       myControlActor = myNodeActor;
       break;
     }
+    case eCustomControl:
+    {
+      if ( !myFunctor )
+        return;
+      switch ( myFunctor->GetType() ) {
+      case SMDSAbs_Node          : myControlActor = myNodeActor; break;
+      case SMDSAbs_Edge          : myControlActor = my1DActor;   break;
+      case SMDSAbs_Face          : myControlActor = my2DActor;   break;
+      case SMDSAbs_Volume        : myControlActor = my3DActor;   break;
+      default                    : return;
+      }
+      break;
+    }
     default:
       return;
     }
@@ -1432,6 +1459,10 @@ double* SMESH_ActorDef::GetNodeCoord(int theObjID)
   return myPickableActor->GetNodeCoord(theObjID);
 }
 
+int SMESH_ActorDef::GetNodeVtkId(int theObjID)
+{
+  return myPickableActor->GetNodeVtkId(theObjID);
+}
 
 int SMESH_ActorDef::GetElemObjId(int theVtkID)
 {