// This file is generated by WOK (CPPExt).
// Please do not edit this file; modify original file instead.
// The copyright and license terms as defined for the original file apply to 
// this header file considered to be the "object code" form of the original source.

#ifndef _ElCLib_HeaderFile
#define _ElCLib_HeaderFile

#include <Standard.hxx>
#include <Standard_DefineAlloc.hxx>
#include <Standard_Macro.hxx>

#include <Standard_Real.hxx>
#include <gp_Pnt.hxx>
#include <Standard_Integer.hxx>
#include <gp_Vec.hxx>
#include <gp_Pnt2d.hxx>
#include <gp_Vec2d.hxx>
class gp_Pnt;
class gp_Lin;
class gp_Circ;
class gp_Elips;
class gp_Hypr;
class gp_Parab;
class gp_Vec;
class gp_Lin2d;
class gp_Circ2d;
class gp_Elips2d;
class gp_Hypr2d;
class gp_Parab2d;
class gp_Pnt2d;
class gp_Vec2d;
class gp_Ax1;
class gp_Ax2;
class gp_Ax2d;
class gp_Ax22d;
class gp_Dir;
class gp_Dir2d;


//! Provides functions for basic geometric computations on
//! elementary curves such as conics and lines in 2D and 3D space.
//! This includes:
//! -   calculation of a point or derived vector on a 2D or
//! 3D curve where:
//! -   the curve is provided by the gp package, or
//! defined in reference form (as in the gp package),
//! and
//! -   the point is defined by a parameter,
//! -   evaluation of the parameter corresponding to a point
//! on a 2D or 3D curve from gp,
//! -   various elementary computations which allow you to
//! position parameterized values within the period of a curve.
//! Notes:
//! -   ElCLib stands for Elementary Curves Library.
//! -   If the curves provided by the gp package are not
//! explicitly parameterized, they still have an implicit
//! parameterization, analogous to that which they infer
//! for the equivalent Geom or Geom2d curves.
class ElCLib 
{
public:

  DEFINE_STANDARD_ALLOC

  
  //! Return a value in   the  range <UFirst, ULast>  by
  //! adding or removing the period <ULast -  UFirst> to
  //! <U>.
  Standard_EXPORT static   Standard_Real InPeriod (const Standard_Real U, const Standard_Real UFirst, const Standard_Real ULast) ;
  
  //! Adjust U1 and  U2 in the  parametric range  UFirst
  //! Ulast of a periodic curve, where ULast -
  //! UFirst is its period. To do this, this function:
  //! -   sets U1 in the range [ UFirst, ULast ] by
  //! adding/removing the period to/from the value U1, then
  //! -   sets U2 in the range [ U1, U1 + period ] by
  //! adding/removing the period to/from the value U2.
  //! Precision is used to test the equalities.
  Standard_EXPORT static   void AdjustPeriodic (const Standard_Real UFirst, const Standard_Real ULast, const Standard_Real Precision, Standard_Real& U1, Standard_Real& U2) ;
  
  //! For elementary curves (lines, circles and conics) from
  //! the gp package, computes the point of parameter U.
  //! The result is either:
  //! -   a gp_Pnt point for a curve in 3D space, or
  //! -   a gp_Pnt2d point for a curve in 2D space.
  Standard_EXPORT static   gp_Pnt Value (const Standard_Real U, const gp_Lin& L) ;
  
    static   gp_Pnt Value (const Standard_Real U, const gp_Circ& C) ;
  
    static   gp_Pnt Value (const Standard_Real U, const gp_Elips& E) ;
  
    static   gp_Pnt Value (const Standard_Real U, const gp_Hypr& H) ;
  
    static   gp_Pnt Value (const Standard_Real U, const gp_Parab& Prb) ;
  

  //! For elementary curves (lines, circles and conics) from the
  //! gp package, computes:
  //! -   the point P of parameter U, and
  //! -   the first derivative vector V1 at this point.
  //! The results P and V1 are either:
  //! -   a gp_Pnt point and a gp_Vec vector, for a curve in 3D  space, or
  //! -   a gp_Pnt2d point and a gp_Vec2d vector, for a curve in 2D space.
  Standard_EXPORT static   void D1 (const Standard_Real U, const gp_Lin& L, gp_Pnt& P, gp_Vec& V1) ;
  
