1 // GEOM OBJECT : interactive object for Geometry entities visualization
3 // Copyright (C) 2003 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
24 // File : GEOM_Actor.h
25 // Author : Christophe ATTANASIO
32 #include "GEOM_OBJECT_defs.hxx"
34 #include "SALOME_Actor.h"
36 #include <TopoDS_Shape.hxx>
38 #include "GEOM_SmartPtr.h"
39 #include <vtkSmartPointer.h>
41 class GEOM_VertexSource;
42 typedef GEOM_SmartPtr<GEOM_VertexSource> PVertexSource;
44 class GEOM_EdgeSource;
45 typedef GEOM_SmartPtr<GEOM_EdgeSource> PEdgeSource;
47 class GEOM_WireframeFace;
48 typedef GEOM_SmartPtr<GEOM_WireframeFace> PWFaceSource;
50 class GEOM_ShadingFace;
51 typedef GEOM_SmartPtr<GEOM_ShadingFace> PSFaceSource;
53 #include <TopTools_IndexedDataMapOfShapeListOfShape.hxx>
56 class vtkAppendPolyData;
57 typedef GEOM_SmartPtr<vtkAppendPolyData> PAppendFilter;
59 class GEOM_OBJECT_EXPORT GEOM_Actor: public SALOME_Actor
62 vtkTypeMacro(GEOM_Actor,SALOME_Actor);
63 static GEOM_Actor* New();
65 void SetShape(const TopoDS_Shape& theShape,
68 bool theIsVector = false);
70 void SetDeflection(float theDeflection, bool theIsRelative);
71 float GetDeflection() const{ return myDeflection;}
72 bool GetIsRelative() const{ return myIsRelative;}
74 void AddToRender(vtkRenderer* theRenderer);
75 void RemoveFromRender(vtkRenderer* theRenderer);
77 enum EDisplayMode{ eWireframe, eShading};
79 /* void SetDisplayMode(EDisplayMode theMode); */
80 /* EDisplayMode GetDisplayMode() const { return myDisplayMode;} */
82 void SetSelected(bool theIsSelected);
83 bool IsSelected() const { return myIsSelected;}
87 void SetHighlightProperty(vtkProperty* Prop);
88 void SetWireframeProperty(vtkProperty* Prop);
89 void SetShadingProperty(vtkProperty* Prop);
91 void setDeflection(double adef);
92 virtual void setDisplayMode(int thenewmode);
95 // This causes the actor to be rendered. It, in turn, will render the actor's
96 // property and then mapper.
97 virtual void Render(vtkRenderer *, vtkMapper *);
99 // Release any graphics resources that are being consumed by this actor.
100 // The parameter window could be used to determine which graphic
101 // resources to release.
102 void ReleaseGraphicsResources(vtkWindow *);
103 const TopoDS_Shape& getTopo();
104 void setInputShape(const TopoDS_Shape& ashape, double adef1,
105 int imode, bool isVector = false);
106 double getDeflection();
114 virtual void highlight(bool theHighlight);
115 virtual bool hasHighlight() { return true; }
117 void ShallowCopy(vtkProp *prop);
120 void SetOpacity(vtkFloatingPointType opa);
121 vtkFloatingPointType GetOpacity();
124 void SetColor(vtkFloatingPointType r,vtkFloatingPointType g,vtkFloatingPointType b);
125 void GetColor(vtkFloatingPointType& r,vtkFloatingPointType& g,vtkFloatingPointType& b);
127 virtual bool IsInfinite();
129 // overloaded functions
130 //! To map current selection to VTK representation
133 Highlight(bool theHighlight);
135 //----------------------------------------------------------------------------
136 //! To process prehighlight (called from #SVTK_InteractorStyle)
139 PreHighlight(vtkInteractorStyle* theInteractorStyle,
140 SVTK_SelectionEvent* theSelectionEvent,
141 bool theIsHighlight);
143 //! To process highlight (called from #SVTK_InteractorStyle)
146 Highlight(vtkInteractorStyle* theInteractorStyle,
147 SVTK_SelectionEvent* theSelectionEvent,
148 bool theIsHighlight);
150 //! Visibility management
153 SetVisibility( int );
155 //! IsoLines management
156 // theNb[0] - number of U lines
157 // theNb[1] - number of V lines
160 SetNbIsos(const int theNb[2]);
164 GetNbIsos(int &theNbU,int &theNbV);
167 void SetShape(const TopoDS_Shape& theShape,
168 const TopTools_IndexedDataMapOfShapeListOfShape& theEdgeMap,
169 bool theIsVector = false);
173 void GetMatrix(vtkCamera* theCam, vtkMatrix4x4 *result);
179 TopoDS_Shape myShape;
186 // EDisplayMode myDisplayMode;
189 PDeviceActor myVertexActor;
190 PVertexSource myVertexSource;
192 PDeviceActor myIsolatedEdgeActor;
193 PEdgeSource myIsolatedEdgeSource;
195 PDeviceActor myOneFaceEdgeActor;
196 PEdgeSource myOneFaceEdgeSource;
198 PDeviceActor mySharedEdgeActor;
199 PEdgeSource mySharedEdgeSource;
201 PDeviceActor myWireframeFaceActor;
202 PWFaceSource myWireframeFaceSource;
204 PDeviceActor myShadingFaceActor;
205 PSFaceSource myShadingFaceSource;
207 PDeviceActor myHighlightActor;
208 vtkSmartPointer<vtkProperty> myHighlightProp;
209 vtkSmartPointer<vtkProperty> myPreHighlightProp;
210 vtkSmartPointer<vtkProperty> myShadingFaceProp;
212 PAppendFilter myAppendFilter;
213 PPolyDataMapper myPolyDataMapper;
215 virtual void SetMapper(vtkMapper*);
217 GEOM_Actor(const GEOM_Actor&);
218 void operator=(const GEOM_Actor&);
221 #endif //GEOM_ACTOR_H