Salome HOME
4786236386c00237ea6f3d0f771c3dce526a4f93
[modules/gui.git] / src / VTKViewer / VTKViewer_Actor.h
1 // Copyright (C) 2007-2016  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, or (at your option) any later version.
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 //  SALOME OBJECT : implementation of interactive object visualization for OCC and VTK viewers
24 //  File   : SALOME_Actor.h
25 //  Author : Nicolas REJNERI
26
27 #ifndef VTKVIEVER_ACTOR_H
28 #define VTKVIEVER_ACTOR_H
29
30 #include "VTKViewer.h"
31
32 #include <string>
33 #include <vector>
34
35 #include <vtkLODActor.h>
36 #include <vtkProperty.h>
37
38 class vtkCell;
39 class vtkPointPicker;
40 class vtkCellPicker;
41 class vtkDataSet;
42 class vtkCamera;
43 class vtkProperty;
44 class vtkRenderer;
45 class vtkPassThroughFilter;
46
47 class VTKViewer_Transform;
48 class VTKViewer_GeometryFilter;
49 class VTKViewer_TransformFilter;
50
51 extern int VTKViewer_POINT_SIZE;
52 extern int VTKViewer_LINE_WIDTH;
53
54 namespace VTKViewer
55 {
56   namespace Representation
57   {
58     typedef int Type;
59     const Type Points = VTK_POINTS;
60     const Type Wireframe = VTK_WIREFRAME;
61     const Type Surface = VTK_SURFACE;
62     const Type Insideframe = Surface + 1;
63     const Type SurfaceWithEdges = Insideframe + 1;
64   }
65 }
66
67 #ifdef WIN32
68 #pragma warning ( disable:4251 )
69 #endif
70
71 /*! \class vtkLODActor
72  * \brief For more information see <a href="http://www.vtk.org/">VTK documentation</a>
73  */
74 class VTKVIEWER_EXPORT VTKViewer_Actor : public vtkLODActor 
75 {
76  public:
77   static VTKViewer_Actor* New();
78   
79   vtkTypeMacro(VTKViewer_Actor,vtkLODActor);
80
81   //----------------------------------------------------------------------------
82   //! Get its name
83   virtual 
84   const char* 
85   getName();
86
87   //! Name the #VTKViewer_Actor
88   virtual
89   void
90   setName(const char* theName);
91
92   //----------------------------------------------------------------------------
93   //! Change opacity
94   virtual
95   void
96   SetOpacity(double theOpacity);
97
98   //! Get current opacity
99   virtual
100   double 
101   GetOpacity();
102
103   //! Change color
104   virtual
105   void
106   SetColor(double r,
107            double g,
108            double b);
109
110   //! Get current color
111   virtual
112   void
113   GetColor(double& r,
114            double& g,
115            double& b);
116
117   //! Change color
118   virtual
119   void
120   SetColor(const double theRGB[3]);
121
122   //! Change material\r
123   virtual\r
124   void\r
125   SetMaterial(std::vector<vtkProperty*> theProps);
126
127   //! Get current front material\r
128   virtual\r
129   vtkProperty* \r
130   GetFrontMaterial();\r
131 \r
132   //! Get current back material\r
133   virtual\r
134   vtkProperty* \r
135   GetBackMaterial();
136
137   //----------------------------------------------------------------------------
138   // For selection mapping purpose
139   //! Maps VTK index of a node to corresponding object index
140   virtual
141   int 
142   GetNodeObjId(int theVtkID);
143
144   //! Get coordinates of a node for given object index
145   virtual
146   double*
147   GetNodeCoord(int theObjID);
148
149   //! Maps object index of a node to corresponding VTK index
150   virtual
151   int 
152   GetNodeVtkId(int theObjID);
153
154   //! Maps VTK index of a cell to corresponding object index
155   virtual 
156   int
157   GetElemObjId(int theVtkID);
158
159   //! Get corresponding #vtkCell for given object index
160   virtual
161   vtkCell* 
162   GetElemCell(int theObjID);
163
164   //----------------------------------------------------------------------------
165   //! Get dimension of corresponding mesh element
166   virtual
167   int
168   GetObjDimension( const int theObjId );
169
170   //! To insert some additional filters and then sets the given #vtkMapper
171   virtual
172   void
173   SetMapper(vtkMapper* theMapper); 
174
175   //! Allows to get initial #vtkDataSet
176   virtual
177   vtkDataSet* 
178   GetInput(); 
179
180   //! Apply view transformation
181   virtual
182   void
183   SetTransform(VTKViewer_Transform* theTransform); 
184
185   //! To calculatate last modified time
186   virtual
187   vtkMTimeType
188   GetMTime();
189
190   //----------------------------------------------------------------------------
191   //! Set representation (VTK_SURFACE, VTK_POINTS, VTK_WIREFRAME and so on)
192   virtual
193   void
194   SetRepresentation(int theMode);
195
196   //! Get current representation mode
197   virtual
198   int
199   GetRepresentation();
200
201   //! Get current display mode (obsolete)
202   virtual
203   int
204   getDisplayMode();
205
206   //! Set display mode (obsolete)
207   virtual
208   void
209   setDisplayMode(int theMode);
210
211   //----------------------------------------------------------------------------
212   //! Set infinive flag
213   /*!
214     Infinitive means actor without size (point for example),
215     which is not taken into account in calculation of boundaries of the scene
216   */
217   void
218   SetInfinitive(bool theIsInfinite);
219
220   //! Get infinive flag
221   virtual
222   bool
223   IsInfinitive();
224     
225   //! To calcualte current bounding box
226   virtual
227   double* 
228   GetBounds();
229
230   //! To calcualte current bounding box
231   void
232   GetBounds(double bounds[6]);
233
234   //----------------------------------------------------------------------------
235   virtual
236   bool
237   IsSetCamera() const;
238
239   virtual
240   bool
241   IsResizable() const;
242
243   virtual
244   void
245   SetSize( const double );
246
247   virtual
248   void 
249   SetCamera( vtkCamera* );
250
251   //----------------------------------------------------------------------------
252   //! Set ResolveCoincidentTopology flag
253   void
254   SetResolveCoincidentTopology(bool theIsResolve);
255
256   //! Set ResolveCoincidentTopology parameters
257   void
258   SetPolygonOffsetParameters(double factor, 
259                              double units);
260
261   //! Get current ResolveCoincidentTopology parameters
262   void
263   GetPolygonOffsetParameters(double& factor, 
264                              double& units);
265   
266   //! Get default ResolveCoincidentTopology parameters
267   static 
268   void
269   GetDefaultPolygonOffsetParameters(double& factor, 
270                                     double& units);
271
272   virtual
273   void
274   Render(vtkRenderer *, vtkMapper *);
275
276   //----------------------------------------------------------------------------
277   //! Get current shrink factor
278   virtual
279   double
280   GetShrinkFactor();
281
282   //! Is the actor is shrunkable
283   virtual
284   bool
285   IsShrunkable();
286
287   //! Is the actor is shrunk
288   virtual
289   bool
290   IsShrunk();
291
292   //! Insert shrink filter into pipeline
293   virtual
294   void
295   SetShrink();
296
297   //! Remove shrink filter from pipeline
298   virtual
299   void
300   UnShrink();
301
302   //----------------------------------------------------------------------------
303   //! To publish the actor an all its internal devices
304   virtual
305   void
306   AddToRender(vtkRenderer* theRendere); 
307
308   //! To remove the actor an all its internal devices
309   virtual
310   void
311   RemoveFromRender(vtkRenderer* theRendere);
312
313   //! Used to obtain all dependent actors
314   virtual
315   void
316   GetChildActors(vtkActorCollection*);
317
318   //----------------------------------------------------------------------------
319   //! Is notified on enabling/disabling selection
320   virtual
321   void
322   EnableSelection( bool enable ) {}
323
324   //! Ask, if the descendant of the VTKViewer_Actor will implement its own highlight or not
325   virtual
326   bool
327   hasHighlight(); 
328
329   //! Ask, if the VTKViewer_Actor is already highlighted
330   virtual
331   bool
332   isHighlighted();
333
334   //! Ask, if the VTKViewer_Actor is already preselected
335   virtual
336   bool
337   isPreselected();
338
339   //! Set preselection mode
340   virtual
341   void
342   SetPreSelected(bool thePreselect = false);
343
344   //----------------------------------------------------------------------------
345   //! Just to update visibility of the highlight devices
346   virtual
347   void
348   highlight(bool theHighlight);  
349
350   void
351   SetPreviewProperty(vtkProperty* theProperty);
352
353   //----------------------------------------------------------------------------
354   //! Setting for displaying quadratic elements
355   virtual void SetQuadraticArcMode(bool theFlag);
356   virtual bool GetQuadraticArcMode() const;
357
358   virtual void   SetQuadraticArcAngle(double theMaxAngle);
359   virtual double GetQuadraticArcAngle() const;
360
361   //----------------------------------------------------------------------------
362   //! Return pointer to the dataset, which used to calculation of the bounding box of the actor
363   virtual vtkDataSet* GetHighlightedDataSet();
364
365  protected:
366   //----------------------------------------------------------------------------
367   bool myIsResolveCoincidentTopology;
368   double myPolygonOffsetFactor;
369   double myPolygonOffsetUnits;
370
371   std::string myName;
372
373   double myOpacity;
374   int myDisplayMode;
375   bool myIsInfinite;
376
377   bool myStoreMapping;
378   VTKViewer_GeometryFilter *myGeomFilter;
379   VTKViewer_TransformFilter *myTransformFilter;
380   std::vector<vtkPassThroughFilter*> myPassFilter;
381
382   int myRepresentation;
383   vtkProperty *myProperty;
384
385   void
386   InitPipeLine(vtkMapper* theMapper); 
387
388   VTKViewer_Actor();
389   ~VTKViewer_Actor();
390
391  protected:
392   vtkProperty *PreviewProperty;
393   bool myIsPreselected;
394   bool myIsHighlighted;
395 };
396
397 #ifdef WIN32
398 #pragma warning ( default:4251 )
399 #endif
400
401 #endif // VTKVIEVER_ACTOR_H