Salome HOME
Upgrade to paraview 5.4
[modules/gui.git] / src / VTKViewer / VTKViewer_Trihedron.h
index 25e30a19b85d70e2035d4acc62f1f79e6a491621..af0402d1faa68edeb0c9dc732ecf1bc6506bd986 100755 (executable)
@@ -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 <vtkObject.h>
 #include <vtkFollower.h>
+#include <vtkVersion.h>
 
 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 <a href="http://www.vtk.org/">vtk documentation</a>
+ */
+/*!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