Salome HOME
Update copyright info (2010->2011)
[modules/smesh.git] / src / OBJECT / SMESH_ActorDef.h
index 943fc5ee542ae5875c90f1f6d7bb3103f2b6b275..b13cf6d729eb136952754a50980b1e7e4fc7807c 100644 (file)
@@ -1,37 +1,58 @@
-//  SMESH OBJECT : interactive object for SMESH visualization
+//  Copyright (C) 2007-2011  CEA/DEN, EDF R&D, OPEN CASCADE
+//
+//  Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
+//  CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
 //
-//  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 
+//  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.salome-platform.org/ or email : webmaster.salome@opencascade.com
+//
+
+//  SMESH OBJECT : interactive object for SMESH visualization
 //  File   : SMESH_ActorDef.h
 //  Author : Nicolas REJNERI
 //  Module : SMESH
-//  $Header$
-
+//
 #ifndef SMESH_ACTORDEF_H
 #define SMESH_ACTORDEF_H
 
 #include "SMESH_Actor.h"
 #include "SMESH_Object.h"
 
+#include <vtkSmartPointer.h>
+
+template <class T>
+class TVTKSmartPtr: public vtkSmartPointer<T>
+{
+public:
+  TVTKSmartPtr() {}
+  TVTKSmartPtr(T* r, bool theIsOwner = false): vtkSmartPointer<T>(r) { 
+    if(r && theIsOwner) 
+      r->Delete();
+  }
+  TVTKSmartPtr& operator()(T* r, bool theIsOwner = false){ 
+    vtkSmartPointer<T>::operator=(r); 
+    if(r && theIsOwner) 
+      r->Delete();
+    return *this;
+  }
+  TVTKSmartPtr& operator=(T* r){ vtkSmartPointer<T>::operator=(r); return *this;}
+  T* Get() const { return this->GetPointer();}
+};
+
+
 class vtkProperty;
 class vtkShrinkFilter;
 class vtkPolyDataMapper;
@@ -42,7 +63,6 @@ class vtkPolyData;
 class vtkMapper;
 class vtkActor2D;
 class vtkMaskPoints;
-class vtkCellCenters;
 class vtkLabeledDataMapper;
 class vtkSelectVisiblePoints;
 
@@ -54,10 +74,13 @@ class vtkImplicitBoolean;
 
 class vtkTimeStamp;
 
+class VTKViewer_CellCenters;
+
 class SMESH_DeviceActor;
 
 
