// Copyright (C) 2007-2008 CEA/DEN, EDF R&D, OPEN CASCADE // // Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS // // This library is free software; you can redistribute it and/or // modify it under the terms of the GNU Lesser General Public // License as published by the Free Software Foundation; either // version 2.1 of the License. // // This library is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU // Lesser General Public License for more details. // // You should have received a copy of the GNU Lesser General Public // License along with this library; if not, write to the Free Software // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // // GEOM OBJECT : interactive object for Geometry entities visualization // File : GEOM_Actor.h // Author : Christophe ATTANASIO // Module : GEOM // $Header$ // #ifndef GEOM_ACTOR_H #define GEOM_ACTOR_H #include "GEOM_OBJECT_defs.hxx" #include "GEOM_SmartPtr.h" #include #include #include class vtkCamera; class GEOM_VertexSource; typedef GEOM_SmartPtr PVertexSource; class GEOM_EdgeSource; typedef GEOM_SmartPtr PEdgeSource; class GEOM_WireframeFace; typedef GEOM_SmartPtr PWFaceSource; class GEOM_ShadingFace; typedef GEOM_SmartPtr PSFaceSource; #include class vtkRenderer; class vtkAppendPolyData; typedef GEOM_SmartPtr PAppendFilter; class GEOM_OBJECT_EXPORT GEOM_Actor: public SALOME_Actor { public: vtkTypeMacro(GEOM_Actor,SALOME_Actor); static GEOM_Actor* New(); void SetShape(const TopoDS_Shape& theShape, float theDeflection, bool theIsRelative, bool theIsVector = false); void SetDeflection(float theDeflection, bool theIsRelative); float GetDeflection() const{ return myDeflection;} bool GetIsRelative() const{ return myIsRelative;} void AddToRender(vtkRenderer* theRenderer); void RemoveFromRender(vtkRenderer* theRenderer); enum EDisplayMode{ eWireframe, eShading}; /* void SetDisplayMode(EDisplayMode theMode); */ /* EDisplayMode GetDisplayMode() const { return myDisplayMode;} */ void SetSelected(bool theIsSelected); bool IsSelected() const { return myIsSelected;} // OLD METHODS // Properties void SetHighlightProperty(vtkProperty* Prop); void SetWireframeProperty(vtkProperty* Prop); void SetShadingProperty(vtkProperty* Prop); void setDeflection(double adef); virtual void setDisplayMode(int thenewmode); // Description: // This causes the actor to be rendered. It, in turn, will render the actor's // property and then mapper. virtual void Render(vtkRenderer *, vtkMapper *); // Description: // Release any graphics resources that are being consumed by this actor. // The parameter window could be used to determine which graphic // resources to release. void ReleaseGraphicsResources(vtkWindow *); const TopoDS_Shape& getTopo(); void setInputShape(const TopoDS_Shape& ashape, double adef1, int imode, bool isVector = false); double getDeflection(); double isVector(); // SubShape void SubShapeOn(); void SubShapeOff(); // Highlight virtual void highlight(bool theHighlight); virtual bool hasHighlight() { return true; } void ShallowCopy(vtkProp *prop); // Opacity void SetOpacity(vtkFloatingPointType opa); vtkFloatingPointType GetOpacity(); // Color void SetColor(vtkFloatingPointType r,vtkFloatingPointType g,vtkFloatingPointType b); void GetColor(vtkFloatingPointType& r,vtkFloatingPointType& g,vtkFloatingPointType& b); virtual bool IsInfinitive(); // overloaded functions //! To map current selection to VTK representation virtual void Highlight(bool theHighlight); //---------------------------------------------------------------------------- //! To process prehighlight (called from #SVTK_InteractorStyle) virtual bool PreHighlight(vtkInteractorStyle* theInteractorStyle, SVTK_SelectionEvent* theSelectionEvent, bool theIsHighlight); //! To process highlight (called from #SVTK_InteractorStyle) virtual bool Highlight(vtkInteractorStyle* theInteractorStyle, SVTK_SelectionEvent* theSelectionEvent, bool theIsHighlight); //! Visibility management virtual void SetVisibility( int ); //! IsoLines management // theNb[0] - number of U lines // theNb[1] - number of V lines virtual void SetNbIsos(const int theNb[2]); virtual void GetNbIsos(int &theNbU,int &theNbV); protected: void SetShape(const TopoDS_Shape& theShape, const TopTools_IndexedDataMapOfShapeListOfShape& theEdgeMap, bool theIsVector = false); void SetModified(); void GetMatrix(vtkCamera* theCam, vtkMatrix4x4 *result); GEOM_Actor(); ~GEOM_Actor(); private: TopoDS_Shape myShape; int myNbIsos[2]; bool isOnlyVertex; float myDeflection; bool myIsRelative; bool myIsForced; // EDisplayMode myDisplayMode; bool myIsSelected; PDeviceActor myVertexActor; PVertexSource myVertexSource; PDeviceActor myIsolatedEdgeActor; PEdgeSource myIsolatedEdgeSource; PDeviceActor myOneFaceEdgeActor; PEdgeSource myOneFaceEdgeSource; PDeviceActor mySharedEdgeActor; PEdgeSource mySharedEdgeSource; PDeviceActor myWireframeFaceActor; PWFaceSource myWireframeFaceSource; PDeviceActor myShadingFaceActor; PSFaceSource myShadingFaceSource; PDeviceActor myHighlightActor; vtkSmartPointer myHighlightProp; vtkSmartPointer myPreHighlightProp; vtkSmartPointer myShadingFaceProp; PAppendFilter myAppendFilter; PPolyDataMapper myPolyDataMapper; virtual void SetMapper(vtkMapper*); GEOM_Actor(const GEOM_Actor&); void operator=(const GEOM_Actor&); }; #endif //GEOM_ACTOR_H