Salome HOME
2fad89f01d30509d926bf14ab3e29f62aaf5115e
[modules/smesh.git] / src / OBJECT / SMESH_Actor.h
1 //  SMESH OBJECT : interactive object for SMESH visualization
2 //
3 //  Copyright (C) 2003  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
4 //  CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS 
5 // 
6 //  This library is free software; you can redistribute it and/or 
7 //  modify it under the terms of the GNU Lesser General Public 
8 //  License as published by the Free Software Foundation; either 
9 //  version 2.1 of the License. 
10 // 
11 //  This library is distributed in the hope that it will be useful, 
12 //  but WITHOUT ANY WARRANTY; without even the implied warranty of 
13 //  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
14 //  Lesser General Public License for more details. 
15 // 
16 //  You should have received a copy of the GNU Lesser General Public 
17 //  License along with this library; if not, write to the Free Software 
18 //  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA 
19 // 
20 //  See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org 
21 //
22 //
23 //
24 //  File   : SMESH_Actor.h
25 //  Author : Nicolas REJNERI
26 //  Module : SMESH
27 //  $Header$
28
29 #ifndef SMESH_ACTOR_H
30 #define SMESH_ACTOR_H
31
32 #include "SALOME_Actor.h"
33 #include "SMESH_Object.h"
34
35 class vtkProperty;
36 class vtkShrinkFilter;
37 class vtkPolyDataMapper;
38 class vtkUnstructuredGrid;
39 class vtkMergeFilter;
40 class vtkPolyData;
41
42 class vtkMapper;
43 class vtkActor2D;
44 class vtkMaskPoints;
45 class vtkCellCenters;
46 class vtkLabeledDataMapper;
47 class vtkSelectVisiblePoints;
48
49 class vtkScalarBarActor;
50 class vtkLookupTable;
51
52 class vtkPlane;
53 class vtkImplicitBoolean;
54
55 class vtkTimeStamp;
56
57 class SMESH_DeviceActor;
58
59
60 class SMESH_Actor : public SALOME_Actor{
61   friend class SMESH_VisualObj;
62
63  public:
64   vtkTypeMacro(SMESH_Actor,SALOME_Actor);
65   static SMESH_Actor* New(TVisualObjPtr theVisualObj, 
66                           const char* theEntry, 
67                           const char* theName,
68                           int theIsClear);
69   
70   virtual void ReleaseGraphicsResources(vtkWindow *renWin);
71   virtual int RenderOpaqueGeometry(vtkViewport *viewport);
72   virtual int RenderTranslucentGeometry(vtkViewport *viewport);
73   virtual void Render(vtkRenderer *ren);
74
75   virtual void AddToRender(vtkRenderer* theRenderer); 
76   virtual void RemoveFromRender(vtkRenderer* theRenderer);
77
78   virtual bool hasHighlight() { return true; }  
79   virtual void highlight(bool theHighlight);  
80   virtual void SetPreSelected(bool thePreselect = false);
81
82   virtual bool IsInfinitive();  
83
84   virtual void SetOpacity(float theValue);
85   virtual float GetOpacity();
86
87   void SetSufaceColor(float r,float g,float b);
88   void GetSufaceColor(float& r,float& g,float& b);
89
90   void SetBackSufaceColor(float r,float g,float b);
91   void GetBackSufaceColor(float& r,float& g,float& b);
92
93   void SetEdgeColor(float r,float g,float b);
94   void GetEdgeColor(float& r,float& g,float& b);
95
96   void SetNodeColor(float r,float g,float b);
97   void GetNodeColor(float& r,float& g,float& b);
98
99   void SetHighlightColor(float r,float g,float b);
100   void GetHighlightColor(float& r,float& g,float& b);
101
102   void SetPreHighlightColor(float r,float g,float b);
103   void GetPreHighlightColor(float& r,float& g,float& b);
104  
105   float GetLineWidth();
106   void SetLineWidth(float theVal);
107
108   void SetNodeSize(float size) ;
109   float GetNodeSize() ;
110
111   virtual int GetNodeObjId(int theVtkID);
112   virtual float* GetNodeCoord(int theObjID);
113
114   virtual int GetElemObjId(int theVtkID);
115   virtual vtkCell* GetElemCell(int theObjID);
116
117   virtual int GetObjDimension( const int theObjId );
118
119   virtual void SetVisibility(int theMode);
120   void SetVisibility(int theMode, bool theIsUpdateRepersentation);
121
122   enum EReperesent { ePoint, eEdge, eSurface};
123   virtual void SetRepresentation(int theMode);
124   void SetPointRepresentation(bool theIsPointsVisible);
125   bool GetPointRepresentation();
126
127   virtual float* GetBounds();
128   virtual void SetTransform(SALOME_Transform* theTransform); 
129
130   vtkUnstructuredGrid* GetUnstructuredGrid();
131   virtual vtkDataSet* GetInput();
132   virtual vtkMapper* GetMapper();
133
134   virtual float GetShrinkFactor();
135   virtual void  SetShrinkFactor(float value );
136
137   virtual bool IsShrunkable() { return myIsShrinkable;}
138   virtual bool IsShrunk() { return myIsShrunk;}
139   virtual void SetShrink(); 
140   virtual void UnShrink(); 
141
142   void SetPointsLabeled(bool theIsPointsLabeled);
143   bool GetPointsLabeled(){ return myIsPointsLabeled;}
144
145   void SetCellsLabeled(bool theIsCellsLabeled);
146   bool GetCellsLabeled(){ return myIsCellsLabeled;}
147
148   enum eControl{eNone, eLengthEdges, eFreeBorders, eFreeEdges, eMultiConnection, 
149                 eArea, eTaper, eAspectRatio, eMinimumAngle, eWarping, eSkew,
150                 eAspectRatio3D};
151   void SetControlMode(eControl theMode);
152   eControl GetControlMode(){ return myColorMode;}
153
154   enum e1DControl{e1DNone, e1DColored, e1DHighlited};
155   e1DControl Get1DControlMode(){ return my1DColorMode;}
156
157   vtkScalarBarActor* GetScalarBarActor(){ return myScalarBarActor;}
158
159   void SetPlaneParam(float theDir[3], float theDist, vtkPlane* thePlane);
160   void GetPlaneParam(float theDir[3], float& theDist, vtkPlane* thePlane);
161
162   vtkImplicitBoolean* GetPlaneContainer(); 
163
164   TVisualObjPtr GetObject() { return myVisualObj;}
165
166   void SetControlsPrecision( const long p ) { myControlsPrecision = p; }
167   long GetControlsPrecision() const { return myControlsPrecision; }
168
169  protected:
170   TVisualObjPtr myVisualObj;
171   vtkTimeStamp* myTimeStamp;
172
173   vtkScalarBarActor* myScalarBarActor;
174   vtkLookupTable* myLookupTable;
175
176   vtkProperty* mySurfaceProp;
177   vtkProperty* myBackSurfaceProp;
178   vtkProperty* myEdgeProp;
179   vtkProperty* myNodeProp;
180
181   SMESH_DeviceActor* myBaseActor;
182   SMESH_DeviceActor* myNodeActor;
183   SMESH_DeviceActor* myPickableActor;
184
185   vtkProperty* myHighlightProp;
186   vtkProperty* myPreselectProp;
187   SMESH_DeviceActor* myHighlitableActor;
188   SMESH_DeviceActor* myNodeHighlitableActor;
189
190   eControl myColorMode;
191   SMESH_DeviceActor* my2DActor;
192   SMESH_DeviceActor* my3DActor;
193   SMESH_DeviceActor* myControlActor;
194
195   e1DControl my1DColorMode;
196   vtkProperty* my1DProp;
197   SMESH_DeviceActor* my1DActor;
198   vtkProperty* my1DExtProp;
199   SMESH_DeviceActor* my1DExtActor;
200
201   bool myIsPointsVisible;
202
203   bool myIsShrinkable;
204   bool myIsShrunk;
205   
206   bool myIsPointsLabeled;
207   vtkUnstructuredGrid* myPointsNumDataSet;
208   vtkActor2D *myPointLabels;
209   vtkMaskPoints* myPtsMaskPoints;
210   vtkLabeledDataMapper* myPtsLabeledDataMapper;
211   vtkSelectVisiblePoints* myPtsSelectVisiblePoints;
212
213   bool myIsCellsLabeled;
214   vtkUnstructuredGrid* myCellsNumDataSet;
215   vtkActor2D *myCellsLabels;
216   vtkMaskPoints* myClsMaskPoints;
217   vtkCellCenters* myCellCenters;
218   vtkLabeledDataMapper* myClsLabeledDataMapper;
219   vtkSelectVisiblePoints* myClsSelectVisiblePoints;
220
221   vtkImplicitBoolean* myImplicitBoolean;
222
223   long myControlsPrecision;
224
225   SMESH_Actor();
226   ~SMESH_Actor();
227
228   bool Init(TVisualObjPtr theVisualObj, 
229             const char* theEntry, 
230             const char* theName,
231             int theIsClear);
232
233   void SetIsShrunkable(bool theShrunkable);
234   void UpdateHighlight();
235   void Update();
236
237  private:
238   // hide the two parameter Render() method from the user and the compiler.
239   virtual void Render(vtkRenderer *, vtkMapper *) {};
240   virtual void ShallowCopy(vtkProp *prop);
241   virtual void SetMapper(vtkMapper *);
242   static SMESH_Actor* New();
243
244   // Not implemented.
245   SMESH_Actor(const SMESH_Actor&);  
246   void operator=(const SMESH_Actor&);
247 };
248
249
250 #endif //SMESH_ACTOR_H