    static   void D1 (const Standard_Real U, const gp_Circ& C, gp_Pnt& P, gp_Vec& V1) ;
  
    static   void D1 (const Standard_Real U, const gp_Elips& E, gp_Pnt& P, gp_Vec& V1) ;
  
    static   void D1 (const Standard_Real U, const gp_Hypr& H, gp_Pnt& P, gp_Vec& V1) ;
  
    static   void D1 (const Standard_Real U, const gp_Parab& Prb, gp_Pnt& P, gp_Vec& V1) ;
  
  //! For elementary curves (circles and conics) from the gp
  //! package, computes:
  //! - the point P of parameter U, and
  //! - the first and second derivative vectors V1 and V2 at this point.
  //! The results, P, V1 and V2, are either:
  //! -   a gp_Pnt point and two gp_Vec vectors, for a curve in 3D space, or
  //! -   a gp_Pnt2d point and two gp_Vec2d vectors, for a curve in 2D space.
  Standard_EXPORT static   void D2 (const Standard_Real U, const gp_Circ& C, gp_Pnt& P, gp_Vec& V1, gp_Vec& V2) ;
  
    static   void D2 (const Standard_Real U, const gp_Elips& E, gp_Pnt& P, gp_Vec& V1, gp_Vec& V2) ;
  
    static   void D2 (const Standard_Real U, const gp_Hypr& H, gp_Pnt& P, gp_Vec& V1, gp_Vec& V2) ;
  
    static   void D2 (const Standard_Real U, const gp_Parab& Prb, gp_Pnt& P, gp_Vec& V1, gp_Vec& V2) ;
  
  //! For elementary curves (circles, ellipses and hyperbolae)
  //! from the gp package, computes:
  //! -   the point P of parameter U, and
  //! -   the first, second and third derivative vectors V1, V2
  //! and V3 at this point.
  //! The results, P, V1, V2 and V3, are either:
  //! -   a gp_Pnt point and three gp_Vec vectors, for a curve in 3D space, or
  //! -   a gp_Pnt2d point and three gp_Vec2d vectors, for a curve in 2D space.
  Standard_EXPORT static   void D3 (const Standard_Real U, const gp_Circ& C, gp_Pnt& P, gp_Vec& V1, gp_Vec& V2, gp_Vec& V3) ;
  
    static   void D3 (const Standard_Real U, const gp_Elips& E, gp_Pnt& P, gp_Vec& V1, gp_Vec& V2, gp_Vec& V3) ;
  
  Standard_EXPORT static   void D3 (const Standard_Real U, const gp_Hypr& H, gp_Pnt& P, gp_Vec& V1, gp_Vec& V2, gp_Vec& V3) ;
  

  //! For elementary curves (lines, circles and conics) from
  //! the gp package, computes the vector corresponding to
  //! the Nth derivative at the point of parameter U. The result is either:
  //! -   a gp_Vec vector for a curve in 3D space, or
  //! -   a gp_Vec2d vector for a curve in 2D space.
  //! In the following functions N is the order of derivation
  //! and should be greater than 0
  Standard_EXPORT static   gp_Vec DN (const Standard_Real U, const gp_Lin& L, const Standard_Integer N) ;
  
    static   gp_Vec DN (const Standard_Real U, const gp_Circ& C, const Standard_Integer N) ;
  
    static   gp_Vec DN (const Standard_Real U, const gp_Elips& E, const Standard_Integer N) ;
  
    static   gp_Vec DN (const Standard_Real U, const gp_Hypr& H, const Standard_Integer N) ;
  
    static   gp_Vec DN (const Standard_Real U, const gp_Parab& Prb, const Standard_Integer N) ;
  
    static   gp_Pnt2d Value (const Standard_Real U, const gp_Lin2d& L) ;
  
    static   gp_Pnt2d Value (const Standard_Real U, const gp_Circ2d& C) ;
  
    static   gp_Pnt2d Value (const Standard_Real U, const gp_Elips2d& E) ;
  
