0031687: Draw Harness, ViewerTest - extend command vrenderparams with option updating...
[occt.git] / src / AIS / AIS_ViewCube.hxx
index 7222c89..4667d19 100644 (file)
@@ -28,6 +28,7 @@
 class AIS_AnimationCamera;
 class AIS_ViewCubeOwner;
 class Graphic3d_ArrayOfTriangles;
+class V3d_View;
 
 //! Interactive object for displaying the view manipulation cube.
 //!
@@ -188,6 +189,45 @@ public: //! @name Geometry management API
   //! The value should be within [0, 0.5] range.
   Standard_EXPORT void SetRoundRadius (const Standard_Real theValue);
 
+  //! Returns radius of axes of the trihedron; 1.0 by default.
+  Standard_Real AxesRadius() const { return myAxesRadius; }
+
+  //! Sets radius of axes of the trihedron.
+  void SetAxesRadius (const Standard_Real theRadius)
+  {
+    if (Abs (myAxesRadius - theRadius) > Precision::Confusion())
+    {
+      myAxesRadius = theRadius;
+      SetToUpdate();
+    }
+  }
+
+  //! Returns radius of cone of axes of the trihedron; 3.0 by default.
+  Standard_Real AxesConeRadius() const { return myAxesConeRadius; }
+
+  //! Sets radius of cone of axes of the trihedron.
+  void SetAxesConeRadius (Standard_Real theRadius)
+  {
+    if (Abs (myAxesConeRadius - theRadius) > Precision::Confusion())
+    {
+      myAxesConeRadius = theRadius;
+      SetToUpdate();
+    }
+  }
+
+  //! Returns radius of sphere (central point) of the trihedron; 4.0 by default.
+  Standard_Real AxesSphereRadius() const { return myAxesSphereRadius; }
+
+  //! Sets radius of sphere (central point) of the trihedron.
+  void SetAxesSphereRadius (Standard_Real theRadius)
+  {
+    if (Abs (myAxesSphereRadius - theRadius) > Precision::Confusion())
+    {
+      myAxesSphereRadius = theRadius;
+      SetToUpdate();
+    }
+  }
+
   //! @return TRUE if trihedron is drawn; TRUE by default.
   Standard_Boolean ToDrawAxes() const { return myToDisplayAxes; }
 
@@ -425,11 +465,11 @@ public:
 public: //! @name animation methods
 
   //! Return duration of animation in seconds; 0.5 sec by default
-  Standard_Real Duration() const { return myDuration; }
+  Standard_EXPORT Standard_Real Duration() const;
 
   //! Set duration of animation.
   //! @param theValue [in] input value of duration in seconds
-  void SetDuration (Standard_Real theValue) { myDuration = theValue; }
+  Standard_EXPORT void SetDuration (Standard_Real theValue);
 
   //! Return TRUE if new camera Up direction should be always set to default value for a new camera Direction; FALSE by default.
   //! When this flag is FALSE, the new camera Up will be set as current Up orthogonalized to the new camera Direction,
@@ -466,6 +506,12 @@ protected:
   //! @return FALSE if animation has been finished
   Standard_EXPORT Standard_Boolean updateAnimation();
 
+  //! Fit selected/all into view.
+  //! @param theView [in] view definition to retrieve scene bounding box
+  //! @param theCamera [in,out] camera definition
+  Standard_EXPORT virtual void viewFitAll (const Handle(V3d_View)& theView,
+                                           const Handle(Graphic3d_Camera)& theCamera);
+
 protected: //! @name protected virtual API
 
   //! Method that is called after one step of transformation.
@@ -536,26 +582,60 @@ public: //! @name Presentation computation
 protected: //! @name Auxiliary classes to fill presentation with proper primitives
 
   //! Create triangulation for a box part - for presentation and selection purposes.
-  Standard_EXPORT virtual Handle(Graphic3d_ArrayOfTriangles) createBoxPartTriangles (V3d_TypeOfOrientation theDir) const;
+  //! @param theTris    [in,out] triangulation to fill, or NULL to return size
+  //! @param theNbNodes [in,out] should be incremented by a number of nodes defining this triangulation
+  //! @param theNbTris  [in,out] should be incremented by a number of triangles defining this triangulation
+  //! @param theDir     [in] part to define
+  Standard_EXPORT virtual void createBoxPartTriangles (const Handle(Graphic3d_ArrayOfTriangles)& theTris,
+                                                       Standard_Integer& theNbNodes,
+                                                       Standard_Integer& theNbTris,
+                                                       V3d_TypeOfOrientation theDir) const;
 
   //! Create triangulation for a box side.
