Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2025-01-18 10:03:44

0001 // Copyright (c) 1991-1999 Matra Datavision
0002 // Copyright (c) 1999-2014 OPEN CASCADE SAS
0003 //
0004 // This file is part of Open CASCADE Technology software library.
0005 //
0006 // This library is free software; you can redistribute it and/or modify it under
0007 // the terms of the GNU Lesser General Public License version 2.1 as published
0008 // by the Free Software Foundation, with special exception defined in the file
0009 // OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
0010 // distribution for complete text of the license and disclaimer of any warranty.
0011 //
0012 // Alternatively, this file may be used under the terms of Open CASCADE
0013 // commercial license or contractual agreement.
0014 
0015 #ifndef _gp_Hypr2d_HeaderFile
0016 #define _gp_Hypr2d_HeaderFile
0017 
0018 #include <gp.hxx>
0019 #include <gp_Ax22d.hxx>
0020 #include <gp_Ax2d.hxx>
0021 #include <gp_Pnt2d.hxx>
0022 #include <Standard_DomainError.hxx>
0023 #include <Standard_ConstructionError.hxx>
0024 
0025 //! Describes a branch of a hyperbola in the plane (2D space).
0026 //! A hyperbola is defined by its major and minor radii, and
0027 //! positioned in the plane with a coordinate system (a
0028 //! gp_Ax22d object) of which:
0029 //! -   the origin is the center of the hyperbola,
0030 //! -   the "X Direction" defines the major axis of the hyperbola, and
0031 //! -   the "Y Direction" defines the minor axis of the hyperbola.
0032 //! This coordinate system is the "local coordinate system"
0033 //! of the hyperbola. The orientation of this coordinate
0034 //! system (direct or indirect) gives an implicit orientation to
0035 //! the hyperbola. In this coordinate system, the equation of
0036 //! the hyperbola is:
0037 //! X*X/(MajorRadius**2)-Y*Y/(MinorRadius**2) = 1.0
0038 //! The branch of the hyperbola described is the one located
0039 //! on the positive side of the major axis.
0040 //! The following schema shows the plane of the hyperbola,
0041 //! and in it, the respective positions of the three branches of
0042 //! hyperbolas constructed with the functions OtherBranch,
0043 //! ConjugateBranch1, and ConjugateBranch2:
0044 //! @code
0045 //! ^YAxis
0046 //! |
0047 //! FirstConjugateBranch
0048 //! |
0049 //! Other            |                Main
0050 //! --------------------- C ------------------------------>XAxis
0051 //! Branch           |                Branch
0052 //! |
0053 //! |
0054 //! SecondConjugateBranch
0055 //! |
0056 //! @endcode
0057 //! Warning
0058 //! The major radius can be less than the minor radius.
0059 //! See Also
0060 //! gce_MakeHypr2d which provides functions for more
0061 //! complex hyperbola constructions
0062 //! Geom2d_Hyperbola which provides additional functions
0063 //! for constructing hyperbolas and works, in particular, with
0064 //! the parametric equations of hyperbolas
0065 class gp_Hypr2d 
0066 {
0067 public:
0068 
0069   DEFINE_STANDARD_ALLOC
0070 
0071   //! Creates of an indefinite hyperbola.
0072   gp_Hypr2d()
0073   : majorRadius (RealLast()),
0074     minorRadius (RealLast())
0075   {}
0076 
0077   //! Creates a hyperbola with radii theMajorRadius and
0078   //! theMinorRadius, centered on the origin of theMajorAxis
0079   //! and where the unit vector of theMajorAxis is the "X
0080   //! Direction" of the local coordinate system of the
0081   //! hyperbola. This coordinate system is direct if theIsSense
0082   //! is true (the default value), and indirect if theIsSense is false.
0083   //! Warnings :
0084   //! It is yet  possible to create an Hyperbola with
0085   //! theMajorRadius <= theMinorRadius.
0086   //! Raises ConstructionError if theMajorRadius < 0.0 or theMinorRadius < 0.0
0087   gp_Hypr2d (const gp_Ax2d& theMajorAxis, const Standard_Real theMajorRadius,
0088             const Standard_Real theMinorRadius, const Standard_Boolean theIsSense = Standard_True)
0089   : majorRadius (theMajorRadius),
0090     minorRadius (theMinorRadius)
0091   {
0092     pos = gp_Ax22d (theMajorAxis, theIsSense);
0093     Standard_ConstructionError_Raise_if (theMinorRadius < 0.0 || theMajorRadius < 0.0,
0094       "gp_Hypr2d() - invalid construction parameters");
0095   }
0096 
0097   //! a hyperbola with radii theMajorRadius and
0098   //! theMinorRadius, positioned in the plane by coordinate system theA where:
0099   //! -   the origin of theA is the center of the hyperbola,
0100   //! -   the "X Direction" of theA defines the major axis of
0101   //! the hyperbola, that is, the major radius
0102   //! theMajorRadius is measured along this axis, and
0103   //! -   the "Y Direction" of theA defines the minor axis of
0104   //! the hyperbola, that is, the minor radius
0105   //! theMinorRadius is measured along this axis, and
0106   //! -   the orientation (direct or indirect sense) of theA
0107   //! gives the implicit orientation of the hyperbola.
0108   //! Warnings :
0109   //! It is yet  possible to create an Hyperbola with
0110   //! theMajorRadius <= theMinorRadius.
0111   //! Raises ConstructionError if theMajorRadius < 0.0 or theMinorRadius < 0.0
0112   gp_Hypr2d (const gp_Ax22d& theA, const Standard_Real theMajorRadius, const Standard_Real theMinorRadius)
0113   : pos (theA),
0114     majorRadius (theMajorRadius),
0115     minorRadius (theMinorRadius)
0116   {
0117     Standard_ConstructionError_Raise_if (theMinorRadius < 0.0 || theMajorRadius < 0.0,
0118                                          "gp_Hypr2d() - invalid construction parameters");
0119   }
0120 
0121   //! Modifies this hyperbola, by redefining its local
0122   //! coordinate system so that its origin becomes theP.
0123   void SetLocation (const gp_Pnt2d& theP) { pos.SetLocation (theP); }
0124 
0125   //! Modifies the major or minor radius of this hyperbola.
0126   //! Exceptions
0127   //! Standard_ConstructionError if theMajorRadius or
0128   //! MinorRadius is negative.
0129   void SetMajorRadius (const Standard_Real theMajorRadius)
0130   {
0131     Standard_ConstructionError_Raise_if (theMajorRadius < 0.0,
0132                                          "gp_Hypr2d::SetMajorRadius() - major radius should be greater or equal zero");
0133     majorRadius = theMajorRadius;
0134   }
0135 
0136   //! Modifies the major or minor radius of this hyperbola.
0137   //! Exceptions
0138   //! Standard_ConstructionError if MajorRadius or
0139   //! theMinorRadius is negative.
0140   void SetMinorRadius (const Standard_Real theMinorRadius)
0141   {
0142     Standard_ConstructionError_Raise_if (theMinorRadius < 0.0,
0143                                          "gp_Hypr2d::SetMinorRadius() - minor radius should be greater or equal zero");
0144     minorRadius = theMinorRadius;
0145   }
0146 
0147   //! Modifies this hyperbola, by redefining its local
0148   //! coordinate system so that it becomes theA.
0149   void SetAxis (const gp_Ax22d& theA) { pos.SetAxis (theA); }
0150 
0151   //! Changes the major axis of the hyperbola. The minor axis is
0152   //! recomputed and the location of the hyperbola too.
0153   void SetXAxis (const gp_Ax2d& theA) { pos.SetXAxis (theA); }
0154 
0155   //! Changes the minor axis of the hyperbola.The minor axis is
0156   //! recomputed and the location of the hyperbola too.
0157   void SetYAxis (const gp_Ax2d& theA) { pos.SetYAxis (theA); }
0158 
0159   //! In the local coordinate system of the hyperbola the equation of
0160   //! the hyperbola is (X*X)/(A*A) - (Y*Y)/(B*B) = 1.0 and the
0161   //! equation of the first asymptote is Y = (B/A)*X
0162   //! where A is the major radius of the hyperbola and B the minor
0163   //! radius of the hyperbola.
0164   //! Raises ConstructionError if MajorRadius = 0.0
0165   gp_Ax2d Asymptote1() const;
0166 
0167   //! In the local coordinate system of the hyperbola the equation of
0168   //! the hyperbola is (X*X)/(A*A) - (Y*Y)/(B*B) = 1.0 and the
0169   //! equation of the first asymptote is Y = -(B/A)*X
0170   //! where A is the major radius of the hyperbola and B the minor
0171   //! radius of the hyperbola.
0172   //! Raises ConstructionError if MajorRadius = 0.0
0173   gp_Ax2d Asymptote2() const;
0174 
0175   //! Computes the coefficients of the implicit equation of
0176   //! the hyperbola :
0177   //! theA * (X**2) + theB * (Y**2) + 2*theC*(X*Y) + 2*theD*X + 2*theE*Y + theF = 0.
0178   Standard_EXPORT void Coefficients (Standard_Real& theA, Standard_Real& theB, Standard_Real& theC,
0179                                      Standard_Real& theD, Standard_Real& theE, Standard_Real& theF) const;
0180 
0181   //! Computes the branch of hyperbola which is on the positive side of the
0182   //! "YAxis" of <me>.
0183   gp_Hypr2d ConjugateBranch1() const
0184   {
0185     gp_Dir2d aV (pos.YDirection());
0186     Standard_Boolean isSign = (pos.XDirection().Crossed (pos.YDirection())) >= 0.0;
0187     return gp_Hypr2d (gp_Ax2d (pos.Location(), aV), minorRadius, majorRadius, isSign);
0188   }
0189 
0190   //! Computes the branch of hyperbola which is on the negative side of the
0191   //! "YAxis" of <me>.
0192   gp_Hypr2d ConjugateBranch2() const
0193   {
0194     gp_Dir2d aV (pos.YDirection().Reversed());
0195     Standard_Boolean isSign = (pos.XDirection().Crossed (pos.YDirection())) >= 0.0;
0196     return gp_Hypr2d (gp_Ax2d (pos.Location(), aV), minorRadius, majorRadius, isSign);
0197   }
0198 
0199   //! Computes the directrix which is the line normal to the XAxis of the hyperbola
0200   //! in the local plane (Z = 0) at a distance d = MajorRadius / e
0201   //! from the center of the hyperbola, where e is the eccentricity of
0202   //! the hyperbola.
0203   //! This line is parallel to the "YAxis". The intersection point
0204   //! between the "Directrix1" and the "XAxis" is the "Location" point
0205   //! of the "Directrix1".
0206   //! This point is on the positive side of the "XAxis".
0207   gp_Ax2d Directrix1() const;
0208 
0209   //! This line is obtained by the symmetrical transformation
0210   //! of "Directrix1" with respect to the "YAxis" of the hyperbola.
0211   gp_Ax2d Directrix2() const;
0212 
0213   //! Returns the eccentricity of the hyperbola (e > 1).
0214   //! If f is the distance between the location of the hyperbola
0215   //! and the Focus1 then the eccentricity e = f / MajorRadius. Raises DomainError if MajorRadius = 0.0.
0216   Standard_Real Eccentricity() const
0217   {
0218     Standard_DomainError_Raise_if (majorRadius <= gp::Resolution(),
0219                                    "gp_Hypr2d::Eccentricity() - major radius is zero");
0220     return sqrt (majorRadius * majorRadius + minorRadius * minorRadius) / majorRadius;
0221   }
0222 
0223   //! Computes the focal distance. It is the distance between the
0224   //! "Location" of the hyperbola and "Focus1" or "Focus2".
0225   Standard_Real Focal() const
0226   {
0227     return 2.0 * sqrt (majorRadius * majorRadius + minorRadius * minorRadius);
0228   }
0229 
0230   //! Returns the first focus of the hyperbola. This focus is on the
0231   //! positive side of the "XAxis" of the hyperbola.
0232   gp_Pnt2d Focus1() const
0233   {
0234     Standard_Real aC = sqrt (majorRadius * majorRadius + minorRadius * minorRadius);
0235     return gp_Pnt2d (pos.Location().X() + aC * pos.XDirection().X(), pos.Location().Y() + aC * pos.XDirection().Y());
0236   }
0237 
0238   //! Returns the second focus of the hyperbola. This focus is on the
0239   //! negative side of the "XAxis" of the hyperbola.
0240   gp_Pnt2d Focus2() const
0241   {
0242     Standard_Real aC = sqrt(majorRadius * majorRadius + minorRadius * minorRadius);
0243     return gp_Pnt2d(pos.Location().X() - aC * pos.XDirection().X(), pos.Location().Y() - aC * pos.XDirection().Y());
0244   }
0245 
0246   //! Returns  the location point of the hyperbola.
0247   //! It is the intersection point between the "XAxis" and
0248   //! the "YAxis".
0249   const gp_Pnt2d& Location() const { return pos.Location(); }
0250 
0251   //! Returns the major radius of the hyperbola (it is the radius
0252   //! corresponding to the "XAxis" of the hyperbola).
0253   Standard_Real MajorRadius() const { return majorRadius; }
0254 
0255   //! Returns the minor radius of the hyperbola (it is the radius
0256   //! corresponding to the "YAxis" of the hyperbola).
0257   Standard_Real MinorRadius() const { return minorRadius; }
0258 
0259   //! Returns the branch of hyperbola obtained by doing the
0260   //! symmetrical transformation of <me> with respect to the
0261   //! "YAxis" of <me>.
0262   gp_Hypr2d OtherBranch() const
0263   {
0264     Standard_Boolean isSign = (pos.XDirection().Crossed (pos.YDirection())) >= 0.0;
0265     return gp_Hypr2d (gp_Ax2d (pos.Location(), pos.XDirection().Reversed()), majorRadius, minorRadius, isSign);
0266   }
0267 
0268   //! Returns p = (e * e - 1) * MajorRadius where e is the
0269   //! eccentricity of the hyperbola.
0270   //! Raises DomainError if MajorRadius = 0.0
0271   Standard_Real Parameter() const
0272   {
0273     Standard_DomainError_Raise_if (majorRadius <= gp::Resolution(),
0274                                    "gp_Hypr2d::Parameter() - major radius is zero");
0275     return (minorRadius * minorRadius) / majorRadius;
0276   }
0277 
0278   //! Returns the axisplacement of the hyperbola.
0279   const gp_Ax22d& Axis() const { return pos; }
0280 
0281   //! Computes an axis whose
0282   //! -   the origin is the center of this hyperbola, and
0283   //! -   the unit vector is the "X Direction" or "Y Direction"
0284   //! respectively of the local coordinate system of this hyperbola
0285   //! Returns the major axis of the hyperbola.
0286   gp_Ax2d XAxis() const { return pos.XAxis(); }
0287 
0288   //! Computes an axis whose
0289   //! -   the origin is the center of this hyperbola, and
0290   //! -   the unit vector is the "X Direction" or "Y Direction"
0291   //! respectively of the local coordinate system of this hyperbola
0292   //! Returns the minor axis of the hyperbola.
0293   gp_Ax2d YAxis() const { return pos.YAxis(); }
0294 
0295   void Reverse()
0296   {
0297     gp_Dir2d aTemp = pos.YDirection();
0298     aTemp.Reverse();
0299     pos.SetAxis (gp_Ax22d(pos.Location(), pos.XDirection(), aTemp));
0300   }
0301 
0302   //! Reverses the orientation of the local coordinate system
0303   //! of this hyperbola (the "Y Axis" is reversed). Therefore,
0304   //! the implicit orientation of this hyperbola is reversed.
0305   //! Note:
0306   //! -   Reverse assigns the result to this hyperbola, while
0307   //! -   Reversed creates a new one.
0308   Standard_NODISCARD gp_Hypr2d Reversed() const;
0309 
0310   //! Returns true if the local coordinate system is direct
0311   //! and false in the other case.
0312   Standard_Boolean IsDirect() const
0313   {
0314     return (pos.XDirection().Crossed (pos.YDirection())) >= 0.0;
0315   }
0316 
0317   Standard_EXPORT void Mirror (const gp_Pnt2d& theP);
0318 
0319   //! Performs the symmetrical transformation of an hyperbola with
0320   //! respect  to the point theP which is the center of the symmetry.
0321   Standard_NODISCARD Standard_EXPORT gp_Hypr2d Mirrored (const gp_Pnt2d& theP) const;
0322 
0323   Standard_EXPORT void Mirror (const gp_Ax2d& theA);
0324 
0325   //! Performs the symmetrical transformation of an hyperbola with
0326   //! respect to an axis placement which is the axis of the symmetry.
0327   Standard_NODISCARD Standard_EXPORT gp_Hypr2d Mirrored (const gp_Ax2d& theA) const;
0328 
0329   void Rotate (const gp_Pnt2d& theP, const Standard_Real theAng) { pos.Rotate (theP, theAng); }
0330 
0331   //! Rotates an hyperbola. theP is the center of the rotation.
0332   //! theAng is the angular value of the rotation in radians.
0333   Standard_NODISCARD gp_Hypr2d Rotated (const gp_Pnt2d& theP, const Standard_Real theAng) const
0334   {
0335     gp_Hypr2d aH = *this;
0336     aH.pos.Rotate (theP, theAng);
0337     return aH;
0338   }
0339 
0340   void Scale (const gp_Pnt2d& theP, const Standard_Real theS);
0341 
0342   //! Scales an hyperbola. <theS> is the scaling value.
0343   //! If <theS> is positive only the location point is
0344   //! modified. But if <theS> is negative the "XAxis" is
0345   //! reversed and the "YAxis" too.
0346   Standard_NODISCARD gp_Hypr2d Scaled (const gp_Pnt2d& theP, const Standard_Real theS) const;
0347 
0348   void Transform (const gp_Trsf2d& theT);
0349 
0350   //! Transforms an hyperbola with the transformation theT from
0351   //! class Trsf2d.
0352   Standard_NODISCARD gp_Hypr2d Transformed (const gp_Trsf2d& theT) const;
0353 
0354   void Translate (const gp_Vec2d& theV) { pos.Translate (theV); }
0355 
0356   //! Translates an hyperbola in the direction of the vector theV.
0357   //! The magnitude of the translation is the vector's magnitude.
0358   Standard_NODISCARD gp_Hypr2d Translated (const gp_Vec2d& theV) const
0359   {
0360     gp_Hypr2d aH = *this;
0361     aH.pos.Translate (theV);
0362     return aH;
0363   }
0364 
0365   void Translate(const gp_Pnt2d& theP1, const gp_Pnt2d& theP2) { pos.Translate (theP1, theP2); }
0366 
0367   //! Translates an hyperbola from the point theP1 to the point theP2.
0368   Standard_NODISCARD gp_Hypr2d Translated (const gp_Pnt2d& theP1, const gp_Pnt2d& theP2) const
0369   {
0370     gp_Hypr2d aH = *this;
0371     aH.pos.Translate (theP1, theP2);
0372     return aH;
0373   }
0374 
0375 private:
0376 
0377   gp_Ax22d pos;
0378   Standard_Real majorRadius;
0379   Standard_Real minorRadius;
0380 
0381 };
0382 
0383 //=======================================================================
0384 //function : Asymptote1
0385 // purpose :
0386 //=======================================================================
0387 inline gp_Ax2d gp_Hypr2d::Asymptote1() const 
0388 {
0389   Standard_ConstructionError_Raise_if (majorRadius <= gp::Resolution(),
0390                                        "gp_Hypr2d::Asymptote1() - major radius is zero");
0391   gp_Dir2d aVdir = pos.XDirection();
0392   gp_XY aCoord1 (pos.YDirection().XY());
0393   gp_XY aCoord2 = aCoord1.Multiplied (minorRadius / majorRadius);
0394   aCoord1.Add (aCoord2);
0395   aVdir.SetXY (aCoord1);
0396   return gp_Ax2d (pos.Location(), aVdir);
0397 }
0398 
0399 //=======================================================================
0400 //function : Asymptote2
0401 // purpose :
0402 //=======================================================================
0403 inline gp_Ax2d gp_Hypr2d::Asymptote2() const
0404 {
0405   Standard_ConstructionError_Raise_if (majorRadius <= gp::Resolution(),
0406                                        "gp_Hypr2d::Asymptote2() - major radius is zero");
0407   gp_Vec2d aVdir = pos.XDirection();
0408   gp_XY  aCoord1 (pos.YDirection().XY());
0409   gp_XY  aCoord2 = aCoord1.Multiplied (-minorRadius / majorRadius);
0410   aCoord1.Add (aCoord2);
0411   aVdir.SetXY (aCoord1);
0412   return gp_Ax2d (pos.Location(), aVdir);
0413 }
0414 
0415 //=======================================================================
0416 //function : Directrix1
0417 // purpose :
0418 //=======================================================================
0419 inline gp_Ax2d gp_Hypr2d::Directrix1() const 
0420 {
0421   Standard_Real anE = Eccentricity();
0422   gp_XY anOrig = pos.XDirection().XY();
0423   anOrig.Multiply (majorRadius / anE);
0424   anOrig.Add (pos.Location().XY());
0425   return gp_Ax2d (gp_Pnt2d (anOrig), gp_Dir2d (pos.YDirection()));
0426 }
0427 
0428 //=======================================================================
0429 //function : Directrix2
0430 // purpose :
0431 //=======================================================================
0432 inline gp_Ax2d gp_Hypr2d::Directrix2() const
0433 {
0434   Standard_Real anE = Eccentricity();
0435   gp_XY anOrig = pos.XDirection().XY();
0436   anOrig.Multiply (Parameter() / anE);
0437   anOrig.Add (Focus1().XY());
0438   return gp_Ax2d (gp_Pnt2d (anOrig), gp_Dir2d (pos.YDirection()));
0439 }
0440 
0441 //=======================================================================
0442 //function : Reversed
0443 // purpose :
0444 //=======================================================================
0445 inline gp_Hypr2d gp_Hypr2d::Reversed() const
0446 {
0447   gp_Hypr2d aH = *this;
0448   gp_Dir2d aTemp = pos.YDirection();
0449   aTemp.Reverse ();
0450   aH.pos.SetAxis (gp_Ax22d (pos.Location(),pos.XDirection(), aTemp));
0451   return aH;
0452 }
0453 
0454 //=======================================================================
0455 //function : Scale
0456 // purpose :
0457 //=======================================================================
0458 inline void gp_Hypr2d::Scale (const gp_Pnt2d& theP, const Standard_Real theS)
0459 { 
0460   majorRadius *= theS;
0461   if (majorRadius < 0)
0462   {
0463     majorRadius = -majorRadius;
0464   }
0465   minorRadius *= theS;
0466   if (minorRadius < 0)
0467   {
0468     minorRadius = -minorRadius;
0469   }
0470   pos.Scale (theP, theS);
0471 }
0472 
0473 //=======================================================================
0474 //function : Scaled
0475 // purpose :
0476 //=======================================================================
0477 inline gp_Hypr2d gp_Hypr2d::Scaled (const gp_Pnt2d& theP, const Standard_Real theS) const
0478 {
0479   gp_Hypr2d aH = *this;
0480   aH.majorRadius *= theS;
0481   if (aH.majorRadius < 0)
0482   {
0483     aH.majorRadius = -aH.majorRadius;
0484   }
0485   aH.minorRadius *= theS;
0486   if (aH.minorRadius < 0)
0487   {
0488     aH.minorRadius = -aH.minorRadius;
0489   }
0490   aH.pos.Scale (theP, theS);
0491   return aH; 
0492 }
0493 
0494 //=======================================================================
0495 //function : Transform
0496 // purpose :
0497 //=======================================================================
0498 inline void gp_Hypr2d::Transform (const gp_Trsf2d& theT)
0499 {
0500   majorRadius *= theT.ScaleFactor();
0501   if (majorRadius < 0)
0502   {
0503     majorRadius = -majorRadius;
0504   }
0505   minorRadius *= theT.ScaleFactor();
0506   if (minorRadius < 0)
0507   {
0508     minorRadius = -minorRadius;
0509   }
0510   pos.Transform (theT);
0511 }
0512 
0513 //=======================================================================
0514 //function : Transformed
0515 // purpose :
0516 //=======================================================================
0517 inline gp_Hypr2d gp_Hypr2d::Transformed (const gp_Trsf2d& theT) const
0518 {
0519   gp_Hypr2d aH = *this;
0520   aH.majorRadius *= theT.ScaleFactor();
0521   if (aH.majorRadius < 0)
0522   {
0523     aH.majorRadius = -aH.majorRadius;
0524   }
0525   aH.minorRadius *= theT.ScaleFactor();
0526   if (aH.minorRadius < 0)
0527   {
0528     aH.minorRadius = -aH.minorRadius;
0529   }
0530   aH.pos.Transform (theT);
0531   return aH;
0532 }
0533 
0534 #endif // _gp_Hypr2d_HeaderFile