--- /dev/null
+-- File: ElCLib.cdl
+-- Created: Tue Sep 10 08:53:41 1991
+-- Author: Michel Chauvat
+---Copyright: Matra Datavision 1991, 1992
+
+
+
+
+package ElCLib
+
+ --- Purpose: 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.
+
+uses gp
+
+is
+
+ InPeriod(U, UFirst, ULast : Real) returns Real;
+
+ ---Purpose: Return a value in the range <UFirst, ULast> by
+ -- adding or removing the period <ULast - UFirst> to
+ -- <U>.
+
+ AdjustPeriodic(UFirst, ULast, Precision : Real;
+ U1, U2 : in out Real);
+
+ ---Purpose: 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.
+
+
+
+
+
+ Value (U : Real; L : Lin from gp) returns Pnt from gp;
+ --- Purpose : 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.
+
+ Value (U : Real; C : Circ from gp) returns Pnt from gp;
+ ---C++: inline
+
+ Value (U : Real; E : Elips from gp) returns Pnt from gp;
+ ---C++: inline
+
+ Value (U : Real; H : Hypr from gp) returns Pnt from gp;
+ ---C++: inline
+
+ Value (U : Real; Prb : Parab from gp) returns Pnt from gp;
+ ---C++: inline
+
+ D1 (U : Real; L : Lin from gp; P : out Pnt from gp; V1 : out Vec from gp);
+ ---Purpose:
+ -- 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.
+
+ D1 (U : Real; C : Circ from gp; P : out Pnt from gp; V1 : out Vec from gp);
+ ---C++: inline
+
+ D1 (U : Real; E : Elips from gp; P : out Pnt from gp; V1 : out Vec from gp);
+ ---C++: inline
+
+ D1 (U : Real; H : Hypr from gp; P : out Pnt from gp; V1 : out Vec from gp);
+ ---C++: inline
+
+ D1 (U : Real; Prb : Parab from gp; P : out Pnt from gp;
+ V1 : out Vec from gp);
+ ---C++: inline
+
+ D2 (U : Real; C : Circ from gp; P : out Pnt from gp;
+ V1, V2 : out Vec from gp);
+ ---Purpose: 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.
+
+ D2 (U : Real; E : Elips from gp; P : out Pnt from gp;
+ V1, V2 : out Vec from gp);
+ ---C++: inline
+
+ D2 (U : Real; H : Hypr from gp; P : out Pnt from gp;
+ V1, V2 : out Vec from gp);
+ ---C++: inline
+
+ D2 (U : Real; Prb : Parab from gp; P : out Pnt from gp;
+ V1, V2 : out Vec from gp);
+ ---C++: inline
+
+ D3 (U : Real; C : Circ from gp; P : out Pnt from gp;
+ V1, V2, V3 : out Vec from gp);
+ ---Purpose: 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.
+
+ D3 (U : Real; E : Elips from gp; P : out Pnt from gp;
+ V1, V2, V3 : out Vec from gp);
+ ---C++: inline
+
+ D3 (U : Real; H : Hypr from gp; P : out Pnt from gp;
+ V1, V2, V3 : out Vec from gp);
+
+ DN (U : Real; L : Lin from gp; N : Integer) returns Vec from gp;
+ ---Purpose:
+ -- 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
+
+ DN (U : Real; C : Circ from gp; N : Integer) returns Vec from gp;
+ ---C++: inline
+
+ DN (U : Real; E : Elips from gp; N : Integer) returns Vec from gp;
+ ---C++: inline
+
+ DN (U : Real; H : Hypr from gp; N : Integer) returns Vec from gp;
+ ---C++: inline
+
+ DN (U : Real; Prb : Parab from gp; N : Integer) returns Vec from gp;
+ ---C++: inline
+
+ Value (U : Real; L : Lin2d from gp) returns Pnt2d from gp;
+ ---C++: inline
+
+ Value (U : Real; C : Circ2d from gp) returns Pnt2d from gp;
+ ---C++: inline
+
+ Value (U : Real; E : Elips2d from gp) returns Pnt2d from gp;
+ ---C++: inline
+
+ Value (U : Real; H : Hypr2d from gp) returns Pnt2d from gp;
+ ---C++: inline
+
+ Value (U : Real; Prb : Parab2d from gp) returns Pnt2d from gp;
+ ---C++: inline
+
+ D1 (U : Real; L : Lin2d from gp; P : out Pnt2d from gp;
+ V1 : out Vec2d from gp);
+ ---C++: inline
+
+ D1 (U : Real; C : Circ2d from gp; P : out Pnt2d from gp;
+ V1 : out Vec2d from gp);
+ ---C++: inline
+
+ D1 (U : Real; E : Elips2d from gp; P : out Pnt2d from gp;
+ V1 : out Vec2d from gp);
+ ---C++: inline
+
+ D1 (U : Real; H : Hypr2d from gp; P : out Pnt2d from gp;
+ V1 : out Vec2d from gp);
+ ---C++: inline
+
+ D1 (U : Real; Prb : Parab2d from gp; P : out Pnt2d from gp;
+ V1 : out Vec2d from gp);
+ ---C++: inline
+
+ D2 (U : Real; C : Circ2d from gp; P : out Pnt2d from gp;
+ V1, V2 : out Vec2d from gp);
+ ---C++: inline
+
+ D2 (U : Real; E : Elips2d from gp; P : out Pnt2d from gp;
+ V1, V2 : out Vec2d from gp);
+ ---C++: inline
+
+ D2 (U : Real; H : Hypr2d from gp; P : out Pnt2d from gp;
+ V1, V2 : out Vec2d from gp);
+ ---C++: inline
+
+ D2 (U : Real; Prb : Parab2d from gp; P : out Pnt2d from gp;
+ V1, V2 : out Vec2d from gp);
+ ---C++: inline
+
+ D3 (U : Real; C : Circ2d from gp; P : out Pnt2d from gp;
+ V1, V2, V3 : out Vec2d from gp);
+ ---C++: inline
+
+ D3 (U : Real; E : Elips2d from gp; P : out Pnt2d from gp;
+ V1, V2, V3 : out Vec2d from gp);
+ ---C++: inline
+
+ D3 (U : Real; H : Hypr2d from gp; P : out Pnt2d from gp;
+ V1, V2, V3 : out Vec2d from gp);
+ ---C++: inline
+
+
+ --- Purpose :
+ -- In the following functions N is the order of derivation
+ -- and should be greater than 0
+
+ DN (U : Real; L : Lin2d from gp; N : Integer) returns Vec2d from gp;
+ ---C++: inline
+
+ DN (U : Real; C : Circ2d from gp; N : Integer) returns Vec2d from gp;
+ ---C++: inline
+
+ DN (U : Real; E : Elips2d from gp; N : Integer) returns Vec2d from gp;
+ ---C++: inline
+
+ DN (U : Real; H : Hypr2d from gp; N : Integer) returns Vec2d from gp;
+ ---C++: inline
+
+ DN (U : Real; Prb : Parab2d from gp; N : Integer) returns Vec2d from gp;
+ ---C++: inline
+
+
+
+
+
+
+
+ LineValue (U : Real; Pos : Ax1 from gp)
+ returns Pnt from gp;
+ --- Purpose : 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.
+
+ CircleValue (U : Real; Pos : Ax2 from gp; Radius : Real)
+ returns Pnt from gp;
+
+ EllipseValue (U : Real; Pos : Ax2 from gp; MajorRadius, MinorRadius : Real)
+ returns Pnt from gp;
+
+ HyperbolaValue (U : Real; Pos : Ax2 from gp;
+ MajorRadius, MinorRadius : Real)
+ returns Pnt from gp;
+
+ ParabolaValue (U : Real; Pos : Ax2 from gp; Focal : Real)
+ returns Pnt from gp;
+
+ LineD1 (U : Real; Pos : Ax1 from gp; P : out Pnt from gp;
+ V1 : out Vec from gp);
+
+ CircleD1 (U : Real; Pos : Ax2 from gp; Radius : Real; P : out Pnt from gp;
+ V1 : out Vec from gp);
+
+ EllipseD1 (U : Real; Pos : Ax2 from gp; MajorRadius, MinorRadius : Real;
+ P : out Pnt from gp; V1 : out Vec from gp);
+
+ HyperbolaD1 (U : Real; Pos : Ax2 from gp; MajorRadius, MinorRadius : Real;
+ P : out Pnt from gp; V1 : out Vec from gp);
+
+ ParabolaD1 (U : Real; Pos : Ax2 from gp; Focal : Real; P : out Pnt from gp;
+ V1 : out Vec from gp);
+
+ CircleD2 (U : Real; Pos : Ax2 from gp; Radius : Real;
+ P : out Pnt from gp; V1, V2 : out Vec from gp);
+
+ EllipseD2 (U : Real; Pos : Ax2 from gp; MajorRadius, MinorRadius : Real;
+ P : out Pnt from gp; V1, V2 : out Vec from gp);
+
+ HyperbolaD2 (U : Real; Pos : Ax2 from gp; MajorRadius, MinorRadius : Real;
+ P : out Pnt from gp; V1, V2 : out Vec from gp);
+
+ ParabolaD2 (U : Real; Pos : Ax2 from gp; Focal : Real;
+ P : out Pnt from gp; V1, V2 : out Vec from gp);
+
+ CircleD3 (U : Real; Pos : Ax2 from gp; Radius : Real;
+ P : out Pnt from gp; V1, V2, V3 : out Vec from gp);
+
+ EllipseD3 (U : Real; Pos : Ax2 from gp; MajorRadius, MinorRadius : Real;
+ P : out Pnt from gp; V1, V2, V3 : out Vec from gp);
+
+ HyperbolaD3 (U : Real; Pos : Ax2 from gp; MajorRadius, MinorRadius : Real;
+ P : out Pnt from gp; V1, V2, V3 : out Vec from gp);
+
+
+
+ LineDN (U : Real; Pos : Ax1 from gp; N : Integer)
+ returns Vec from gp;
+ --- Purpose :
+ -- In the following functions N is the order of derivation
+ -- and should be greater than 0
+ CircleDN (U : Real; Pos : Ax2 from gp; Radius : Real; N : Integer)
+ returns Vec from gp;
+
+ EllipseDN (U : Real; Pos : Ax2 from gp; MajorRadius, MinorRadius : Real;
+ N : Integer)
+ returns Vec from gp;
+
+ HyperbolaDN (
+ U : Real; Pos : Ax2 from gp; MajorRadius, MinorRadius : Real; N : Integer)
+ returns Vec from gp;
+
+ ParabolaDN (U : Real; Pos : Ax2 from gp; Focal : Real; N : Integer)
+ returns Vec from gp;
+
+
+
+
+
+ LineValue (U : Real; Pos : Ax2d from gp)
+ returns Pnt2d from gp;
+
+ CircleValue (U : Real; Pos : Ax22d from gp; Radius : Real)
+ returns Pnt2d from gp;
+
+ EllipseValue (U : Real; Pos : Ax22d from gp; MajorRadius, MinorRadius : Real)
+ returns Pnt2d from gp;
+
+ HyperbolaValue (U : Real; Pos : Ax22d from gp;
+ MajorRadius, MinorRadius : Real)
+ returns Pnt2d from gp;
+
+ ParabolaValue (U : Real; Pos : Ax22d from gp; Focal : Real)
+ returns Pnt2d from gp;
+
+ LineD1 (U : Real; Pos : Ax2d from gp; P : out Pnt2d from gp;
+ V1 : out Vec2d from gp);
+
+ CircleD1 (U : Real; Pos : Ax22d from gp; Radius : Real;
+ P : out Pnt2d from gp; V1 : out Vec2d from gp);
+
+ EllipseD1 (U : Real; Pos : Ax22d from gp; MajorRadius, MinorRadius : Real;
+ P : out Pnt2d from gp; V1 : out Vec2d from gp);
+
+ HyperbolaD1 (U : Real; Pos : Ax22d from gp; MajorRadius, MinorRadius : Real;
+ P : out Pnt2d from gp; V1 : out Vec2d from gp);
+
+ ParabolaD1 (U : Real; Pos : Ax22d from gp; Focal : Real;
+ P : out Pnt2d from gp; V1 : out Vec2d from gp);
+
+ CircleD2 (U : Real; Pos : Ax22d from gp; Radius : Real;
+ P : out Pnt2d from gp; V1, V2 : out Vec2d from gp);
+
+ EllipseD2 (U : Real; Pos : Ax22d from gp; MajorRadius, MinorRadius : Real;
+ P : out Pnt2d from gp; V1, V2 : out Vec2d from gp);
+
+ HyperbolaD2 (U : Real; Pos : Ax22d from gp; MajorRadius, MinorRadius : Real;
+ P : out Pnt2d from gp; V1, V2 : out Vec2d from gp);
+
+ ParabolaD2 (U : Real; Pos : Ax22d from gp; Focal : Real;
+ P : out Pnt2d from gp; V1, V2 : out Vec2d from gp);
+
+ CircleD3 (U : Real; Pos : Ax22d from gp; Radius : Real;
+ P : out Pnt2d from gp; V1, V2, V3 : out Vec2d from gp);
+
+ EllipseD3 (U : Real; Pos : Ax22d from gp; MajorRadius, MinorRadius : Real;
+ P : out Pnt2d from gp; V1, V2, V3 : out Vec2d from gp);
+
+ HyperbolaD3 (U : Real; Pos : Ax22d from gp; MajorRadius, MinorRadius : Real;
+ P : out Pnt2d from gp; V1, V2, V3 : out Vec2d from gp);
+
+ --- Purpose :
+ -- In the following functions N is the order of derivation
+ -- and should be greater than 0
+
+ LineDN (U : Real; Pos : Ax2d from gp; N : Integer)
+ returns Vec2d from gp;
+
+ CircleDN (U : Real; Pos : Ax22d from gp; Radius : Real; N : Integer)
+ returns Vec2d from gp;
+
+ EllipseDN (
+ U : Real; Pos : Ax22d from gp; MajorRadius, MinorRadius : Real;
+ N : Integer)
+ returns Vec2d from gp;
+
+ HyperbolaDN (
+ U : Real; Pos : Ax22d from gp; MajorRadius, MinorRadius : Real;
+ N : Integer)
+ returns Vec2d from gp;
+
+ ParabolaDN (U : Real; Pos : Ax22d from gp; Focal : Real; N : Integer)
+ returns Vec2d from gp;
+
+
+
+
+ --- Purpose :
+ -- The following functions compute the parametric value corresponding
+ -- to a given point on a elementary curve. The point should be on the
+ -- curve.
+
+
+ Parameter (L : Lin from gp; P : Pnt from gp) returns Real;
+ ---Purpose:
+ -- 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.
+
+ Parameter (L : Lin2d from gp; P : Pnt2d from gp) returns Real;
+ ---C++: inline
+
+ --- Purpose : parametrization
+ -- P (U) = L.Location() + U * L.Direction()
+
+
+
+
+ Parameter (C : Circ from gp; P : Pnt from gp) returns Real;
+ ---C++: inline
+
+ Parameter (C : Circ2d from gp; P : Pnt2d from gp) returns Real;
+ ---C++: inline
+
+ --- Purpose : parametrization
+ -- In the local coordinate system of the circle
+ -- X (U) = Radius * Cos (U)
+ -- Y (U) = Radius * Sin (U)
+
+
+
+
+ Parameter (E : Elips from gp; P : Pnt from gp) returns Real;
+ ---C++: inline
+
+ Parameter (E : Elips2d from gp; P : Pnt2d from gp) returns Real;
+ ---C++: inline
+
+ --- Purpose : parametrization
+ -- In the local coordinate system of the Ellipse
+ -- X (U) = MajorRadius * Cos (U)
+ -- Y (U) = MinorRadius * Sin (U)
+
+
+ Parameter (H : Hypr from gp; P : Pnt from gp) returns Real;
+ ---C++: inline
+
+ Parameter (H : Hypr2d from gp; P : Pnt2d from gp) returns Real;
+ ---C++: inline
+
+ --- Purpose : parametrization
+ -- In the local coordinate system of the Hyperbola
+ -- X (U) = MajorRadius * Ch (U)
+ -- Y (U) = MinorRadius * Sh (U)
+
+
+ Parameter (Prb : Parab from gp; P : Pnt from gp) returns Real;
+ ---C++: inline
+
+ Parameter (Prb : Parab2d from gp; P : Pnt2d from gp) returns Real;
+ ---C++: inline
+
+ --- Purpose : 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.
+
+
+ LineParameter (Pos : Ax1 from gp; P : Pnt from gp) returns Real;
+
+ LineParameter (Pos : Ax2d from gp; P : Pnt2d from gp) returns Real;
+
+ --- Purpose : parametrization
+ -- P (U) = L.Location() + U * L.Direction()
+
+
+
+ CircleParameter (Pos : Ax2 from gp; P : Pnt from gp) returns Real;
+
+ CircleParameter (Pos : Ax22d from gp; P : Pnt2d from gp) returns Real;
+ --- Purpose : Pos is the Axis of the Circle
+
+ --- Purpose : parametrization
+ -- In the local coordinate system of the circle
+ -- X (U) = Radius * Cos (U)
+ -- Y (U) = Radius * Sin (U)
+
+
+
+ EllipseParameter (Pos : Ax2 from gp; MajorRadius, MinorRadius : Real;
+ P : Pnt from gp)
+ returns Real;
+
+ EllipseParameter (Pos : Ax22d from gp; MajorRadius, MinorRadius : Real;
+ P : Pnt2d from gp)
+ returns Real;
+ --- Purpose : Pos is the Axis of the Ellipse
+
+ --- Purpose : parametrization
+ -- In the local coordinate system of the Ellipse
+ -- X (U) = MajorRadius * Cos (U)
+ -- Y (U) = MinorRadius * Sin (U)
+
+
+ HyperbolaParameter (Pos : Ax2 from gp; MajorRadius, MinorRadius : Real;
+ P : Pnt from gp)
+ returns Real;
+
+ HyperbolaParameter (Pos : Ax22d from gp; MajorRadius, MinorRadius : Real;
+ P : Pnt2d from gp)
+ returns Real;
+ --- Purpose : Pos is the Axis of the Hyperbola
+
+ --- Purpose : parametrization
+ -- In the local coordinate system of the Hyperbola
+ -- X (U) = MajorRadius * Ch (U)
+ -- Y (U) = MinorRadius * Sh (U)
+
+
+ ParabolaParameter (Pos : Ax2 from gp; P : Pnt from gp) returns Real;
+
+ ParabolaParameter (Pos : Ax22d from gp; P : Pnt2d from gp) returns Real;
+ --- Purpose : Pos is the mirror axis of the parabola
+
+ --- Purpose : 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.
+
+
+
+
+ --- Purpose: The following functions build a 3d curve from a
+ -- 2d curve at a given position defined with an Ax2.
+
+
+ To3d (Pos : Ax2 from gp; P : Pnt2d from gp) returns Pnt from gp;
+
+ To3d (Pos : Ax2 from gp; V : Vec2d from gp) returns Vec from gp;
+
+ To3d (Pos : Ax2 from gp; V : Dir2d from gp) returns Dir from gp;
+
+ To3d (Pos : Ax2 from gp; A : Ax2d from gp) returns Ax1 from gp;
+
+ To3d (Pos : Ax2 from gp; A : Ax22d from gp) returns Ax2 from gp;
+
+ To3d (Pos : Ax2 from gp; L : Lin2d from gp) returns Lin from gp;
+
+ To3d (Pos : Ax2 from gp; C : Circ2d from gp) returns Circ from gp;
+
+ To3d (Pos : Ax2 from gp; E : Elips2d from gp) returns Elips from gp;
+
+ To3d (Pos : Ax2 from gp; H : Hypr2d from gp) returns Hypr from gp;
+
+ To3d (Pos : Ax2 from gp; Prb : Parab2d from gp) returns Parab from gp;
+
+
+ --- Purpose:
+ -- 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.
+
+end ElCLib;
+