0032137: Coding Rules - merge redundant .lxx files into header files within Package gp
[occt.git] / src / gp / gp_Parab.hxx
index 120697c..2bb548a 100644 (file)
 #ifndef _gp_Parab_HeaderFile
 #define _gp_Parab_HeaderFile
 
-#include <Standard.hxx>
-#include <Standard_DefineAlloc.hxx>
-#include <Standard_Handle.hxx>
-
-#include <gp_Ax2.hxx>
-#include <Standard_Real.hxx>
 #include <gp_Ax1.hxx>
+#include <gp_Ax2.hxx>
+#include <gp_Lin.hxx>
 #include <gp_Pnt.hxx>
-class Standard_ConstructionError;
-class gp_Ax2;
-class gp_Ax1;
-class gp_Pnt;
-class gp_Trsf;
-class gp_Vec;
-
-
+#include <Standard_ConstructionError.hxx>
 
 //! Describes a parabola in 3D space.
 //! A parabola is defined by its focal length (that is, the
@@ -65,58 +54,64 @@ public:
 
   DEFINE_STANDARD_ALLOC
 
-  
   //! Creates an indefinite Parabola.
-    gp_Parab();
-  
+  gp_Parab()
+  : focalLength (RealLast())
+  {}
 
-  //! Creates a parabola with its local coordinate system "A2"
+  //! Creates a parabola with its local coordinate system "theA2"
   //! and it's focal length "Focal".
-  //! The XDirection of A2 defines the axis of symmetry of the
-  //! parabola. The YDirection of A2 is parallel to the directrix
-  //! of the parabola. The Location point of A2 is the vertex of
+  //! The XDirection of theA2 defines the axis of symmetry of the
+  //! parabola. The YDirection of theA2 is parallel to the directrix
+  //! of the parabola. The Location point of theA2 is the vertex of
   //! the parabola
-  //! Raises ConstructionError if Focal < 0.0
-  //! Raised if Focal < 0.0
-    gp_Parab(const gp_Ax2& A2, const Standard_Real Focal);
-  
-
-  //! D is the directrix of the parabola and F the focus point.
+  //! Raises ConstructionError if theFocal < 0.0
+  //! Raised if theFocal < 0.0
+  gp_Parab (const gp_Ax2& theA2, const Standard_Real theFocal)
+  : pos (theA2),
+    focalLength (theFocal)
+  {
+    Standard_ConstructionError_Raise_if (theFocal < 0.0, "gp_Parab() - focal length should be >= 0");
+  }
+
+  //! theD is the directrix of the parabola and theF the focus point.
   //! The symmetry axis (XAxis) of the parabola is normal to the
-  //! directrix and pass through the focus point F, but its
+  //! directrix and pass through the focus point theF, but its
   //! location point is the vertex of the parabola.
-  //! The YAxis of the parabola is parallel to D and its location
+  //! The YAxis of the parabola is parallel to theD and its location
   //! point is the vertex of the parabola. The normal to the plane
   //! of the parabola is the cross product between the XAxis and the
   //! YAxis.
-    gp_Parab(const gp_Ax1& D, const gp_Pnt& F);
-  
+  gp_Parab (const gp_Ax1& theD, const gp_Pnt& theF);
+
   //! Modifies this parabola by redefining its local coordinate system so that
   //! -   its origin and "main Direction" become those of the
-  //! axis A1 (the "X Direction" and "Y Direction" are then
+  //! axis theA1 (the "X Direction" and "Y Direction" are then
   //! recomputed in the same way as for any gp_Ax2)
-  //! Raises ConstructionError if the direction of A1 is parallel to the previous
+  //! Raises ConstructionError if the direction of theA1 is parallel to the previous
   //! XAxis of the parabola.
-    void SetAxis (const gp_Ax1& A1);
-  
+  void SetAxis (const gp_Ax1& theA1) { pos.SetAxis (theA1); }
+
   //! Changes the focal distance of the parabola.