    static   gp_Pnt2d Value (const Standard_Real U, const gp_Hypr2d& H) ;
  
    static   gp_Pnt2d Value (const Standard_Real U, const gp_Parab2d& Prb) ;
  
    static   void D1 (const Standard_Real U, const gp_Lin2d& L, gp_Pnt2d& P, gp_Vec2d& V1) ;
  
    static   void D1 (const Standard_Real U, const gp_Circ2d& C, gp_Pnt2d& P, gp_Vec2d& V1) ;
  
    static   void D1 (const Standard_Real U, const gp_Elips2d& E, gp_Pnt2d& P, gp_Vec2d& V1) ;
  
    static   void D1 (const Standard_Real U, const gp_Hypr2d& H, gp_Pnt2d& P, gp_Vec2d& V1) ;
  
    static   void D1 (const Standard_Real U, const gp_Parab2d& Prb, gp_Pnt2d& P, gp_Vec2d& V1) ;
  
    static   void D2 (const Standard_Real U, const gp_Circ2d& C, gp_Pnt2d& P, gp_Vec2d& V1, gp_Vec2d& V2) ;
  
    static   void D2 (const Standard_Real U, const gp_Elips2d& E, gp_Pnt2d& P, gp_Vec2d& V1, gp_Vec2d& V2) ;
  
    static   void D2 (const Standard_Real U, const gp_Hypr2d& H, gp_Pnt2d& P, gp_Vec2d& V1, gp_Vec2d& V2) ;
  
    static   void D2 (const Standard_Real U, const gp_Parab2d& Prb, gp_Pnt2d& P, gp_Vec2d& V1, gp_Vec2d& V2) ;
  
    static   void D3 (const Standard_Real U, const gp_Circ2d& C, gp_Pnt2d& P, gp_Vec2d& V1, gp_Vec2d& V2, gp_Vec2d& V3) ;
  
    static   void D3 (const Standard_Real U, const gp_Elips2d& E, gp_Pnt2d& P, gp_Vec2d& V1, gp_Vec2d& V2, gp_Vec2d& V3) ;
  

  //! In the following functions N is the order of derivation
  //! and should be greater than 0
    static   void D3 (const Standard_Real U, const gp_Hypr2d& H, gp_Pnt2d& P, gp_Vec2d& V1, gp_Vec2d& V2, gp_Vec2d& V3) ;
  
    static   gp_Vec2d DN (const Standard_Real U, const gp_Lin2d& L, const Standard_Integer N) ;
  
    static   gp_Vec2d DN (const Standard_Real U, const gp_Circ2d& C, const Standard_Integer N) ;
  
    static   gp_Vec2d DN (const Standard_Real U, const gp_Elips2d& E, const Standard_Integer N) ;
  
    static   gp_Vec2d DN (const Standard_Real U, const gp_Hypr2d& H, const Standard_Integer N) ;
  
    static   gp_Vec2d DN (const Standard_Real U, const gp_Parab2d& Prb, const Standard_Integer N) ;
  
  //! Curve evaluation
  //! The following basis functions compute the derivatives on
  //! elementary curves defined by their geometric characteristics.
  //! These functions can be called without constructing a conic
  //! from package gp. They are called by the previous functions.
  //! Example :
  //! A circle is defined by its position and its radius.
  Standard_EXPORT static   gp_Pnt LineValue (const Standard_Real U, const gp_Ax1& Pos) ;
  
  Standard_EXPORT static   gp_Pnt CircleValue (const Standard_Real U, const gp_Ax2& Pos, const Standard_Real Radius) ;
  
  Standard_EXPORT static   gp_Pnt EllipseValue (const Standard_Real U, const gp_Ax2& Pos, const Standard_Real MajorRadius, const Standard_Real MinorRadius) ;
  
  Standard_EXPORT static   gp_Pnt HyperbolaValue (const Standard_Real U, const gp_Ax2& Pos, const Standard_Real MajorRadius, const Standard_Real MinorRadius) ;
  
  Standard_EXPORT static   gp_Pnt ParabolaValue (const Standard_Real U, const gp_Ax2& Pos, const Standard_Real Focal) ;
  
