+++ /dev/null
-// Copyright (c) 1995-1999 Matra Datavision
-// Copyright (c) 1999-2014 OPEN CASCADE SAS
-//
-// This file is part of Open CASCADE Technology software library.
-//
-// This library is free software; you can redistribute it and/or modify it under
-// the terms of the GNU Lesser General Public License version 2.1 as published
-// by the Free Software Foundation, with special exception defined in the file
-// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
-// distribution for complete text of the license and disclaimer of any warranty.
-//
-// Alternatively, this file may be used under the terms of Open CASCADE
-// commercial license or contractual agreement.
-
-#include <gp.hxx>
-#include <Standard_DomainError.hxx>
-#include <Standard_ConstructionError.hxx>
-
-inline gp_Hypr::gp_Hypr () :
-majorRadius(RealLast()),
-minorRadius(RealFirst())
-{ }
-
-inline gp_Hypr::gp_Hypr (const gp_Ax2& A2,
- const Standard_Real MajorRadius,
- const Standard_Real MinorRadius):
- pos(A2),
- majorRadius(MajorRadius),
- minorRadius(MinorRadius)
-{
- Standard_ConstructionError_Raise_if (MinorRadius < 0.0 || MajorRadius < 0.0,
- "gp_Hypr() - invalid construction parameters");
-}
-
-inline void gp_Hypr::SetAxis (const gp_Ax1& A1)
-{ pos.SetAxis (A1); }
-
-inline void gp_Hypr::SetLocation (const gp_Pnt& P)
-{ pos = gp_Ax2 (P, pos.Direction(), pos.XDirection()); }
-
-inline void gp_Hypr::SetMajorRadius (const Standard_Real R)
-{
- Standard_ConstructionError_Raise_if (R < 0.0,
- "gp_Hypr::SetMajorRadius() - major radius should be greater or equal zero");
- majorRadius = R;
-}
-
-inline void gp_Hypr::SetMinorRadius (const Standard_Real R)
-{
- Standard_ConstructionError_Raise_if (R < 0.0,
- "gp_Hypr::SetMinorRadius() - minor radius should be greater or equal zero");
- minorRadius = R;
-}
-
-inline void gp_Hypr::SetPosition (const gp_Ax2& A2)
-{ pos = A2; }
-
-inline gp_Ax1 gp_Hypr::Asymptote1 () const
-{
- Standard_ConstructionError_Raise_if (majorRadius <= gp::Resolution(),
- "gp_Hypr::Asymptote1() - major radius is zero");
- gp_Vec V1 = gp_Vec (pos.YDirection());
- V1.Multiply (minorRadius / majorRadius);
- gp_Vec V = gp_Vec (pos.XDirection());
- V.Add (V1);
- return gp_Ax1(pos.Location(), gp_Dir(V));
-}
-
-inline gp_Ax1 gp_Hypr::Asymptote2 () const
-{
- Standard_ConstructionError_Raise_if (majorRadius <= gp::Resolution(),
- "gp_Hypr::Asymptote1() - major radius is zero");
- gp_Vec V1 = gp_Vec (pos.YDirection());
- V1.Multiply (-minorRadius / majorRadius);
- gp_Vec V = gp_Vec (pos.XDirection());
- V.Add (V1);
- return gp_Ax1( pos.Location(), gp_Dir(V));
-}
-
-inline const gp_Ax1& gp_Hypr::Axis () const
-{ return pos.Axis(); }
-
-inline gp_Hypr gp_Hypr::ConjugateBranch1 () const
-{
- return gp_Hypr (gp_Ax2(pos.Location(), pos.Direction(), pos.YDirection()),
- minorRadius,
- majorRadius);
-}
-
-inline gp_Hypr gp_Hypr::ConjugateBranch2 () const
-{
- gp_Dir D = pos.YDirection();
- D.Reverse ();
- return gp_Hypr (gp_Ax2(pos.Location(), pos.Direction(), D),
- minorRadius,
- majorRadius);
-}
-
-inline gp_Ax1 gp_Hypr::Directrix1 () const
-{
- Standard_Real E = Eccentricity();
- gp_XYZ Orig = pos.XDirection().XYZ();
- Orig.Multiply (majorRadius/E);
- Orig.Add (pos.Location().XYZ());
- return gp_Ax1 (gp_Pnt(Orig), pos.YDirection());
-}
-
-inline gp_Ax1 gp_Hypr::Directrix2 () const
-{
- Standard_Real E = Eccentricity();
- gp_XYZ Orig = pos.XDirection().XYZ();
- Orig.Multiply (-majorRadius/E);
- Orig.Add (pos.Location().XYZ());
- return gp_Ax1 (gp_Pnt(Orig), pos.YDirection());
-}
-
-inline Standard_Real gp_Hypr::Eccentricity () const
-{
- Standard_DomainError_Raise_if (majorRadius <= gp::Resolution(),
- "gp_Hypr::Eccentricity() - major radius is zero");
- return sqrt(majorRadius * majorRadius +
- minorRadius * minorRadius) / majorRadius;
-}
-
-inline Standard_Real gp_Hypr::Focal () const
-{
- return 2.0 * sqrt(majorRadius * majorRadius +
- minorRadius * minorRadius);
-}
-
-inline gp_Pnt gp_Hypr::Focus1 () const
-{
- Standard_Real C = sqrt(majorRadius * majorRadius +
- minorRadius * minorRadius);
- const gp_Pnt& PP = pos.Location ();
- const gp_Dir& DD = pos.XDirection();
- return gp_Pnt (PP.X() + C * DD.X(),
- PP.Y() + C * DD.Y(),
- PP.Z() + C * DD.Z());
-}
-
-inline gp_Pnt gp_Hypr::Focus2 () const
-{
- Standard_Real C = sqrt(majorRadius * majorRadius +
- minorRadius * minorRadius);
- const gp_Pnt& PP = pos.Location ();
- const gp_Dir& DD = pos.XDirection();
- return gp_Pnt (PP.X() - C * DD.X(),
- PP.Y() - C * DD.Y(),
- PP.Z() - C * DD.Z());
-}
-
-inline const gp_Pnt& gp_Hypr::Location () const
-{ return pos.Location(); }
-
-inline Standard_Real gp_Hypr::MajorRadius() const
-{ return majorRadius; }
-
-inline Standard_Real gp_Hypr::MinorRadius() const
-{ return minorRadius; }
-
-inline gp_Hypr gp_Hypr::OtherBranch () const
-{
- gp_Dir D = pos.XDirection ();
- D.Reverse ();
- return gp_Hypr (gp_Ax2(pos.Location(), pos.Direction(), D),
- majorRadius, minorRadius);
-}
-
-inline Standard_Real gp_Hypr::Parameter() const
-{
- Standard_DomainError_Raise_if (majorRadius <= gp::Resolution(),
- "gp_Hypr::Parameter() - major radius is zero");
- return (minorRadius * minorRadius) / majorRadius;
-}
-
-inline const gp_Ax2& gp_Hypr::Position() const
-{ return pos; }
-
-inline gp_Ax1 gp_Hypr::XAxis () const
-{return gp_Ax1 (pos.Location(), pos.XDirection());}
-
-inline gp_Ax1 gp_Hypr::YAxis () const
-{return gp_Ax1 (pos.Location(), pos.YDirection());}
-
-inline void gp_Hypr::Rotate (const gp_Ax1& A1,
- const Standard_Real Ang)
-{ pos.Rotate(A1, Ang); }
-
-inline gp_Hypr gp_Hypr::Rotated (const gp_Ax1& A1,
- const Standard_Real Ang) const
-{
- gp_Hypr H = *this;
- H.pos.Rotate(A1, Ang);
- return H;
-}
-
-inline void gp_Hypr::Scale (const gp_Pnt& P,
- const Standard_Real S)
-{
- majorRadius *= S;
- if (majorRadius < 0) majorRadius = - majorRadius;
- minorRadius *= S;
- if (minorRadius < 0) minorRadius = - minorRadius;
- pos.Scale(P, S);
-}
-
-inline gp_Hypr gp_Hypr::Scaled (const gp_Pnt& P,
- const Standard_Real S) const
-{
- gp_Hypr H = *this;
- H.majorRadius *= S;
- if (H.majorRadius < 0) H.majorRadius = - H.majorRadius;
- H.minorRadius *= S;
- if (H.minorRadius < 0) H.minorRadius = - H.minorRadius;
- H.pos.Scale(P, S);
- return H;
-}
-
-inline void gp_Hypr::Transform (const gp_Trsf& T)
-{
- majorRadius *= T.ScaleFactor();
- if (majorRadius < 0) majorRadius = - majorRadius;
- minorRadius *= T.ScaleFactor();
- if (minorRadius < 0) minorRadius = - minorRadius;
- pos.Transform(T);
-}
-
-inline gp_Hypr gp_Hypr::Transformed (const gp_Trsf& T) const
-{
- gp_Hypr H = *this;
- H.majorRadius *= T.ScaleFactor();
- if (H.majorRadius < 0) H.majorRadius = - H.majorRadius;
- H.minorRadius *= T.ScaleFactor();
- if (H.minorRadius < 0) H.minorRadius = - H.minorRadius;
- H.pos.Transform(T);
- return H;
-}
-
-inline void gp_Hypr::Translate (const gp_Vec& V)
-{ pos.Translate(V); }
-
-inline gp_Hypr gp_Hypr::Translated (const gp_Vec& V) const
-{
- gp_Hypr H = *this;
- H.pos.Translate(V);
- return H;
-}
-
-inline void gp_Hypr::Translate (const gp_Pnt& P1,
- const gp_Pnt& P2)
-{pos.Translate(P1,P2);}
-
-inline gp_Hypr gp_Hypr::Translated (const gp_Pnt& P1,
- const gp_Pnt& P2) const
-{
- gp_Hypr H = *this;
- H.pos.Translate(P1, P2);
- return H;
-}
-