-  //! Raises ConstructionError if Focal < 0.0
-    void SetFocal (const Standard_Real Focal);
-  
+  //! Raises ConstructionError if theFocal < 0.0
+  void SetFocal (const Standard_Real theFocal)
+  {
+    Standard_ConstructionError_Raise_if (theFocal < 0.0, "gp_Parab::SetFocal() - focal length should be >= 0");
+    focalLength = theFocal;
+  }
 
   //! Changes the location of the parabola. It is the vertex of
   //! the parabola.
-    void SetLocation (const gp_Pnt& P);
-  
+  void SetLocation (const gp_Pnt& theP) { pos.SetLocation (theP); }
+
   //! Changes the local coordinate system of the parabola.
-  void SetPosition (const gp_Ax2& A2);
-  
+  void SetPosition (const gp_Ax2& theA2) { pos = theA2; }
 
   //! Returns the main axis of the parabola.
   //! It is the axis normal to the plane of the parabola passing
   //! through the vertex of the parabola.
-    const gp_Ax1& Axis() const;
-  
+  const gp_Ax1& Axis() const { return pos.Axis(); }
+
   //! Computes the directrix of this parabola.
   //! The directrix is:
   //! -   a line parallel to the "Y Direction" of the local
@@ -126,123 +121,211 @@ public:
   //! length of this parabola.
   //! The directrix is returned as an axis (a gp_Ax1 object),
   //! the origin of which is situated on the "X Axis" of this parabola.
-    gp_Ax1 Directrix() const;
-  
+  gp_Ax1 Directrix() const;
 
   //! Returns the distance between the vertex and the focus
   //! of the parabola.
-    Standard_Real Focal() const;
-  
+  Standard_Real Focal() const { return focalLength; }
+
   //! -   Computes the focus of the parabola.
-    gp_Pnt Focus() const;
-  
+  gp_Pnt Focus() const;
 
   //! Returns the vertex of the parabola. It is the "Location"
   //! point of the coordinate system of the parabola.
-    const gp_Pnt& Location() const;
-  
+  const gp_Pnt& Location() const { return pos.Location(); }
 
   //! Computes the parameter of the parabola.
   //! It is the distance between the focus and the directrix of
   //! the parabola. This distance is twice the focal length.
-    Standard_Real Parameter() const;
-  
+  Standard_Real Parameter() const { return 2.0 * focalLength; }
 
   //! Returns the local coordinate system of the parabola.
-    const gp_Ax2& Position() const;
-  
+  const gp_Ax2& Position() const { return pos; }
 
   //! Returns the symmetry axis of the parabola. The location point
   //! of the axis is the vertex of the parabola.
-    gp_Ax1 XAxis() const;
-  
+  gp_Ax1 XAxis() const  { return gp_Ax1 (pos.Location(), pos.XDirection()); }
 
   //! It is an axis parallel to the directrix of the parabola.
   //! The location point of this axis is the vertex of the parabola.
-    gp_Ax1 YAxis() const;
-  
-  Standard_EXPORT void Mirror (const gp_Pnt& P);
-  
+  gp_Ax1 YAxis() const { return gp_Ax1 (pos.Location(), pos.YDirection()); }
+
+  Standard_EXPORT void Mirror (const gp_Pnt& theP);
 
   //! Performs the symmetrical transformation of a parabola
-  //! with respect to the point P which is the center of the
+  //! with respect to the point theP which is the center of the
   //! symmetry.
-  Standard_NODISCARD Standard_EXPORT gp_Parab Mirrored (const gp_Pnt& P) const;
-  
-  Standard_EXPORT void Mirror (const gp_Ax1& A1);
-  
+  Standard_NODISCARD Standard_EXPORT gp_Parab Mirrored (const gp_Pnt& theP) const;
+
+  Standard_EXPORT void Mirror (const gp_Ax1& theA1);
 
   //! Performs the symmetrical transformation of a parabola
   //! with respect to an axis placement which is the axis of
   //! the symmetry.