  Standard_EXPORT static   void LineD1 (const Standard_Real U, const gp_Ax1& Pos, gp_Pnt& P, gp_Vec& V1) ;
  
  Standard_EXPORT static   void CircleD1 (const Standard_Real U, const gp_Ax2& Pos, const Standard_Real Radius, gp_Pnt& P, gp_Vec& V1) ;
  
  Standard_EXPORT static   void EllipseD1 (const Standard_Real U, const gp_Ax2& Pos, const Standard_Real MajorRadius, const Standard_Real MinorRadius, gp_Pnt& P, gp_Vec& V1) ;
  
  Standard_EXPORT static   void HyperbolaD1 (const Standard_Real U, const gp_Ax2& Pos, const Standard_Real MajorRadius, const Standard_Real MinorRadius, gp_Pnt& P, gp_Vec& V1) ;
  
  Standard_EXPORT static   void ParabolaD1 (const Standard_Real U, const gp_Ax2& Pos, const Standard_Real Focal, gp_Pnt& P, gp_Vec& V1) ;
  
  Standard_EXPORT static   void CircleD2 (const Standard_Real U, const gp_Ax2& Pos, const Standard_Real Radius, gp_Pnt& P, gp_Vec& V1, gp_Vec& V2) ;
  
  Standard_EXPORT static   void EllipseD2 (const Standard_Real U, const gp_Ax2& Pos, const Standard_Real MajorRadius, const Standard_Real MinorRadius, gp_Pnt& P, gp_Vec& V1, gp_Vec& V2) ;
  
  Standard_EXPORT static   void HyperbolaD2 (const Standard_Real U, const gp_Ax2& Pos, const Standard_Real MajorRadius, const Standard_Real MinorRadius, gp_Pnt& P, gp_Vec& V1, gp_Vec& V2) ;
  
  Standard_EXPORT static   void ParabolaD2 (const Standard_Real U, const gp_Ax2& Pos, const Standard_Real Focal, gp_Pnt& P, gp_Vec& V1, gp_Vec& V2) ;
  
  Standard_EXPORT static   void CircleD3 (const Standard_Real U, const gp_Ax2& Pos, const Standard_Real Radius, gp_Pnt& P, gp_Vec& V1, gp_Vec& V2, gp_Vec& V3) ;
  
  Standard_EXPORT static   void EllipseD3 (const Standard_Real U, const gp_Ax2& Pos, const Standard_Real MajorRadius, const Standard_Real MinorRadius, gp_Pnt& P, gp_Vec& V1, gp_Vec& V2, gp_Vec& V3) ;
  
  Standard_EXPORT static   void HyperbolaD3 (const Standard_Real U, const gp_Ax2& Pos, const Standard_Real MajorRadius, const Standard_Real MinorRadius, gp_Pnt& P, gp_Vec& V1, gp_Vec& V2, gp_Vec& V3) ;
  

  //! In the following functions N is the order of derivation
  //! and should be greater than 0
  Standard_EXPORT static   gp_Vec LineDN (const Standard_Real U, const gp_Ax1& Pos, const Standard_Integer N) ;
  
  Standard_EXPORT static   gp_Vec CircleDN (const Standard_Real U, const gp_Ax2& Pos, const Standard_Real Radius, const Standard_Integer N) ;
  
  Standard_EXPORT static   gp_Vec EllipseDN (const Standard_Real U, const gp_Ax2& Pos, const Standard_Real MajorRadius, const Standard_Real MinorRadius, const Standard_Integer N) ;
  
  Standard_EXPORT static   gp_Vec HyperbolaDN (const Standard_Real U, const gp_Ax2& Pos, const Standard_Real MajorRadius, const Standard_Real MinorRadius, const Standard_Integer N) ;
  
  Standard_EXPORT static   gp_Vec ParabolaDN (const Standard_Real U, const gp_Ax2& Pos, const Standard_Real Focal, const Standard_Integer N) ;
  
  Standard_EXPORT static   gp_Pnt2d LineValue (const Standard_Real U, const gp_Ax2d& Pos) ;
  
