1 -- File:        ElSLib.cdl
2 -- Created:     Mon Sep  9 16:39:42 1991
3 -- Author:      Michel Chauvat
9 package ElSLib
11         --- Purpose :  Provides functions for basic geometric computation on
12         -- elementary surfaces.
13         -- This includes:
14         -- -   calculation of a point or derived vector on a surface
15         --   where the surface is provided by the gp package, or
16         --   defined in canonical form (as in the gp package), and
17         --   the point is defined with a parameter,
18         -- -   evaluation of the parameters corresponding to a
19         --   point on an elementary surface from gp,
20         -- -   calculation of isoparametric curves on an elementary
21         --   surface defined in canonical form (as in the gp package).
22         --  Notes:
23         -- -   ElSLib stands for Elementary Surfaces Library.
24         -- -   If the surfaces provided by the gp package are not
25         --   explicitly parameterized, they still have an implicit
26         --   parameterization, similar to that which they infer on
27         --   the equivalent Geom surfaces.
28         --  Note: ElSLib stands for Elementary Surfaces Library.
30 uses gp
32 is
34   Value (U, V : Real; Pl : Pln from gp)
35     returns Pnt from gp;
36         ---Purpose:  For elementary surfaces from the gp package (planes,
37         -- cones, cylinders, spheres and tori), computes the point
38         -- of parameters (U, V).
40   Value (U, V : Real; C : Cone from gp)
41     returns Pnt from gp;
42         ---C++: inline
44   Value (U, V : Real; C : Cylinder from gp)
45     returns Pnt from gp;
46         ---C++: inline
48   Value (U, V : Real; S : Sphere from gp)
49     returns Pnt from gp;
50         ---C++: inline
52   Value (U,V : Real; T : Torus from gp)
53     returns Pnt from gp;
54         ---C++: inline
56   DN (U, V : Real; Pl : Pln from gp; Nu, Nv : Integer)
57     returns Vec from gp;
58         ---Purpose: For elementary surfaces from the gp package (planes,
59         -- cones, cylinders, spheres and tori), computes the
60         -- derivative vector of order Nu and Nv in the u and v
61         -- parametric directions respectively, at the point of
62         -- parameters (U, V).
64   DN (U, V : Real; C : Cone from gp; Nu, Nv : Integer)
65     returns Vec from gp;
66         ---C++: inline
68   DN (U, V : Real; C : Cylinder from gp; Nu, Nv : Integer)
69     returns Vec from gp;
70         ---C++: inline
72   DN (U, V : Real; S : Sphere from gp; Nu, Nv : Integer)
73     returns Vec from gp;
74         ---C++: inline
76   DN (U, V : Real; T : Torus from gp; Nu, Nv : Integer)
77     returns Vec from gp;
78         ---C++: inline
80   D0 (U, V : Real; Pl : Pln from gp; P : out Pnt from gp);
81         ---Purpose:  For elementary surfaces from the gp package (planes,
82         -- cones, cylinders, spheres and tori), computes the point P
83         -- of parameters (U, V).inline
85   D0 (U, V : Real; C : Cone from gp; P : out Pnt from gp);
86         ---C++: inline
88   D0 (U, V : Real; C : Cylinder from gp; P : out Pnt from gp);
89         ---C++: inline
91   D0 (U, V : Real; S : Sphere from gp; P : out Pnt from gp);
92         ---C++: inline
94   D0 (U, V : Real; T : Torus from gp; P : out Pnt from gp);
95         ---C++: inline
97   D1 (U, V : Real; Pl : Pln from gp; P : out Pnt from gp;
98      Vu, Vv : out Vec from gp);
99         ---Purpose:
100         -- For elementary surfaces from the gp package (planes,
101         -- cones, cylinders, spheres and tori), computes:
102         -- -   the point P of parameters (U, V), and
103         -- -   the first derivative vectors Vu and Vv at this point in
104         --   the u and v parametric directions respectively.
106   D1 (U, V : Real; C : Cone from gp; P : out Pnt from gp;
107     Vu, Vv : out Vec from gp);
108         ---C++: inline
110   D1 (U, V : Real; C : Cylinder from gp; P : out Pnt from gp;
111     Vu, Vv : out Vec from gp);
112         ---C++: inline
114   D1 (U, V : Real; S : Sphere from gp; P : out Pnt from gp;
115     Vu, Vv : out Vec from gp);
116         ---C++: inline
118   D1 (U, V : Real; T : Torus from gp; P : out Pnt from gp;
119     Vu, Vv : out Vec from gp);
120         ---C++: inline
122   D2 (U, V : Real; C : Cone from gp; P : out Pnt from gp;
123     Vu, Vv, Vuu, Vvv, Vuv : out Vec from gp);
124         ---Purpose:
125         -- For elementary surfaces from the gp package (cones,
126         -- cylinders, spheres and tori), computes:
127         -- -   the point P of parameters (U, V), and
128         -- -   the first derivative vectors Vu and Vv at this point in
129         --   the u and v parametric directions respectively, and
130         -- -   the second derivative vectors Vuu, Vvv and Vuv at this point.
132   D2 (U, V : Real; C : Cylinder from gp; P : out Pnt from gp;
133     Vu,Vv,Vuu,Vvv,Vuv : out Vec from gp);
134         ---C++: inline
136   D2 (U, V : Real; S : Sphere from gp; P : out Pnt from gp;
137     Vu, Vv, Vuu, Vvv, Vuv : out Vec from gp);
138         ---C++: inline
140   D2 (U, V : Real; T : Torus from gp; P : out Pnt from gp;
141     Vu, Vv, Vuu, Vvv, Vuv : out Vec from gp);
142         ---C++: inline
144   D3 (U, V : Real; C : Cone from gp; P : out Pnt from gp;
145       Vu, Vv, Vuu, Vvv, Vuv, Vuuu, Vvvv, Vuuv, Vuvv : out Vec from gp);
146         ---Purpose:
147         -- For elementary surfaces from the gp package (cones,
148         -- cylinders, spheres and tori), computes:
149         -- -   the point P of parameters (U,V), and
150         -- -   the first derivative vectors Vu and Vv at this point in
151         --   the u and v parametric directions respectively, and
152         -- -   the second derivative vectors Vuu, Vvv and Vuv at
153         --   this point, and
154         -- -   the third derivative vectors Vuuu, Vvvv, Vuuv and
155         --   Vuvv at this point.
157   D3 (U, V : Real; C : Cylinder from gp; P : out Pnt from gp;
158       Vu, Vv, Vuu, Vvv, Vuv, Vuuu, Vvvv, Vuuv, Vuvv : out Vec from gp);
159         ---C++: inline
161   D3 (U, V : Real; S : Sphere from gp; P : out Pnt from gp;
162       Vu, Vv, Vuu, Vvv, Vuv, Vuuu, Vvvv, Vuuv, Vuvv : out Vec from gp);
163         ---C++: inline
165   D3 (U, V : Real; T : Torus from gp; P : out Pnt from gp;
166       Vu, Vv, Vuu, Vvv, Vuv, Vuuu, Vvvv, Vuuv, Vuvv : out Vec from gp);
167         ---C++: inline
171         --- Purpose : Surface evaluation
172         --  The following functions compute the point and the
173         --  derivatives on elementary surfaces defined with their
174         --  geometric characterisitics.
175         --  You don't need to create the surface to use these functions.
176         --  These functions are called by the previous  ones.
177         --- Example :
178         --  A cylinder is defined with its position and its radius.
182   PlaneValue (U, V : Real; Pos : Ax3 from gp)
183     returns Pnt from gp;
185   CylinderValue (U, V : Real; Pos : Ax3 from gp; Radius : Real)
186     returns Pnt from gp;
188   ConeValue (U, V : Real; Pos : Ax3 from gp; Radius, SAngle : Real)
189     returns Pnt from gp;
191   SphereValue (U, V : Real; Pos : Ax3 from gp; Radius : Real)
192     returns Pnt from gp;
194   TorusValue (U, V : Real; Pos : Ax3 from gp; MajorRadius, MinorRadius : Real)
195      returns Pnt from gp;
197   PlaneDN (U, V : Real; Pos : Ax3 from gp; Nu, Nv : Integer)
198     returns Vec from gp;
200   CylinderDN (U, V : Real; Pos: Ax3 from gp; Radius : Real; Nu, Nv : Integer)
201      returns Vec from gp;
203   ConeDN (U, V : Real; Pos : Ax3 from gp; Radius, SAngle : Real;
204           Nu, Nv : Integer)
205      returns Vec from gp;
207   SphereDN (U, V : Real; Pos: Ax3 from gp; Radius : Real; Nu, Nv : Integer)
208      returns Vec from gp;
210   TorusDN (U, V : Real; Pos: Ax3 from gp; MajorRadius, MinorRadius : Real;
211            Nu, Nv : Integer)
212      returns Vec from gp;
214   PlaneD0 (U, V : Real; Pos : Ax3 from gp; P : out Pnt from gp);
216   ConeD0 (U, V : Real; Pos : Ax3 from gp; Radius, SAngle : Real;
217           P : out Pnt from gp);
219   CylinderD0 (U, V : Real; Pos : Ax3 from gp; Radius : Real;
220               P : out Pnt from gp);
222   SphereD0 (U, V : Real; Pos : Ax3 from gp; Radius : Real;
223             P : out Pnt from gp);
225   TorusD0 (U, V : Real; Pos : Ax3 from gp; MajorRadius, MinorRadius : Real;
226            P : out Pnt from gp);
228   PlaneD1 (U, V : Real; Pos : Ax3 from gp; P : out Pnt from gp;
229            Vu, Vv : out Vec from gp);
231   ConeD1 (U, V : Real; Pos : Ax3 from gp; Radius, SAngle : Real;
232           P : out Pnt from gp; Vu, Vv : out Vec from gp);
234   CylinderD1 (U, V : Real; Pos : Ax3 from gp; Radius : Real;
235               P : out Pnt from gp; Vu, Vv : out Vec from gp);
237   SphereD1 (U, V : Real; Pos : Ax3 from gp; Radius : Real;
238             P : out Pnt from gp; Vu, Vv : out Vec from gp);
240   TorusD1 (U, V : Real; Pos : Ax3 from gp; MajorRadius, MinorRadius : Real;
241            P : out Pnt from gp; Vu, Vv : out Vec from gp);
243   ConeD2 (U, V : Real; Pos : Ax3 from gp; Radius, SAngle : Real;
244           P : out Pnt from gp; Vu, Vv, Vuu, Vvv, Vuv : out Vec from gp);
246   CylinderD2 (U, V : Real; Pos : Ax3 from gp; Radius : Real;
247               P : out Pnt from gp; Vu,Vv,Vuu,Vvv,Vuv : out Vec from gp);
249   SphereD2 (U, V : Real; Pos : Ax3 from gp; Radius : Real;
250             P : out Pnt from gp; Vu, Vv, Vuu, Vvv, Vuv : out Vec from gp);
252   TorusD2 (U, V : Real; Pos : Ax3 from gp; MajorRadius, MinorRadius : Real;
253            P : out Pnt from gp; Vu, Vv, Vuu, Vvv, Vuv : out Vec from gp);
255   ConeD3 (U, V : Real; Pos : Ax3 from gp; Radius, SAngle : Real;
256           P : out Pnt from gp;
257           Vu, Vv, Vuu, Vvv, Vuv, Vuuu, Vvvv, Vuuv, Vuvv : out Vec from gp);
259   CylinderD3 (U, V : Real; Pos : Ax3 from gp; Radius : Real;
260               P : out Pnt from gp;
261               Vu, Vv, Vuu, Vvv, Vuv, Vuuu, Vvvv, Vuuv, Vuvv : out Vec from gp);
263   SphereD3 (U, V : Real; Pos : Ax3 from gp; Radius : Real; P : out Pnt from gp;
264             Vu, Vv, Vuu, Vvv, Vuv, Vuuu, Vvvv, Vuuv, Vuvv : out Vec from gp);
266   TorusD3 (U, V : Real; Pos : Ax3 from gp; MajorRadius, MinorRadius : Real;
267            P : out Pnt from gp;
268            Vu, Vv, Vuu, Vvv, Vuv, Vuuu, Vvvv, Vuuv, Vuvv : out Vec from gp);
272         --- Purpose :
273         --  The following functions compute the parametric values
274         --  corresponding to a given point on a elementary surface.
275         --  The point should be on the surface.
278   Parameters (Pl : Pln from gp; P : Pnt from gp; U, V : out Real);
279         --- Purpose : parametrization
280         --  P (U, V) =
281         --  Pl.Location() + U * Pl.XDirection() + V * Pl.YDirection()
282         ---C++: inline
285   Parameters (C : Cylinder from gp; P : Pnt from gp; U, V : out Real);
286         --- Purpose : parametrization
287         --  P (U, V) = Location + V * ZDirection +
288         --  Radius * (Cos(U) * XDirection + Sin (U) * YDirection)
289         ---C++: inline
292   Parameters (C : Cone from gp; P : Pnt from gp; U, V : out Real);
293         --- Purpose : parametrization
294         --  P (U, V) =  Location + V * ZDirection +
295         --  (Radius + V * Tan (SemiAngle)) *
296         --  (Cos(U) * XDirection + Sin(U) * YDirection)
297         ---C++: inline
300   Parameters (S : Sphere from gp; P : Pnt from gp; U, V : out Real);
301         --- Purpose : parametrization
302         --  P (U, V) = Location +
303         --  Radius * Cos (V) * (Cos (U) * XDirection + Sin (U) * YDirection) +
304         --  Radius * Sin (V) * ZDirection
305         ---C++: inline
308   Parameters (T : Torus from gp; P : Pnt from gp; U, V : out Real);
309         --- Purpose : parametrization
310         --  P (U, V) = Location +
312         --  (Cos(V) * XDirection - Sin(V) * YDirection) +
313         --  MinorRadius * Sin(U) * ZDirection
314         ---C++: inline
317   PlaneParameters (Pos: Ax3 from gp; P: Pnt from gp; U, V: out Real);
318         --- Purpose : parametrization
319         --  P (U, V) =
320         --  Pl.Location() + U * Pl.XDirection() + V * Pl.YDirection()
323   CylinderParameters (Pos: Ax3 from gp; Radius : Real; P: Pnt from gp;
324                       U, V: out Real);
325         --- Purpose : parametrization
326         --  P (U, V) = Location + V * ZDirection +
327         --  Radius * (Cos(U) * XDirection + Sin (U) * YDirection)
330   ConeParameters (Pos: Ax3 from gp; Radius, SAngle: Real; P: Pnt from gp;
331                   U, V: out Real);
332         --- Purpose : parametrization
333         --  P (U, V) =  Location + V * ZDirection +
334         --  (Radius + V * Tan (SemiAngle)) *
335         --  (Cos(U) * XDirection + Sin(U) * YDirection)
338   SphereParameters (Pos: Ax3 from gp; Radius: Real; P: Pnt from gp;
339                     U, V: out Real);
340         --- Purpose : parametrization
341         --  P (U, V) = Location +
342         --  Radius * Cos (V) * (Cos (U) * XDirection + Sin (U) * YDirection) +
343         --  Radius * Sin (V) * ZDirection
347                    P : Pnt from gp; U, V : out Real);
348         --- Purpose : parametrization
349         --  P (U, V) = Location +
351         --  (Cos(V) * XDirection - Sin(V) * YDirection) +
352         --  MinorRadius * Sin(U) * ZDirection
355   PlaneUIso (Pos: Ax3 from gp; U : Real)
356         --- Purpose : compute the U Isoparametric gp_Lin of the plane.
357   returns Lin from gp;
360   CylinderUIso (Pos: Ax3 from gp; Radius, U : Real)
361         --- Purpose : compute the U Isoparametric gp_Lin of the cylinder.
362   returns Lin from gp;
365   ConeUIso (Pos: Ax3 from gp; Radius, SAngle, U: Real)
366         --- Purpose : compute the U Isoparametric gp_Lin of the cone.
367   returns Lin from gp;
370   SphereUIso (Pos: Ax3 from gp; Radius, U : Real)
371         --- Purpose : compute the U Isoparametric gp_Circ of the sphere,
372         --  (the meridian is not trimmed).
373   returns Circ from gp;
377         --- Purpose : compute the U Isoparametric gp_Circ of the torus.
378   returns Circ from gp;
381   PlaneVIso (Pos: Ax3 from gp; V : Real)
382         --- Purpose : compute the V Isoparametric gp_Lin of the plane.
383   returns Lin from gp;
386   CylinderVIso (Pos: Ax3 from gp; Radius, V : Real)
387         --- Purpose : compute the V Isoparametric gp_Circ of the cylinder.
388   returns Circ from gp;
391   ConeVIso (Pos: Ax3 from gp; Radius, SAngle, V : Real)
392         --- Purpose : compute the V Isoparametric gp_Circ of the cone.
393   returns Circ from gp;
396   SphereVIso (Pos: Ax3 from gp; Radius, V : Real)
397         --- Purpose : compute the V Isoparametric gp_Circ of the sphere,
398         --  (the meridian is not trimmed).
399   returns Circ from gp;