-  Standard_EXPORT virtual Handle(Graphic3d_ArrayOfTriangles) createBoxSideTriangles (V3d_TypeOfOrientation theDir) const;
+  //! @param theTris    [in,out] triangulation to fill, or NULL to return size
+  //! @param theNbNodes [in,out] should be incremented by a number of nodes defining this triangulation
+  //! @param theNbTris  [in,out] should be incremented by a number of triangles defining this triangulation
+  //! @param theDir     [in] part to define
+  Standard_EXPORT virtual void createBoxSideTriangles (const Handle(Graphic3d_ArrayOfTriangles)& theTris,
+                                                       Standard_Integer& theNbNodes,
+                                                       Standard_Integer& theNbTris,
+                                                       V3d_TypeOfOrientation theDir) const;
 
   //! Create triangulation for a box edge.
-  Standard_EXPORT virtual Handle(Graphic3d_ArrayOfTriangles) createBoxEdgeTriangles (V3d_TypeOfOrientation theDir) const;
+  //! @param theTris    [in,out] triangulation to fill, or NULL to return size
+  //! @param theNbNodes [in,out] should be incremented by a number of nodes defining this triangulation
+  //! @param theNbTris  [in,out] should be incremented by a number of triangles defining this triangulation
+  //! @param theDir     [in] part to define
+  Standard_EXPORT virtual void createBoxEdgeTriangles (const Handle(Graphic3d_ArrayOfTriangles)& theTris,
+                                                       Standard_Integer& theNbNodes,
+                                                       Standard_Integer& theNbTris,
+                                                       V3d_TypeOfOrientation theDir) const;
 
   //! Create triangulation for a box corner (vertex).
-  Standard_EXPORT virtual Handle(Graphic3d_ArrayOfTriangles) createBoxCornerTriangles (V3d_TypeOfOrientation theDir) const;
+  //! @param theTris    [in,out] triangulation to fill, or NULL to return size
+  //! @param theNbNodes [in,out] should be incremented by a number of nodes defining this triangulation
+  //! @param theNbTris  [in,out] should be incremented by a number of triangles defining this triangulation
+  //! @param theDir     [in] part to define
+  Standard_EXPORT virtual void createBoxCornerTriangles (const Handle(Graphic3d_ArrayOfTriangles)& theTris,
+                                                         Standard_Integer& theNbNodes,
+                                                         Standard_Integer& theNbTris,
+                                                         V3d_TypeOfOrientation theDir) const;
 
 protected:
 
   //! Create triangulation for a rectangle with round corners.
-  //! @param theSize   rectangle dimensions
-  //! @param theRadius radius at corners
-  //! @param theTrsf   transformation
-  Standard_EXPORT static Handle(Graphic3d_ArrayOfTriangles) createRoundRectangleTriangles (const gp_XY& theSize,
-                                                                                           Standard_Real theRadius,
-                                                                                           const gp_Trsf& theTrsf);
+  //! @param theTris    [in,out] triangulation to fill, or NULL to return size
+  //! @param theNbNodes [in,out] should be incremented by a number of nodes defining this triangulation
+  //! @param theNbTris  [in,out] should be incremented by a number of triangles defining this triangulation
+  //! @param theSize    [in] rectangle dimensions
+  //! @param theRadius  [in] radius at corners
+  //! @param theTrsf    [in] transformation
+  Standard_EXPORT static void createRoundRectangleTriangles (const Handle(Graphic3d_ArrayOfTriangles)& theTris,
+                                                             Standard_Integer& theNbNodes,
+                                                             Standard_Integer& theNbTris,
+                                                             const gp_XY& theSize,
+                                                             Standard_Real theRadius,
+                                                             const gp_Trsf& theTrsf);
 
 protected:
 
@@ -580,6 +660,9 @@ protected:
   Standard_Real                 myBoxEdgeGap;        //!< gap between box side and box edge
   Standard_Real                 myBoxFacetExtension; //!< box facet extension
   Standard_Real                 myAxesPadding;       //!< Padding between box and axes
+  Standard_Real                 myAxesRadius;        //!< radius of axes of the trihedron; 1.0 by default
+  Standard_Real                 myAxesConeRadius;    //!< radius of cone of axes of the trihedron; 3.0 by default
+  Standard_Real                 myAxesSphereRadius;  //!< radius of sphere (central point) of the trihedron; 4.0 by default
   Standard_Real                 myCornerMinSize;     //!< minimal size of box corner
   Standard_Real                 myRoundRadius;       //!< relative round radius within [0; 0.5] range
   Standard_Boolean              myToDisplayAxes;     //!< trihedron visibility
@@ -592,7 +675,6 @@ protected: //! @name Animation options
   Handle(AIS_AnimationCamera)   myViewAnimation;     //!< Camera animation object
   Handle(Graphic3d_Camera)      myStartState;        //!< Start state of view camera
   Handle(Graphic3d_Camera)      myEndState;          //!< End state of view camera
-  Standard_Real                 myDuration;          //!< Duration of animation. By default it is half a second
   Standard_Boolean              myToAutoStartAnim;   //!< start animation automatically on click
   Standard_Boolean              myIsFixedAnimation;  //!< fixed-loop animation
   Standard_Boolean              myToFitSelected;     //!< fit selected or fit entire scene