-class SMESH_ActorDef : public SMESH_Actor{
+class SMESH_ActorDef : public SMESH_Actor
+{
   friend class SMESH_VisualObj;
   friend class SMESH_Actor;
 
@@ -78,35 +101,38 @@ class SMESH_ActorDef : public SMESH_Actor{
 
   virtual bool IsInfinitive();  
 
-  virtual void SetOpacity(float theValue);
-  virtual float GetOpacity();
+  virtual void SetOpacity(vtkFloatingPointType theValue);
+  virtual vtkFloatingPointType GetOpacity();
+
+  virtual void SetSufaceColor(vtkFloatingPointType r,vtkFloatingPointType g,vtkFloatingPointType b);
+  virtual void GetSufaceColor(vtkFloatingPointType& r,vtkFloatingPointType& g,vtkFloatingPointType& b);
 
-  virtual void SetSufaceColor(float r,float g,float b);
-  virtual void GetSufaceColor(float& r,float& g,float& b);
+  virtual void SetBackSufaceColor(vtkFloatingPointType r,vtkFloatingPointType g,vtkFloatingPointType b);
+  virtual void GetBackSufaceColor(vtkFloatingPointType& r,vtkFloatingPointType& g,vtkFloatingPointType& b);
 
-  virtual void SetBackSufaceColor(float r,float g,float b);
-  virtual void GetBackSufaceColor(float& r,float& g,float& b);
+  virtual void SetEdgeColor(vtkFloatingPointType r,vtkFloatingPointType g,vtkFloatingPointType b);
+  virtual void GetEdgeColor(vtkFloatingPointType& r,vtkFloatingPointType& g,vtkFloatingPointType& b);
 
-  virtual void SetEdgeColor(float r,float g,float b);
-  virtual void GetEdgeColor(float& r,float& g,float& b);
+  virtual void SetNodeColor(vtkFloatingPointType r,vtkFloatingPointType g,vtkFloatingPointType b);
+  virtual void GetNodeColor(vtkFloatingPointType& r,vtkFloatingPointType& g,vtkFloatingPointType& b);
 
-  virtual void SetNodeColor(float r,float g,float b);
-  virtual void GetNodeColor(float& r,float& g,float& b);
+  virtual void Set0DColor(vtkFloatingPointType r,vtkFloatingPointType g,vtkFloatingPointType b);
+  virtual void Get0DColor(vtkFloatingPointType& r,vtkFloatingPointType& g,vtkFloatingPointType& b);
 
-  virtual void SetHighlightColor(float r,float g,float b);
-  virtual void GetHighlightColor(float& r,float& g,float& b);
+  virtual void SetHighlightColor(vtkFloatingPointType r,vtkFloatingPointType g,vtkFloatingPointType b);
+  virtual void GetHighlightColor(vtkFloatingPointType& r,vtkFloatingPointType& g,vtkFloatingPointType& b);
 
-  virtual void SetPreHighlightColor(float r,float g,float b);
-  virtual void GetPreHighlightColor(float& r,float& g,float& b);
+  virtual void SetPreHighlightColor(vtkFloatingPointType r,vtkFloatingPointType g,vtkFloatingPointType b);
+  virtual void GetPreHighlightColor(vtkFloatingPointType& r,vtkFloatingPointType& g,vtkFloatingPointType& b);
  
-  virtual float GetLineWidth();
-  virtual void SetLineWidth(float theVal);
+  virtual vtkFloatingPointType GetLineWidth();
+  virtual void SetLineWidth(vtkFloatingPointType theVal);
 
-  virtual void SetNodeSize(float size) ;
-  virtual float GetNodeSize() ;
+  virtual void Set0DSize(vtkFloatingPointType size);
+  virtual vtkFloatingPointType Get0DSize();
 
   virtual int GetNodeObjId(int theVtkID);
-  virtual float* GetNodeCoord(int theObjID);
+  virtual vtkFloatingPointType* GetNodeCoord(int theObjID);
 
   virtual int GetElemObjId(int theVtkID);
   virtual vtkCell* GetElemCell(int theObjID);
@@ -124,15 +150,15 @@ class SMESH_ActorDef : public SMESH_Actor{
   virtual void SetPointRepresentation(bool theIsPointsVisible);
   virtual bool GetPointRepresentation();
 
-  virtual float* GetBounds();
-  virtual void SetTransform(SALOME_Transform* theTransform); 
+  virtual vtkFloatingPointType* GetBounds();
+  virtual void SetTransform(VTKViewer_Transform* theTransform); 
 
   virtual vtkUnstructuredGrid* GetUnstructuredGrid();
   virtual vtkDataSet* GetInput();
   virtual vtkMapper* GetMapper();
 
-  virtual float GetShrinkFactor();
-  virtual void SetShrinkFactor(float theValue);
+  virtual vtkFloatingPointType GetShrinkFactor();
+  virtual void SetShrinkFactor(vtkFloatingPointType theValue);
 
   virtual bool IsShrunkable() { return myIsShrinkable;}
   virtual bool IsShrunk() { return myIsShrunk;}
@@ -145,22 +171,50 @@ class SMESH_ActorDef : public SMESH_Actor{
   virtual void SetCellsLabeled(bool theIsCellsLabeled);
   virtual bool GetCellsLabeled(){ return myIsCellsLabeled;}
 
+  virtual void SetFacesOriented(bool theIsFacesOriented);
+  virtual bool GetFacesOriented();
+
+  virtual void SetFacesOrientationColor(vtkFloatingPointType theColor[3]);
+  virtual void GetFacesOrientationColor(vtkFloatingPointType theColor[3]);
+
+  virtual void SetFacesOrientationScale(vtkFloatingPointType theScale);
+  virtual vtkFloatingPointType GetFacesOrientationScale();
+
+  virtual void SetFacesOrientation3DVectors(bool theState);
+  virtual bool GetFacesOrientation3DVectors();
+
   virtual void SetControlMode(eControl theMode);
   virtual eControl GetControlMode(){ return myControlMode;}
 
   virtual vtkScalarBarActor* GetScalarBarActor(){ return myScalarBarActor;}
 
-  virtual void SetPlaneParam(float theDir[3], float theDist, vtkPlane* thePlane);
-  virtual void GetPlaneParam(float theDir[3], float& theDist, vtkPlane* thePlane);
+  virtual void SetPlaneParam(vtkFloatingPointType theDir[3], vtkFloatingPointType theDist, vtkPlane* thePlane);
+  virtual void GetPlaneParam(vtkFloatingPointType theDir[3], vtkFloatingPointType& theDist, vtkPlane* thePlane);
 
-  virtual vtkImplicitBoolean* GetPlaneContainer(); 
+  virtual void RemoveAllClippingPlanes();
+  virtual vtkIdType GetNumberOfClippingPlanes();
+  virtual vtkPlane* GetClippingPlane(vtkIdType theID);
+  virtual vtkIdType AddClippingPlane(vtkPlane* thePlane); 
 
   virtual TVisualObjPtr GetObject() { return myVisualObj;}
 
   virtual void SetControlsPrecision( const long p ) { myControlsPrecision = p; }
   virtual long GetControlsPrecision() const { return myControlsPrecision; }
 
+  virtual void UpdateScalarBar();
+
+
+  virtual void SetQuadratic2DRepresentation(EQuadratic2DRepresentation);
+  virtual EQuadratic2DRepresentation GetQuadratic2DRepresentation();
+  
+  virtual void SetMarkerStd( VTK::MarkerType, VTK::MarkerScale );
+  virtual void SetMarkerTexture( int, VTK::MarkerTexture );
+
  protected:
+  void SetControlMode(eControl theMode, bool theCheckEntityMode);
+  void SetImplicitFunctionUsed(bool theIsImplicitFunctionUsed);
+  bool IsImplicitFunctionUsed() const;
+
   TVisualObjPtr myVisualObj;
   vtkTimeStamp* myTimeStamp;
 
@@ -179,19 +233,29 @@ class SMESH_ActorDef : public SMESH_Actor{
   vtkProperty* myHighlightProp;
   vtkProperty* myPreselectProp;
   SMESH_DeviceActor* myHighlitableActor;
-  SMESH_DeviceActor* myNodeHighlitableActor;
 
   eControl myControlMode;
+  vtkProperty* my2DExtProp;
   SMESH_DeviceActor* my2DActor;
+  SMESH_DeviceActor* my2DExtActor;
   SMESH_DeviceActor* my3DActor;
   SMESH_DeviceActor* myControlActor;
 
+  vtkProperty* myNodeExtProp;
+  SMESH_DeviceActor* myNodeExtActor;
+
   vtkProperty* my1DProp;
   SMESH_DeviceActor* my1DActor;
   vtkProperty* my1DExtProp;
   SMESH_DeviceActor* my1DExtActor;
 
+  vtkProperty* my0DProp;
+  SMESH_DeviceActor* my0DActor;
+  vtkProperty* my0DExtProp;
+  SMESH_DeviceActor* my0DExtActor;
+
   unsigned int myEntityMode;
+  unsigned int myEntityState;
   bool myIsPointsVisible;
 
   bool myIsShrinkable;
@@ -208,21 +272,27 @@ class SMESH_ActorDef : public SMESH_Actor{
   vtkUnstructuredGrid* myCellsNumDataSet;
   vtkActor2D *myCellsLabels;
   vtkMaskPoints* myClsMaskPoints;
-  vtkCellCenters* myCellCenters;
+  VTKViewer_CellCenters* myCellCenters;
   vtkLabeledDataMapper* myClsLabeledDataMapper;
   vtkSelectVisiblePoints* myClsSelectVisiblePoints;
 
   vtkImplicitBoolean* myImplicitBoolean;
-
+  typedef TVTKSmartPtr<vtkPlane> TPlanePtr;
+  typedef std::vector<TPlanePtr> TCippingPlaneCont;
+  TCippingPlaneCont myCippingPlaneCont;
   long myControlsPrecision;
 
+  bool myIsFacesOriented;
+
+  VTK::MarkerTexture myMarkerTexture;
+
   SMESH_ActorDef();
   ~SMESH_ActorDef();
 
   bool Init(TVisualObjPtr theVisualObj, 
-           const char* theEntry, 
-           const char* theName,
-           int theIsClear);
+            const char* theEntry, 
+            const char* theName,
+            int theIsClear);
 
   void SetIsShrunkable(bool theShrunkable);
   void UpdateHighlight();