-  Standard_NODISCARD Standard_EXPORT gp_Parab Mirrored (const gp_Ax1& A1) const;
-  
-  Standard_EXPORT void Mirror (const gp_Ax2& A2);
-  
+  Standard_NODISCARD Standard_EXPORT gp_Parab Mirrored (const gp_Ax1& theA1) const;
+
+  Standard_EXPORT void Mirror (const gp_Ax2& theA2);
 
   //! Performs the symmetrical transformation of a parabola
-  //! with respect to a plane. The axis placement A2 locates
+  //! with respect to a plane. The axis placement theA2 locates
   //! the plane of the symmetry (Location, XDirection, YDirection).
-  Standard_NODISCARD Standard_EXPORT gp_Parab Mirrored (const gp_Ax2& A2) const;
-  
-    void Rotate (const gp_Ax1& A1, const Standard_Real Ang);
-  
-
-  //! Rotates a parabola. A1 is the axis of the rotation.
-  //! Ang is the angular value of the rotation in radians.
-    Standard_NODISCARD gp_Parab Rotated (const gp_Ax1& A1, const Standard_Real Ang) const;
-  
-    void Scale (const gp_Pnt& P, const Standard_Real S);
-  
-
-  //! Scales a parabola. S is the scaling value.
-  //! If S is negative the direction of the symmetry axis
-  //! XAxis is reversed and the direction of the YAxis too.
-    Standard_NODISCARD gp_Parab Scaled (const gp_Pnt& P, const Standard_Real S) const;
-  
-    void Transform (const gp_Trsf& T);
-  
-
-  //! Transforms a parabola with the transformation T from class Trsf.
-    Standard_NODISCARD gp_Parab Transformed (const gp_Trsf& T) const;
-  
-    void Translate (const gp_Vec& V);
-  
-
-  //! Translates a parabola in the direction of the vector V.
-  //! The magnitude of the translation is the vector's magnitude.
-    Standard_NODISCARD gp_Parab Translated (const gp_Vec& V) const;
-  
-    void Translate (const gp_Pnt& P1, const gp_Pnt& P2);
-  
-
-  //! Translates a parabola from the point P1 to the point P2.
-    Standard_NODISCARD gp_Parab Translated (const gp_Pnt& P1, const gp_Pnt& P2) const;
+  Standard_NODISCARD Standard_EXPORT gp_Parab Mirrored (const gp_Ax2& theA2) const;
 
+  void Rotate (const gp_Ax1& theA1, const Standard_Real theAng) { pos.Rotate (theA1, theAng); }
 
+  //! Rotates a parabola. theA1 is the axis of the rotation.
+  //! Ang is the angular value of the rotation in radians.
+  Standard_NODISCARD gp_Parab Rotated (const gp_Ax1& theA1, const Standard_Real theAng) const
+  {
+    gp_Parab aPrb = *this;
+    aPrb.pos.Rotate (theA1, theAng);
+    return aPrb;
+  }
 
+  void Scale (const gp_Pnt& theP, const Standard_Real theS);
 
-protected:
+  //! Scales a parabola. theS is the scaling value.
+  //! If theS is negative the direction of the symmetry axis
+  //! XAxis is reversed and the direction of the YAxis too.
+  Standard_NODISCARD gp_Parab Scaled (const gp_Pnt& theP, const Standard_Real theS) const;
 
+  void Transform (const gp_Trsf& theT);
 
+  //! Transforms a parabola with the transformation theT from class Trsf.
+  Standard_NODISCARD gp_Parab Transformed (const gp_Trsf& theT) const;
 
+  void Translate (const gp_Vec& theV) { pos.Translate (theV); }
 
+  //! Translates a parabola in the direction of the vector theV.
+  //! The magnitude of the translation is the vector's magnitude.
+  Standard_NODISCARD gp_Parab Translated (const gp_Vec& theV) const
+  {
+    gp_Parab aPrb = *this;
+    aPrb.pos.Translate (theV);
+    return aPrb;
+  }
+
+  void Translate (const gp_Pnt& theP1, const gp_Pnt& theP2)  { pos.Translate (theP1, theP2); }
+
+  //! Translates a parabola from the point theP1 to the point theP2.
+  Standard_NODISCARD gp_Parab Translated (const gp_Pnt& theP1, const gp_Pnt& theP2) const
+  {
+    gp_Parab aPrb = *this;
+    aPrb.pos.Translate (theP1, theP2);
+    return aPrb;
+  }
 
 private:
 