  Standard_EXPORT static   gp_Pnt2d CircleValue (const Standard_Real U, const gp_Ax22d& Pos, const Standard_Real Radius) ;
  
  Standard_EXPORT static   gp_Pnt2d EllipseValue (const Standard_Real U, const gp_Ax22d& Pos, const Standard_Real MajorRadius, const Standard_Real MinorRadius) ;
  
  Standard_EXPORT static   gp_Pnt2d HyperbolaValue (const Standard_Real U, const gp_Ax22d& Pos, const Standard_Real MajorRadius, const Standard_Real MinorRadius) ;
  
  Standard_EXPORT static   gp_Pnt2d ParabolaValue (const Standard_Real U, const gp_Ax22d& Pos, const Standard_Real Focal) ;
  
  Standard_EXPORT static   void LineD1 (const Standard_Real U, const gp_Ax2d& Pos, gp_Pnt2d& P, gp_Vec2d& V1) ;
  
  Standard_EXPORT static   void CircleD1 (const Standard_Real U, const gp_Ax22d& Pos, const Standard_Real Radius, gp_Pnt2d& P, gp_Vec2d& V1) ;
  
  Standard_EXPORT static   void EllipseD1 (const Standard_Real U, const gp_Ax22d& Pos, const Standard_Real MajorRadius, const Standard_Real MinorRadius, gp_Pnt2d& P, gp_Vec2d& V1) ;
  
  Standard_EXPORT static   void HyperbolaD1 (const Standard_Real U, const gp_Ax22d& Pos, const Standard_Real MajorRadius, const Standard_Real MinorRadius, gp_Pnt2d& P, gp_Vec2d& V1) ;
  
  Standard_EXPORT static   void ParabolaD1 (const Standard_Real U, const gp_Ax22d& Pos, const Standard_Real Focal, gp_Pnt2d& P, gp_Vec2d& V1) ;
  
  Standard_EXPORT static   void CircleD2 (const Standard_Real U, const gp_Ax22d& Pos, const Standard_Real Radius, gp_Pnt2d& P, gp_Vec2d& V1, gp_Vec2d& V2) ;
  
  Standard_EXPORT static   void EllipseD2 (const Standard_Real U, const gp_Ax22d& Pos, const Standard_Real MajorRadius, const Standard_Real MinorRadius, gp_Pnt2d& P, gp_Vec2d& V1, gp_Vec2d& V2) ;
  
  Standard_EXPORT static   void HyperbolaD2 (const Standard_Real U, const gp_Ax22d& Pos, const Standard_Real MajorRadius, const Standard_Real MinorRadius, gp_Pnt2d& P, gp_Vec2d& V1, gp_Vec2d& V2) ;
  
  Standard_EXPORT static   void ParabolaD2 (const Standard_Real U, const gp_Ax22d& Pos, const Standard_Real Focal, gp_Pnt2d& P, gp_Vec2d& V1, gp_Vec2d& V2) ;
  
  Standard_EXPORT static   void CircleD3 (const Standard_Real U, const gp_Ax22d& Pos, const Standard_Real Radius, gp_Pnt2d& P, gp_Vec2d& V1, gp_Vec2d& V2, gp_Vec2d& V3) ;
  
  Standard_EXPORT static   void EllipseD3 (const Standard_Real U, const gp_Ax22d& Pos, const Standard_Real MajorRadius, const Standard_Real MinorRadius, gp_Pnt2d& P, gp_Vec2d& V1, gp_Vec2d& V2, gp_Vec2d& V3) ;
  

  //! In the following functions N is the order of derivation
  //! and should be greater than 0
  Standard_EXPORT static   void HyperbolaD3 (const Standard_Real U, const gp_Ax22d& Pos, const Standard_Real MajorRadius, const Standard_Real MinorRadius, gp_Pnt2d& P, gp_Vec2d& V1, gp_Vec2d& V2, gp_Vec2d& V3) ;
  
  Standard_EXPORT static   gp_Vec2d LineDN (const Standard_Real U, const gp_Ax2d& Pos, const Standard_Integer N) ;
  
