Salome HOME
Merge from V6_main_20120808 08Aug12
[modules/geom.git] / src / OBJECT / GEOM_Actor.h
1 // Copyright (C) 2007-2012  CEA/DEN, EDF R&D, OPEN CASCADE
2 //
3 // Copyright (C) 2003-2007  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.salome-platform.org/ or email : webmaster.salome@opencascade.com
21 //
22
23 //  GEOM OBJECT : interactive object for Geometry entities visualization
24 //  File   : GEOM_Actor.h
25 //  Author : Christophe ATTANASIO
26 //  Module : GEOM
27 //  $Header$
28 //
29 #ifndef GEOM_ACTOR_H
30 #define GEOM_ACTOR_H
31
32 #include "GEOM_OBJECT_defs.hxx"
33 #include "GEOM_SmartPtr.h"
34
35 #include <SALOME_Actor.h>
36
37 #include <TopoDS_Shape.hxx>
38 #include <vtkSmartPointer.h>
39
40 class vtkCamera;
41
42 class GEOM_VertexSource;
43 typedef GEOM_SmartPtr<GEOM_VertexSource> PVertexSource;
44
45 class GEOM_EdgeSource;
46 typedef GEOM_SmartPtr<GEOM_EdgeSource> PEdgeSource;
47
48 class GEOM_WireframeFace;
49 typedef GEOM_SmartPtr<GEOM_WireframeFace> PWFaceSource;
50
51 class GEOM_ShadingFace;
52 typedef GEOM_SmartPtr<GEOM_ShadingFace> PSFaceSource;
53
54 class vtkRenderer;
55
56 class vtkAppendPolyData;
57 typedef GEOM_SmartPtr<vtkAppendPolyData> PAppendFilter;
58
59 class GEOM_OBJECT_EXPORT GEOM_Actor: public SALOME_Actor
60 {
61 public:
62   vtkTypeMacro(GEOM_Actor,SALOME_Actor);
63   static GEOM_Actor* New();
64
65   void SetShape(const TopoDS_Shape& theShape,
66                 float theDeflection,
67                 bool theIsVector = false);
68
69   void SetDeflection(float theDeflection);
70   float GetDeflection() const{ return myDeflection;}
71
72   void AddToRender(vtkRenderer* theRenderer);
73   void RemoveFromRender(vtkRenderer* theRenderer);
74
75   enum EDisplayMode{ eWireframe, eShading, eShadingWithEdges = eShading + 2 };
76
77 /*   void SetDisplayMode(EDisplayMode theMode);  */
78 /*   EDisplayMode GetDisplayMode() const { return myDisplayMode;}  */
79
80   void SetSelected(bool theIsSelected);
81   bool IsSelected() const { return myIsSelected;}
82
83   // OLD METHODS
84   // Properties
85   void SetHighlightProperty(vtkProperty* Prop);
86   void SetWireframeProperty(vtkProperty* Prop);
87   void SetShadingProperty(vtkProperty* Prop);
88
89   vtkProperty* GetWireframeProperty();
90   vtkProperty* GetShadingProperty();
91
92   void setDeflection(double adef);
93   virtual void setDisplayMode(int thenewmode);
94
95   // Description:
96   // This causes the actor to be rendered. It, in turn, will render the actor's
97   // property and then mapper.
98   virtual void Render(vtkRenderer *, vtkMapper *);
99   // Description:
100   // Release any graphics resources that are being consumed by this actor.
101   // The parameter window could be used to determine which graphic
102   // resources to release.
103   void ReleaseGraphicsResources(vtkWindow *);
104   const TopoDS_Shape& getTopo();
105   void setInputShape(const TopoDS_Shape& ashape, double adef1,
106                      int imode, bool isVector = false);
107   double getDeflection();
108   double isVector();
109
110   // SubShape
111   void SubShapeOn();
112   void SubShapeOff();
113
114   // Highlight
115   virtual void highlight(bool theHighlight);
116   virtual bool hasHighlight() { return true; }
117
118   void ShallowCopy(vtkProp *prop);
119
120   // Opacity
121   void SetOpacity(vtkFloatingPointType opa);
122   vtkFloatingPointType GetOpacity();
123
124   // Color
125   void SetColor(vtkFloatingPointType r,vtkFloatingPointType g,vtkFloatingPointType b);
126   void GetColor(vtkFloatingPointType& r,vtkFloatingPointType& g,vtkFloatingPointType& b);
127
128   // Material
129   void SetMaterial(std::vector<vtkProperty*> theProps);
130   vtkProperty* GetMaterial();
131
132   virtual bool IsInfinitive();
133
134   // overloaded functions
135   //! To map current selection to VTK representation
136   virtual
137   void
138   Highlight(bool theHighlight);
139
140   //----------------------------------------------------------------------------
141   //! To process prehighlight (called from #SVTK_InteractorStyle)
142   virtual
143   bool
144   PreHighlight(vtkInteractorStyle* theInteractorStyle,
145                SVTK_SelectionEvent* theSelectionEvent,
146                bool theIsHighlight);
147
148   //! To process highlight (called from #SVTK_InteractorStyle)
149   virtual
150   bool
151   Highlight(vtkInteractorStyle* theInteractorStyle,
152             SVTK_SelectionEvent* theSelectionEvent,
153             bool theIsHighlight);
154
155   //! Visibility management
156   virtual
157   void
158   SetVisibility( int );
159
160   //! IsoLines management
161   // theNb[0] - number of U lines
162   // theNb[1] - number of V lines
163   virtual
164   void
165   SetNbIsos(const int theNb[2]);
166
167   virtual
168   void
169   GetNbIsos(int &theNbU,int &theNbV);
170   
171   virtual 
172   void SetIsosWidth(const int width);
173
174   int GetIsosWidth() const;
175
176   virtual void SetWidth(const int width);
177
178   int GetWidth() const;
179   
180   //! Vector mode management
181   virtual
182   void
183   SetVectorMode(const bool theMode);
184
185   virtual
186   bool
187   GetVectorMode();
188   
189   //! Edges in shading color management
190   void SetEdgesInShadingColor(vtkFloatingPointType r,vtkFloatingPointType g,vtkFloatingPointType b);
191
192   void
193   StoreIsoNumbers();
194
195   void
196   RestoreIsoNumbers();
197   
198   void
199   ResetIsoNumbers();
200
201 protected:
202   void SetModified();
203
204   void GetMatrix(vtkCamera* theCam, vtkMatrix4x4 *result);
205
206   void StoreBoundaryColors();
207   void RestoreBoundaryColors();
208
209   GEOM_Actor();
210   ~GEOM_Actor();
211
212 private:
213   TopoDS_Shape myShape;
214   int myNbIsos[2];
215   bool isOnlyVertex;
216
217   float myDeflection;
218   bool myIsForced;
219
220   //  EDisplayMode myDisplayMode;
221   bool myIsSelected;
222   bool myVectorMode;
223
224   PDeviceActor myVertexActor;
225   PVertexSource myVertexSource;
226
227   PDeviceActor myIsolatedEdgeActor;
228   PEdgeSource myIsolatedEdgeSource;
229
230   PDeviceActor myOneFaceEdgeActor;
231   PEdgeSource myOneFaceEdgeSource;
232
233   PDeviceActor mySharedEdgeActor;
234   PEdgeSource mySharedEdgeSource;
235
236   PDeviceActor myWireframeFaceActor;
237   PWFaceSource myWireframeFaceSource;
238
239   PDeviceActor myShadingFaceActor;
240   PSFaceSource myShadingFaceSource;
241
242   PDeviceActor myHighlightActor;
243   vtkSmartPointer<vtkProperty>  myHighlightProp;
244   vtkSmartPointer<vtkProperty>  myPreHighlightProp;
245   vtkSmartPointer<vtkProperty>  myShadingFaceProp;
246
247   PAppendFilter myAppendFilter;
248   PPolyGeomPainterDataMapper myPolyDataMapper;
249
250   virtual void SetMapper(vtkMapper*);
251
252   GEOM_Actor(const GEOM_Actor&);
253   void operator=(const GEOM_Actor&);
254
255   vtkFloatingPointType myEdgesInWireframeColor[3];
256   vtkFloatingPointType myEdgesInShadingColor[3];
257 };
258
259 #endif //GEOM_ACTOR_H
260
261