0023985: There is no section between attached faces.
[occt.git] / src / IntAna / IntAna_QuadQuadGeo.cdl
1 -- Created on: 1992-08-06
2 -- Created by: Laurent BUCHARD
3 -- Copyright (c) 1992-1999 Matra Datavision
4 -- Copyright (c) 1999-2012 OPEN CASCADE SAS
5 --
6 -- The content of this file is subject to the Open CASCADE Technology Public
7 -- License Version 6.5 (the "License"). You may not use the content of this file
8 -- except in compliance with the License. Please obtain a copy of the License
9 -- at http://www.opencascade.org and read it completely before using this file.
10 --
11 -- The Initial Developer of the Original Code is Open CASCADE S.A.S., having its
12 -- main offices at: 1, place des Freres Montgolfier, 78280 Guyancourt, France.
13 --
14 -- The Original Code and all software distributed under the License is
15 -- distributed on an "AS IS" basis, without warranty of any kind, and the
16 -- Initial Developer hereby disclaims all such warranties, including without
17 -- limitation, any warranties of merchantability, fitness for a particular
18 -- purpose or non-infringement. Please see the License for the specific terms
19 -- and conditions governing the rights and limitations under the License.
20
21
22
23 class QuadQuadGeo from IntAna
24
25     ---Purpose: Geometric intersections between two natural quadrics
26     --          (Sphere , Cylinder , Cone , Pln from gp).
27     --          The possible intersections are :
28     --           - 1 point
29     --           - 1 or 2 line(s)
30     --           - 1 Point and 1 Line
31     --           - 1 circle
32     --           - 1 ellipse
33     --           - 1 parabola
34     --           - 1 or 2 hyperbola(s).
35     --           - Empty : there is no intersection between the two quadrics.
36     --           - Same  : the quadrics are identical
37     --           - NoGeometricSolution : there may be an intersection, but it
38     --                is necessary to use an analytic algorithm to determine
39     --                it. See class IntQuadQuad from IntAna.
40
41
42 uses Pln         from gp,
43      Cylinder    from gp,
44      Cone        from gp,
45      Sphere      from gp,
46      Pnt         from gp,
47      Lin         from gp,
48      Circ        from gp,
49      Elips       from gp,
50      Parab       from gp,
51      Hypr        from gp,
52      Dir         from gp,
53      ResultType  from IntAna
54
55      
56      
57 raises  NotDone      from StdFail,
58         DomainError  from Standard,
59         OutOfRange   from Standard
60 is
61
62     Create
63     
64         ---Purpose: Empty constructor.
65         
66         returns QuadQuadGeo from IntAna;
67
68         
69     Create(P1,P2        : Pln    from gp; 
70            TolAng, Tol  : Real   from Standard)
71     
72         ---Purpose: Creates the intersection between two planes.
73         --          TolAng is the angular tolerance used to determine
74         --          if the planes are parallel.
75         --          Tol is the tolerance used to determine if the planes
76         --          are identical (only when they are parallel).
77     
78         returns QuadQuadGeo from IntAna;
79
80
81     Perform(me          : in out; 
82             P1,P2       : Pln    from gp; 
83             TolAng, Tol : Real   from Standard)
84     
85         ---Purpose: Intersects two planes.
86         --          TolAng is the angular tolerance used to determine
87         --          if the planes are parallel.
88         --          Tol is the tolerance used to determine if the planes
89         --          are identical (only when they are parallel).
90     
91         is static;
92
93
94     Create(P : Pln      from gp; 
95            C : Cylinder from gp; 
96            Tolang,Tol: Real from Standard; 
97            H : Real from Standard = 0)
98     ---Purpose: Creates the intersection between a plane and a cylinder.
99     --          TolAng is the angular tolerance used to determine
100     --          if the axis of the cylinder is parallel to the plane.
101     --          Tol is the tolerance used to determine if the result
102     --          is a circle or an ellipse. If the maximum distance between
103     --          the ellipse solution and the circle centered at the ellipse
104     --          center is less than Tol, the result will be the circle. 
105     --          H is the height of the cylinder <Cyl>. It is  used to check
106     --          whether the plane and cylinder are parallel.
107
108     returns QuadQuadGeo from IntAna;
109         
110
111     Perform(me: in out; 
112             P : Pln      from gp; 
113             C : Cylinder from gp; 
114             Tolang,Tol: Real from Standard; 
115             H :Real from Standard = 0)
116     
117     ---Purpose: Intersects a plane and a cylinder.
118     --          TolAng is the angular tolerance used to determine
119     --          if the axis of the cylinder is parallel to the plane.
120     --          Tol is the tolerance used to determine if the result
121     --          is a circle or an ellipse. If the maximum distance between
122     --          the ellipse solution and the circle centered at the ellipse
123     --          center is less than Tol, the result will be the circle.
124     --          H is the height of the cylinder <Cyl>. It is  used to check
125     --          whether the plane and cylinder are parallel.
126
127     is static;
128         
129
130     Create(P : Pln    from gp; 
131            S : Sphere from gp)
132
133         ---Purpose: Creates the intersection between a plane and a sphere.
134
135         returns QuadQuadGeo from IntAna;
136         
137         
138     Perform(me: in out; 
139             P : Pln    from gp; 
140             S : Sphere from gp)
141
142         ---Purpose: Intersects a plane and a sphere.
143
144         is static;
145         
146         
147     Create(P : Pln  from gp; 
148            C : Cone from gp; 
149            Tolang,Tol: Real from Standard)
150     
151         ---Purpose: Creates the intersection between a plane and a cone.
152         --          TolAng is the angular tolerance used to determine
153         --          if the axis of the cone is parallel or perpendicular
154         --          to the plane, and if the generating line of the cone
155         --          is parallel to the plane.
156         --          Tol is the tolerance used to determine if the apex
157         --          of the cone is in the plane.
158
159         returns QuadQuadGeo from IntAna;
160
161                 
162     Perform(me: in out; 
163             P : Pln  from gp; 
164             C : Cone from gp; 
165             Tolang,Tol: Real from Standard)
166     
167         ---Purpose: Intersects a plane and a cone.
168         --          TolAng is the angular tolerance used to determine
169         --          if the axis of the cone is parallel or perpendicular
170         --          to the plane, and if the generating line of the cone
171         --          is parallel to the plane.
172         --          Tol is the tolerance used to determine if the apex
173         --          of the cone is in the plane.
174
175         is static;
176
177
178     Create(Cyl1,Cyl2: Cylinder from gp; 
179            Tol      : Real     from Standard)
180
181         ---Purpose: Creates the intersection between two cylinders.
182     
183         returns QuadQuadGeo from IntAna;
184         
185
186     Perform(me       : in out; 
187             Cyl1,Cyl2: Cylinder from gp; 
188             Tol      : Real     from Standard)
189
190         ---Purpose: Intersects two cylinders
191     
192         is static;
193         
194
195     Create(Cyl: Cylinder from gp;  
196            Sph: Sphere   from gp; 
197            Tol: Real     from Standard)
198            
199         ---Purpose: Creates the intersection between a Cylinder and a Sphere.
200     
201         returns QuadQuadGeo from IntAna;
202         
203         
204     Perform(me : in out; 
205             Cyl: Cylinder from gp;  
206             Sph: Sphere   from gp; 
207             Tol: Real     from Standard)
208
209         ---Purpose: Intersects a cylinder and a sphere.
210
211         is static;
212         
213         
214     Create(Cyl: Cylinder from gp;  
215            Con: Cone     from gp; 
216            Tol: Real     from Standard)
217
218         ---Purpose: Creates the intersection between a Cylinder and a Cone
219             
220         returns QuadQuadGeo from IntAna;
221
222         
223     Perform(me : in out; 
224             Cyl: Cylinder from gp;  
225             Con: Cone     from gp; 
226             Tol: Real     from Standard)
227
228         ---Purpose: Intersects a cylinder and a cone.
229
230         is static;
231
232         
233     Create(Sph1: Sphere from gp;  
234            Sph2: Sphere from gp; 
235            Tol : Real   from Standard)
236
237         ---Purpose: Creates the intersection between two Spheres.    
238
239         returns QuadQuadGeo from IntAna;
240         
241         
242     Perform(me  : in out; 
243             Sph1: Sphere from gp;  
244             Sph2: Sphere from gp; 
245             Tol : Real   from Standard)
246
247         ---Purpose: Intersects a two spheres.
248
249         is static;
250         
251         
252     Create(Sph: Sphere from gp;  
253            Con: Cone   from gp; 
254            Tol: Real   from Standard)
255     
256         ---Purpose: Creates the intersection beween a Sphere and a Cone.
257     
258         returns QuadQuadGeo from IntAna;
259
260         
261     Perform(me : in out; 
262             Sph: Sphere from gp;  
263             Con: Cone   from gp; 
264             Tol: Real   from Standard)
265
266         ---Purpose: Intersects a sphere and a cone.
267
268         is static;
269
270
271     Create(Con1: Cone from gp;  Con2: Cone from gp; Tol:Real from Standard)
272     
273         ---Purpose: Creates the intersection beween two cones.
274     
275         returns QuadQuadGeo from IntAna;
276
277
278     Perform(me  : in out; 
279             Con1: Cone from gp;  
280             Con2: Cone from gp; 
281             Tol :Real from Standard)
282
283         ---Purpose: Intersects two cones.
284
285         is static;
286
287
288     IsDone(me)
289
290         ---Purpose: Returns Standard_True if the computation was successful.
291         --          
292         ---C++: inline
293
294         returns Boolean from Standard
295         is static;
296
297
298     TypeInter(me)
299     
300         ---Purpose: Returns the type of intersection.
301         --          
302         ---C++: inline
303     
304         returns ResultType from IntAna
305         
306         raises NotDone from StdFail
307         --- The exception NotDone is raised if IsDone return Standard_False.
308         
309         is static;
310         
311         
312      NbSolutions(me) 
313      
314         ---Purpose: Returns the number of interesections.
315         --          The possible intersections are :
316         --           - 1 point
317         --           - 1 or 2 line(s)
318         --           - 1 Point and 1 Line
319         --           - 1 circle
320         --           - 1 ellipse
321         --           - 1 parabola
322         --           - 1 or 2 hyperbola(s).
323         --          
324         ---C++: inline
325      
326         returns Integer from Standard
327         
328         raises NotDone from StdFail
329         --- The exception NotDone is raised if IsDone returns Standard_False.
330         
331         is static;
332          
333         
334      Point(me; Num: Integer from Standard)
335      
336         ---Purpose: Returns the point solution of range Num.
337      
338         returns Pnt from gp
339         
340         raises DomainError from Standard,
341                OutOfRange  from Standard,
342                NotDone     from StdFail
343         --- The exception NotDone is raised if IsDone return Standard_False.
344         --  The exception DomainError is raised if TypeInter does not return
345         --  IntAna_Point or TypeInter does not return IntAna_PointAndCircle.
346         --  The exception OutOfRange is raised if Num < 1 or Num > NbSolutions.
347
348         is static;
349         
350         
351      Line(me; Num: Integer from Standard)
352      
353         ---Purpose: Returns the line solution of range Num.
354      
355         returns Lin from gp
356         
357         raises DomainError from Standard,
358                OutOfRange  from Standard,
359                NotDone     from StdFail
360         --- The exception NotDone is raised if IsDone return Standard_False.
361         --  The exception DomainError is raised if TypeInter does not return
362         --  IntAna_Line.
363         --  The exception OutOfRange is raised if Num < 1 or Num > NbSolutions.
364         
365         is static;
366         
367         
368      Circle(me; Num: Integer from Standard)
369      
370         ---Purpose: Returns the circle solution of range Num.
371      
372         returns Circ from gp
373         
374         raises DomainError from Standard,
375                OutOfRange  from Standard,
376                NotDone     from StdFail
377         --- The exception NotDone is raised if IsDone return Standard_False.
378         --  The exception DomainError is raised if TypeInter does not return
379         --  IntAna_Circle or TypeInter does not return IntAna_PointAndCircle.
380         --  The exception OutOfRange is raised if Num < 1 or Num > NbSolutions.
381
382         is static;
383         
384         
385      Ellipse(me; Num: Integer from Standard)
386
387         ---Purpose: Returns the ellipse solution of range Num.
388      
389         returns Elips from gp
390         
391         raises DomainError from Standard,
392                OutOfRange  from Standard,
393                NotDone     from StdFail
394         --- The exception NotDone is raised if IsDone return Standard_False.
395         --  The exception DomainError is raised if TypeInter does not return
396         --  IntAna_Ellipse.
397         --  The exception OutOfRange is raised if Num < 1 or Num > NbSolutions.
398
399         is static;
400           
401
402      Parabola(me; Num: Integer from Standard)
403
404         ---Purpose: Returns the parabola solution of range Num.
405      
406         returns Parab from gp
407         
408         raises DomainError from Standard,
409                OutOfRange  from Standard,
410                NotDone     from StdFail
411         --- The exception NotDone is raised if IsDone return Standard_False.
412         --  The exception DomainError is raised if TypeInter does not return
413         --  IntAna_Parabola.
414         --  The exception OutOfRange is raised if Num < 1 or Num > NbSolutions.
415
416         is static;
417
418
419     Hyperbola(me; Num: Integer from Standard)
420
421         ---Purpose: Returns the hyperbola solution of range Num.
422      
423         returns Hypr from gp
424         
425         raises DomainError from Standard,
426                OutOfRange  from Standard,
427                NotDone     from StdFail
428         --- The exception NotDone is raised if IsDone return Standard_False.
429         --  The exception DomainError is raised if TypeInter does not return
430         --  IntAna_Hyperbola.
431         --  The exception OutOfRange is raised if Num < 1 or Num > NbSolutions.
432
433         is static; 
434          
435     HasCommonGen(me)  returns  Boolean  from  Standard;  
436     PChar(me)  returns  Pnt  from  gp; 
437     ---C++:  return  const&
438           
439     InitTolerances(me:out)  
440          
441         ---Purpose: Initialize the values of inner tolerances. 
442         
443         is protected; 
444          
445 fields
446
447     done       :   Boolean      from Standard  is protected;
448     
449     nbint      :   Integer      from Standard  is protected;
450     typeres    :   ResultType   from IntAna    is protected;
451     
452     pt1        :   Pnt          from gp        is protected;
453     pt2        :   Pnt          from gp        is protected;
454
455     dir1       :   Dir          from gp        is protected;
456     dir2       :   Dir          from gp        is protected;
457
458     param1     :   Real         from Standard  is protected;
459     param2     :   Real         from Standard  is protected;
460     param1bis  :   Real         from Standard  is protected;
461     param2bis  :   Real         from Standard  is protected;
462     -- 
463     myEPSILON_DISTANCE               : Real from Standard  is protected;
464     myEPSILON_ANGLE_CONE             : Real from Standard  is protected;
465     myEPSILON_MINI_CIRCLE_RADIUS     : Real from Standard  is protected;
466     myEPSILON_CYLINDER_DELTA_RADIUS  : Real from Standard  is protected;
467     myEPSILON_CYLINDER_DELTA_DISTANCE: Real from Standard  is protected;
468     myEPSILON_AXES_PARA              : Real from Standard  is protected;
469     --  
470     myCommonGen  :  Boolean    from  Standard  is  protected; 
471     myPChar      :  Pnt        from  gp        is protected;
472                 
473 end QuadQuadGeo;