  Standard_EXPORT static   gp_Vec2d CircleDN (const Standard_Real U, const gp_Ax22d& Pos, const Standard_Real Radius, const Standard_Integer N) ;
  
  Standard_EXPORT static   gp_Vec2d EllipseDN (const Standard_Real U, const gp_Ax22d& Pos, const Standard_Real MajorRadius, const Standard_Real MinorRadius, const Standard_Integer N) ;
  
  Standard_EXPORT static   gp_Vec2d HyperbolaDN (const Standard_Real U, const gp_Ax22d& Pos, const Standard_Real MajorRadius, const Standard_Real MinorRadius, const Standard_Integer N) ;
  

  //! The following functions compute the parametric value corresponding
  //! to a given point on a elementary curve. The point should be on the
  //! curve.
  Standard_EXPORT static   gp_Vec2d ParabolaDN (const Standard_Real U, const gp_Ax22d& Pos, const Standard_Real Focal, const Standard_Integer N) ;
  

  //! Computes the parameter value of the point P on the given curve.
  //! Note: In its local coordinate system, the parametric
  //! equation of the curve is given by the following:
  //! -   for the line L: P(U) = Po + U*Vo
  //! where Po is the origin and Vo the unit vector of its positioning axis.
  //! -   for the circle C: X(U) = Radius*Cos(U), Y(U) = Radius*Sin(U)
  //! -   for the ellipse E: X(U) = MajorRadius*Cos(U). Y(U) = MinorRadius*Sin(U)
  //! -   for the hyperbola H: X(U) = MajorRadius*Ch(U), Y(U) = MinorRadius*Sh(U)
  //! -   for the parabola Prb:
  //! X(U) = U**2 / (2*p)
  //! Y(U) = U
  //! where p is the distance between the focus and the directrix.
  //! Warning
  //! The point P must be on the curve. These functions are
  //! not protected, however, and if point P is not on the
  //! curve, an exception may be raised.
  Standard_EXPORT static   Standard_Real Parameter (const gp_Lin& L, const gp_Pnt& P) ;
  
  //! parametrization
  //! P (U) = L.Location() + U * L.Direction()
    static   Standard_Real Parameter (const gp_Lin2d& L, const gp_Pnt2d& P) ;
  
    static   Standard_Real Parameter (const gp_Circ& C, const gp_Pnt& P) ;
  
  //! parametrization
  //! In the local coordinate system of the circle
  //! X (U) = Radius * Cos (U)
  //! Y (U) = Radius * Sin (U)
    static   Standard_Real Parameter (const gp_Circ2d& C, const gp_Pnt2d& P) ;
  
    static   Standard_Real Parameter (const gp_Elips& E, const gp_Pnt& P) ;
  
  //! parametrization
  //! In the local coordinate system of the Ellipse
  //! X (U) = MajorRadius * Cos (U)
  //! Y (U) = MinorRadius * Sin (U)
    static   Standard_Real Parameter (const gp_Elips2d& E, const gp_Pnt2d& P) ;
  
    static   Standard_Real Parameter (const gp_Hypr& H, const gp_Pnt& P) ;
  
  //! parametrization
  //! In the local coordinate system of the Hyperbola
  //! X (U) = MajorRadius * Ch (U)
  //! Y (U) = MinorRadius * Sh (U)
    static   Standard_Real Parameter (const gp_Hypr2d& H, const gp_Pnt2d& P) ;
  
    static   Standard_Real Parameter (const gp_Parab& Prb, const gp_Pnt& P) ;
  
  //! parametrization
  //! In the local coordinate system of the parabola
  //! Y**2 = (2*P) * X where P is the distance between the focus
  //! and the directrix.
    static   Standard_Real Parameter (const gp_Parab2d& Prb, const gp_Pnt2d& P) ;
  
  Standard_EXPORT static   Standard_Real LineParameter (const gp_Ax1& Pos, const gp_Pnt& P) ;
  
  //! parametrization
  //! P (U) = L.Location() + U * L.Direction()
  Standard_EXPORT static   Standard_Real LineParameter (const gp_Ax2d& Pos, const gp_Pnt2d& P) ;
  
