X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FVTKViewer%2FVTKViewer_Trihedron.h;h=af0402d1faa68edeb0c9dc732ecf1bc6506bd986;hb=refs%2Fheads%2Fngr%2Fpython3_dev_pv5.4;hp=25e30a19b85d70e2035d4acc62f1f79e6a491621;hpb=2e750f9ded92337bc3c44e9d7388180974cc4a43;p=modules%2Fgui.git diff --git a/src/VTKViewer/VTKViewer_Trihedron.h b/src/VTKViewer/VTKViewer_Trihedron.h index 25e30a19b..af0402d1f 100755 --- a/src/VTKViewer/VTKViewer_Trihedron.h +++ b/src/VTKViewer/VTKViewer_Trihedron.h @@ -1,3 +1,25 @@ +// Copyright (C) 2007-2016 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, or (at your option) any later version. +// +// 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 +// + #ifndef VTKVIEWER_TRIHEDRON_H #define VTKVIEWER_TRIHEDRON_H @@ -5,6 +27,7 @@ #include #include +#include class vtkRenderer; class vtkActorCollection; @@ -13,125 +36,305 @@ class vtkProperty; class vtkPolyDataMapper; class vtkLineSource; class vtkConeSource; +class vtkVectorText; +class vtkTextActor; +class vtkTextMapper; class VTKViewer_Axis; -class VTKViewer_VectorText; -//**************************************************************** -class VTKViewer_UnScaledActor: public vtkFollower +#if !defined(VTK_XVERSION) +#define VTK_XVERSION (VTK_MAJOR_VERSION<<16)+(VTK_MINOR_VERSION<<8)+(VTK_BUILD_VERSION) +#endif + +// VTKViewer_UnScaledActor is temporarily replaced with simple vtkTextActor +// This workaround caused by the bug with disappeared labels of the trihedron +// reproduced after migration from qt-4.4.3 to qt-4.5.2 +#if (VTK_XVERSION < 0x050200) +#define IPAL21440 +#endif + +/*! \class vtkFollower + * See vtk documentation + */ +/*!a subclass of actor that always faces the camera + *@see vtkFollower + */ +class VTKVIEWER_EXPORT VTKViewer_UnScaledActor: public vtkFollower { VTKViewer_UnScaledActor(const VTKViewer_UnScaledActor&); public: + vtkTypeMacro(VTKViewer_UnScaledActor,vtkFollower); + + /*!Create new instance of VTKViewer_UnScaledActor.*/ static VTKViewer_UnScaledActor *New(); + virtual double* GetBounds(); virtual void SetSize(int theSize); virtual void Render(vtkRenderer *theRenderer); - + protected: VTKViewer_UnScaledActor(); + /*!Destructor. Do nothing.*/ ~VTKViewer_UnScaledActor(){} + int mySize; }; -//**************************************************************** -class VTKViewer_LineActor: public vtkFollower +/*!a subclass of actor that always faces the camera + *@see vtkFollower + */ +class VTKVIEWER_EXPORT VTKViewer_LineActor: public vtkFollower { VTKViewer_LineActor(const VTKViewer_LineActor&); public: + /*!vtk type macros.*/ vtkTypeMacro(VTKViewer_LineActor,vtkFollower); + + /*!Create new instance of VTKViewer_LineActor.*/ static VTKViewer_LineActor *New(); +#ifdef IPAL21440 + /*! Sets Label actor. + * \param theLabelActor - vtkTextActor + */ + void SetLabelActor(vtkTextActor* theLabelActor); +#else + /*! Sets Label actor. + * \param theLabelActor - VTKViewer_UnScaledActor + */ void SetLabelActor(VTKViewer_UnScaledActor* theLabelActor); - void SetArrowActor(VTKViewer_UnScaledActor* theLabelActor); +#endif + + /*! Sets Arrow actor. + * \param theLabelActor - VTKViewer_UnScaledActor + */ + void SetArrowActor(vtkFollower* theArrowActor); + virtual void Render(vtkRenderer *theRenderer); protected: + + /*! Constructor which sets \a LabelActor and \a ArrowActor to NULL*/ VTKViewer_LineActor(){ LabelActor = NULL; ArrowActor = NULL; } + + /*!Destructor which call SetLabelActor(NULL) and SetArrowActor(NULL)*/ ~VTKViewer_LineActor(){ SetLabelActor(NULL); SetArrowActor(NULL); } - + + /*!Label actor pointer*/ +#ifdef IPAL21440 + vtkTextActor* LabelActor; +#else VTKViewer_UnScaledActor* LabelActor; - VTKViewer_UnScaledActor* ArrowActor; +#endif + + /*!Arrow actor pointer*/ + vtkFollower* ArrowActor; }; -//**************************************************************** +/*!This class provide support trihedron object in vtk viewer.*/ class VTKVIEWER_EXPORT VTKViewer_Trihedron : public vtkObject { protected: + /*!Initialize fields by default values.*/ VTKViewer_Trihedron(); + + /*!Const copy constructor.*/ VTKViewer_Trihedron(const VTKViewer_Trihedron&); + + /*!Destructor. Remove all fileds.*/ virtual ~VTKViewer_Trihedron(); public: + /*!vtk type macros.*/ vtkTypeMacro(VTKViewer_Trihedron,vtkObject); + + /*!Create new instance of VTKViewer_Trihedron.*/ static VTKViewer_Trihedron *New(); - virtual void SetSize(float theSize); - virtual float GetSize() { return mySize;} + /*!Sets size of trihedron. + * \param theSize - double value + */ + virtual void SetSize(double theSize); + + /*! Get size of trihedron. + * \retval mySize - double value + */ + virtual double GetSize() { return mySize;} enum TVisibility{eOff, eOn, eOnlyLineOn}; + + /*! Sets visibility for all Axis to \a theVis*/ virtual void SetVisibility(TVisibility theVis); + + /*! OFF visibility for all Axis.*/ virtual void VisibilityOff() { SetVisibility(eOff);} + + /*! ON visibility for all Axis.*/ virtual void VisibilityOn() { SetVisibility(eOn);} + + /*! Gets visibility of myAxis[0] actor.*/ virtual TVisibility GetVisibility(); + /*! Add to render all Axis + * \param theRenderer - vtkRenderer pointer + */ virtual void AddToRender(vtkRenderer* theRenderer); + + /*! Remove all actors from \a theRenderer which are in myPresent. + * \param theRenderer - vtkRenderer pointer + */ virtual void RemoveFromRender(vtkRenderer* theRenderer); + /*! Return count of visible actors. + * \param theRenderer - vtkRenderer pointer + */ virtual int GetVisibleActorCount(vtkRenderer* theRenderer); + /*! Check if actor belongs to the trihedron object + * \param theActor - vtkActor pointer + * \retval Return true if the actor belongs to the trihedron object + */ + virtual bool OwnActor(const vtkActor* theActor); + protected: + /*! Actor collection*/ vtkActorCollection* myPresent; + + /*! \li myAxis[0] - X Axis actor + * \li myAxis[1] - Y Axis actor + * \li myAxis[2] - Z Axis actor + */ VTKViewer_Axis* myAxis[3]; - float mySize; + + /*! Common size for trihedron, for each axis.*/ + double mySize; }; -//**************************************************************** -// The base class for concreate Axis -// Its only duty is to give correct initialization and destruction -// of its pipe-lines -class VTKViewer_Axis : public vtkObject +/*!The base class for concreate Axis. + * Its only duty is to give correct initialization and destruction + * of its pipe-lines + */ +class VTKVIEWER_EXPORT VTKViewer_Axis : public vtkObject { protected: VTKViewer_Axis(); VTKViewer_Axis(const VTKViewer_Axis&); virtual ~VTKViewer_Axis(); + public: + /*!vtk type macros.*/ vtkTypeMacro(VTKViewer_Axis,vtkObject); + /*! Add to \a theRenderer actors: myLineActor,myLabelActor,myArrowActor + */ virtual void AddToRender(vtkRenderer* theRenderer); + virtual void RemoveFromRender(vtkRenderer* theRenderer); + /*! Sets visibility for actors: myLineActor,myLabelActor,myArrowActor + */ virtual void SetVisibility(VTKViewer_Trihedron::TVisibility theVis); + + /*! Return visibility of VTKViewer_Axis + * \retval myVisibility + */ virtual VTKViewer_Trihedron::TVisibility GetVisibility() { return myVisibility; } + /*! Set camera for myLabelActor + */ virtual void SetCamera(vtkCamera* theCamera); - virtual void SetProperty(vtkProperty* theProperty); - virtual void SetSize(float theSize); + + /*! Sets color for actors: myLineActor,myLabelActor,myArrowActor + * \param theRed - red component of the color + * \param theGreen - green component of the color + * \param theBlue - blue component of the color + */ + virtual void SetColor(double theRed, double theGreen, double theBlue); + + /*! Set size of VTKViewer_Axis + */ + virtual void SetSize(double theSize); + /*! Get label actor. + * \retval Return myLabelActor. + */ +#ifdef IPAL21440 + virtual vtkTextActor* GetLabel() { return myLabelActor; } +#else virtual VTKViewer_UnScaledActor* GetLabel() { return myLabelActor; } - virtual VTKViewer_UnScaledActor* GetArrow() { return myArrowActor; } +#endif + + /*! Get arrow actor. + * \retval Return myArrowActor + */ + virtual vtkFollower* GetArrow() { return myArrowActor; } + + /*! Check if actor belongs to the axis object + * \param theActor - vtkActor pointer + * \retval Return true if the actor belongs to the axis object + */ + virtual bool OwnActor(const vtkActor* theActor); protected: + /*! Visibility flag. + */ VTKViewer_Trihedron::TVisibility myVisibility; - float myDir[3], myRot[3]; + + /*! \var myDir[3] + * Direction vector + */ + /*! \var myRot[3] + * Orientation vector + */ + double myDir[3], myRot[3]; + /*! VTKViewer_LineActor actor pointer + */ VTKViewer_LineActor *myLineActor; - //vtkActor *myLineActor; - VTKViewer_UnScaledActor *myArrowActor; + + /*! vtkFollower actor pointer + */ + vtkFollower *myArrowActor; + + /*! VTKViewer_UnScaledActor actor pointer + */ +#ifdef IPAL21440 + vtkTextActor *myLabelActor; +#else VTKViewer_UnScaledActor *myLabelActor; +#endif + /*! \li myMapper[0] - for the Line pipe-line representation + * \li myMapper[1] - for the Arrow pipe-line representation + * \li myMapper[2] - for the Label pipe-line representation + */ vtkPolyDataMapper *myMapper[3]; + + /*! vtkLineSource pointer (Line) + */ vtkLineSource *myLineSource; + + /*! vtkConeSource pointer (Arrow) + */ vtkConeSource *myConeSource; - VTKViewer_VectorText* myVectorText; + +#ifdef IPAL21440 + /*! vtkTextMapper pointer (Label) + */ + vtkTextMapper *myTextMapper; +#else + /*! VTKViewer_VectorText pointer (Label) + */ + vtkVectorText* myVectorText; +#endif }; #endif