-
-
   gp_Ax2 pos;
   Standard_Real focalLength;
 
-
 };
 
-
-#include <gp_Parab.lxx>
-
-
-
-
+//=======================================================================
+//function : gp_Parab
+// purpose :
+//=======================================================================
+inline gp_Parab::gp_Parab (const gp_Ax1& theD,
+                           const gp_Pnt& theF)
+{
+  gp_Lin aDroite (theD);
+  focalLength = aDroite.Distance (theF) / 2.;
+  gp_Ax1 anAx = aDroite.Normal (theF).Position();
+  gp_Ax1 anAy = aDroite.Position();     
+  const gp_Dir& aDD = anAx.Direction();
+  pos = gp_Ax2 (gp_Pnt (theF.X() - focalLength * aDD.X(),
+                        theF.Y() - focalLength * aDD.Y(),
+                        theF.Z() - focalLength * aDD.Z()),
+                anAx.Direction().Crossed (anAy.Direction()),
+                anAx.Direction());
+}
+
+//=======================================================================
+//function : Directrix
+// purpose :
+//=======================================================================
+inline gp_Ax1 gp_Parab::Directrix() const
+{
+  const gp_Pnt& aPP = pos.Location  ();
+  const gp_Dir& aDD = pos.XDirection();
+  gp_Pnt aP (aPP.X() - focalLength * aDD.X(),
+             aPP.Y() - focalLength * aDD.Y(),
+             aPP.Z() - focalLength * aDD.Z());
+  return gp_Ax1 (aP, pos.YDirection());
+}
+
+//=======================================================================
+//function : Focus
+// purpose :
+//=======================================================================
+inline gp_Pnt gp_Parab::Focus() const
+{
+  const gp_Pnt& aPP = pos.Location  ();
+  const gp_Dir& aDD = pos.XDirection();
+  return gp_Pnt (aPP.X() + focalLength * aDD.X(),
+                 aPP.Y() + focalLength * aDD.Y(),
+                 aPP.Z() + focalLength * aDD.Z());
+}
+
+//=======================================================================
+//function : Scale
+// purpose :
+//=======================================================================
+inline void gp_Parab::Scale (const gp_Pnt& theP, const Standard_Real theS)
+{
+  focalLength *= theS;
+  if (focalLength < 0)
+  {
+    focalLength = -focalLength;
+  }
+  pos.Scale (theP, theS);
+}
+
+//=======================================================================
+//function : Scaled
+// purpose :
+//=======================================================================
+inline gp_Parab gp_Parab::Scaled (const gp_Pnt& theP, const Standard_Real theS) const
+{
+  gp_Parab aPrb = *this;
+  aPrb.focalLength *= theS;
+  if (aPrb.focalLength < 0)
+  {
+    aPrb.focalLength = -aPrb.focalLength;
+  }
+  aPrb.pos.Scale (theP, theS);
+  return aPrb;
+}
+
+//=======================================================================
+//function : Transform
+// purpose :
+//=======================================================================
+inline void gp_Parab::Transform (const gp_Trsf& theT)
+{
+  focalLength *= theT.ScaleFactor();
+  if (focalLength < 0)
+  {
+    focalLength = -focalLength;
+  }
+  pos.Transform (theT);
+}
+
+//=======================================================================
+//function : Transformed
+// purpose :
+//=======================================================================
+inline gp_Parab gp_Parab::Transformed (const gp_Trsf& theT) const
+{
+  gp_Parab aPrb = *this;
+  aPrb.focalLength *= theT.ScaleFactor();
+  if (aPrb.focalLength < 0)
+  {
+    aPrb.focalLength = -aPrb.focalLength;
+  }
+  aPrb.pos.Transform (theT);
+  return aPrb;
+}
 
 #endif // _gp_Parab_HeaderFile