1 // Copyright (C) 2007-2012 CEA/DEN, EDF R&D, OPEN CASCADE
3 // Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
4 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
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.
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.
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
20 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
23 // SALOME OBJECT : implementation of interactive object visualization for OCC and VTK viewers
24 // File : SALOME_Actor.h
25 // Author : Nicolas REJNERI
27 #ifndef VTKVIEVER_ACTOR_H
28 #define VTKVIEVER_ACTOR_H
30 #include "VTKViewer.h"
35 #include <vtkLODActor.h>
36 #include <vtkProperty.h>
45 class vtkPassThroughFilter;
47 class VTKViewer_Transform;
48 class VTKViewer_GeometryFilter;
49 class VTKViewer_TransformFilter;
51 extern int VTKViewer_POINT_SIZE;
52 extern int VTKViewer_LINE_WIDTH;
56 namespace Representation
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;
68 #pragma warning ( disable:4251 )
71 /*! \class vtkLODActor
72 * \brief For more information see <a href="http://www.vtk.org/">VTK documentation</a>
74 class VTKVIEWER_EXPORT VTKViewer_Actor : public vtkLODActor
77 static VTKViewer_Actor* New();
79 vtkTypeMacro(VTKViewer_Actor,vtkLODActor);
81 //----------------------------------------------------------------------------
87 //! Name the #VTKViewer_Actor
90 setName(const char* theName);
92 //----------------------------------------------------------------------------
96 SetOpacity(vtkFloatingPointType theOpacity);
98 //! Get current opacity
106 SetColor(vtkFloatingPointType r,
107 vtkFloatingPointType g,
108 vtkFloatingPointType b);
110 //! Get current color
113 GetColor(vtkFloatingPointType& r,
114 vtkFloatingPointType& g,
115 vtkFloatingPointType& b);
120 SetColor(const vtkFloatingPointType theRGB[3]);
125 SetMaterial(std::vector<vtkProperty*> theProps);
127 //! Get current material
132 //----------------------------------------------------------------------------
133 // For selection mapping purpose
134 //! Maps VTK index of a node to corresponding object index
137 GetNodeObjId(int theVtkID);
139 //! Get coordinates of a node for given object index
141 vtkFloatingPointType*
142 GetNodeCoord(int theObjID);
144 //! Maps VTK index of a cell to corresponding object index
147 GetElemObjId(int theVtkID);
149 //! Get corresponding #vtkCell for given object index
152 GetElemCell(int theObjID);
154 //----------------------------------------------------------------------------
155 //! Get dimension of corresponding mesh element
158 GetObjDimension( const int theObjId );
160 //! To insert some additional filters and then sets the given #vtkMapper
163 SetMapper(vtkMapper* theMapper);
165 //! Allows to get initial #vtkDataSet
170 //! Apply view transformation
173 SetTransform(VTKViewer_Transform* theTransform);
175 //! To calculatate last modified time
180 //----------------------------------------------------------------------------
181 //! Set representation (VTK_SURFACE, VTK_POINTS, VTK_WIREFRAME and so on)
184 SetRepresentation(int theMode);
186 //! Get current representation mode
191 //! Get current display mode (obsolete)
196 //! Set display mode (obsolete)
199 setDisplayMode(int theMode);
201 //----------------------------------------------------------------------------
202 //! Set infinive flag
204 Infinitive means actor without size (point for example),
205 which is not taken into account in calculation of boundaries of the scene
208 SetInfinitive(bool theIsInfinite);
210 //! Get infinive flag
215 //! To calcualte current bounding box
217 vtkFloatingPointType*
220 //! To calcualte current bounding box
222 GetBounds(vtkFloatingPointType bounds[6]);
224 //----------------------------------------------------------------------------
235 SetSize( const vtkFloatingPointType );
239 SetCamera( vtkCamera* );
241 //----------------------------------------------------------------------------
242 //! Set ResolveCoincidentTopology flag
244 SetResolveCoincidentTopology(bool theIsResolve);
246 //! Set ResolveCoincidentTopology parameters
248 SetPolygonOffsetParameters(vtkFloatingPointType factor,
249 vtkFloatingPointType units);
251 //! Get current ResolveCoincidentTopology parameters
253 GetPolygonOffsetParameters(vtkFloatingPointType& factor,
254 vtkFloatingPointType& units);
258 Render(vtkRenderer *, vtkMapper *);
260 //----------------------------------------------------------------------------
261 //! Get current shrink factor
266 //! Is the actor is shrunkable
271 //! Is the actor is shrunk
276 //! Insert shrink filter into pipeline
281 //! Remove shrink filter from pipeline
286 //----------------------------------------------------------------------------
287 //! To publish the actor an all its internal devices
290 AddToRender(vtkRenderer* theRendere);
292 //! To remove the actor an all its internal devices
295 RemoveFromRender(vtkRenderer* theRendere);
297 //! Used to obtain all dependent actors
300 GetChildActors(vtkActorCollection*);
302 //----------------------------------------------------------------------------
303 //! Ask, if the descendant of the VTKViewer_Actor will implement its own highlight or not
308 //! Ask, if the VTKViewer_Actor is already highlighted
313 //! Ask, if the VTKViewer_Actor is already preselected
318 //! Set preselection mode
321 SetPreSelected(bool thePreselect = false);
323 //----------------------------------------------------------------------------
324 //! Just to update visibility of the highlight devices
327 highlight(bool theHighlight);
330 SetPreviewProperty(vtkProperty* theProperty);
332 //----------------------------------------------------------------------------
333 //! Setting for displaying quadratic elements
334 virtual void SetQuadraticArcMode(bool theFlag);
335 virtual bool GetQuadraticArcMode() const;
337 virtual void SetQuadraticArcAngle(vtkFloatingPointType theMaxAngle);
338 virtual vtkFloatingPointType GetQuadraticArcAngle() const;
340 //----------------------------------------------------------------------------
341 //! Return pointer to the dataset, which used to calculation of the bounding box of the actor
342 virtual vtkDataSet* GetHighlightedDataSet();
345 //----------------------------------------------------------------------------
346 bool myIsResolveCoincidentTopology;
347 vtkFloatingPointType myPolygonOffsetFactor;
348 vtkFloatingPointType myPolygonOffsetUnits;
352 vtkFloatingPointType myOpacity;
357 VTKViewer_GeometryFilter *myGeomFilter;
358 VTKViewer_TransformFilter *myTransformFilter;
359 std::vector<vtkPassThroughFilter*> myPassFilter;
361 int myRepresentation;
362 vtkProperty *myProperty;
365 InitPipeLine(vtkMapper* theMapper);
371 vtkProperty *PreviewProperty;
372 bool myIsPreselected;
373 bool myIsHighlighted;
377 #pragma warning ( default:4251 )
380 #endif // VTKVIEVER_ACTOR_H