  Standard_EXPORT static   Standard_Real CircleParameter (const gp_Ax2& Pos, const gp_Pnt& P) ;
  
  //! Pos is the Axis of the Circle
  //! parametrization
  //! In the local coordinate system of the circle
  //! X (U) = Radius * Cos (U)
  //! Y (U) = Radius * Sin (U)
  Standard_EXPORT static   Standard_Real CircleParameter (const gp_Ax22d& Pos, const gp_Pnt2d& P) ;
  
  Standard_EXPORT static   Standard_Real EllipseParameter (const gp_Ax2& Pos, const Standard_Real MajorRadius, const Standard_Real MinorRadius, const gp_Pnt& P) ;
  
  //! Pos is the Axis of the Ellipse
  //! parametrization
  //! In the local coordinate system of the Ellipse
  //! X (U) = MajorRadius * Cos (U)
  //! Y (U) = MinorRadius * Sin (U)
  Standard_EXPORT static   Standard_Real EllipseParameter (const gp_Ax22d& Pos, const Standard_Real MajorRadius, const Standard_Real MinorRadius, const gp_Pnt2d& P) ;
  
  Standard_EXPORT static   Standard_Real HyperbolaParameter (const gp_Ax2& Pos, const Standard_Real MajorRadius, const Standard_Real MinorRadius, const gp_Pnt& P) ;
  
  //! Pos is the Axis of the Hyperbola
  //! parametrization
  //! In the local coordinate system of the Hyperbola
  //! X (U) = MajorRadius * Ch (U)
  //! Y (U) = MinorRadius * Sh (U)
  Standard_EXPORT static   Standard_Real HyperbolaParameter (const gp_Ax22d& Pos, const Standard_Real MajorRadius, const Standard_Real MinorRadius, const gp_Pnt2d& P) ;
  
  Standard_EXPORT static   Standard_Real ParabolaParameter (const gp_Ax2& Pos, const gp_Pnt& P) ;
  
  //! Pos is the mirror axis of the parabola
  //! parametrization
  //! In the local coordinate system of the parabola
  //! Y**2 = (2*P) * X where P is the distance between the focus
  //! and the directrix.
  //! The following functions build  a 3d curve from a
  //! 2d curve at a given position defined with an Ax2.
  Standard_EXPORT static   Standard_Real ParabolaParameter (const gp_Ax22d& Pos, const gp_Pnt2d& P) ;
  
  Standard_EXPORT static   gp_Pnt To3d (const gp_Ax2& Pos, const gp_Pnt2d& P) ;
  
  Standard_EXPORT static   gp_Vec To3d (const gp_Ax2& Pos, const gp_Vec2d& V) ;
  
  Standard_EXPORT static   gp_Dir To3d (const gp_Ax2& Pos, const gp_Dir2d& V) ;
  
  Standard_EXPORT static   gp_Ax1 To3d (const gp_Ax2& Pos, const gp_Ax2d& A) ;
  
  Standard_EXPORT static   gp_Ax2 To3d (const gp_Ax2& Pos, const gp_Ax22d& A) ;
  
  Standard_EXPORT static   gp_Lin To3d (const gp_Ax2& Pos, const gp_Lin2d& L) ;
  
  Standard_EXPORT static   gp_Circ To3d (const gp_Ax2& Pos, const gp_Circ2d& C) ;
  
  Standard_EXPORT static   gp_Elips To3d (const gp_Ax2& Pos, const gp_Elips2d& E) ;
  
  Standard_EXPORT static   gp_Hypr To3d (const gp_Ax2& Pos, const gp_Hypr2d& H) ;
  

  //! These functions build a 3D geometric entity from a 2D geometric entity.
  //! The "X Axis" and the "Y Axis" of the global coordinate
  //! system (i.e. 2D space) are lined up respectively with the
  //! "X Axis" and "Y Axis" of the 3D coordinate system, Pos.
  Standard_EXPORT static   gp_Parab To3d (const gp_Ax2& Pos, const gp_Parab2d& Prb) ;




protected:





private:





};


#include <ElCLib.lxx>





#endif // _ElCLib_HeaderFile
