0024005: Intersecting a slightly off angle plane with a cylinder takes 7+ seconds
[occt.git] / src / IntPatch / IntPatch_Intersection.cdl
1 -- Created on: 1993-01-21
2 -- Created by: Jacques GOUSSARD
3 -- Copyright (c) 1993-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 Intersection from IntPatch
24
25   ---Purpose: This class provides a generic algorithm to intersect
26         --          2 surfaces.
27
28 uses
29      HVertex         from Adaptor3d,
30      HCurve2d        from Adaptor2d,
31      HSurface        from Adaptor3d,
32      Point           from IntPatch,
33      SequenceOfPoint from IntPatch,
34      TopolTool       from Adaptor3d,
35      SequenceOfLine  from IntPatch,
36      Line            from IntPatch,
37      SurfaceType     from GeomAbs,
38      ListOfPntOn2S   from IntSurf
39  
40 raises NotDone           from StdFail,
41        OutOfRange        from Standard,
42        DomainError       from Standard,
43        ConstructionError from Standard
44
45 is
46     Create
47     
48         returns Intersection from IntPatch;
49
50
51     Create (S1: HSurface from Adaptor3d; D1: TopolTool from Adaptor3d;
52             S2: HSurface from Adaptor3d; D2: TopolTool from Adaptor3d;
53             TolArc,TolTang: Real from Standard)
54             
55       returns Intersection from IntPatch
56             raises ConstructionError from Standard;
57
58     Create (S1: HSurface from Adaptor3d; D1: TopolTool from Adaptor3d;
59             TolArc,TolTang: Real from Standard)
60             
61       returns Intersection from IntPatch
62       raises ConstructionError from Standard;
63
64
65     SetTolerances(me       : in out;
66                   TolArc   : Real from Standard;
67                   TolTang  : Real from Standard;
68                   UVMaxStep: Real from Standard;
69                   Fleche   : Real from Standard)
70                   
71       ---Purpose: Set the tolerances used by the algorithms:
72       --          --- Implicit   - Parametric  
73       --          --- Parametric - Parametric 
74       --          --- Implicit   - Implicit 
75       --         
76       --          TolArc   is  used  to   compute  the intersections
77       --          between the restrictions   of  a  surface   and  a
78       --          walking line.
79       --          
80       --          TolTang is used to compute the points on a walking
81       --          line, and in geometric algorithms.
82       --          
83       --          Fleche  is  a  parameter   used in    the  walking
84       --          algorithms to provide small curvatures on a line.
85       --          
86       --          UVMaxStep is  a  parameter   used in  the  walking
87       --          algorithms  to    compute the  distance between to
88       --          points in their respective parametrtic spaces.
89       --
90       
91       is static;
92
93     Perform (me: in out;
94              S1: HSurface from Adaptor3d; D1: TopolTool from Adaptor3d;
95              S2: HSurface from Adaptor3d; D2: TopolTool from Adaptor3d;
96              TolArc,TolTang: Real from Standard;
97              isGeomInt : Boolean from Standard = Standard_True)              
98
99       raises ConstructionError from Standard    
100       is static;
101     
102       --amv
103     Perform ( me: in out;
104               S1: HSurface from Adaptor3d; D1: TopolTool from Adaptor3d;
105               S2: HSurface from Adaptor3d; D2: TopolTool from Adaptor3d;
106               TolArc,TolTang: Real from Standard;
107               LOfPnts: in out ListOfPntOn2S from IntSurf;
108               RestrictLine: Boolean from Standard = Standard_True;
109               isGeomInt : Boolean from Standard = Standard_True)
110               
111       ---Purpose: If isGeomInt == Standard_False, then method 
112       --          Param-Param intersection will be used.
113       
114       raises ConstructionError from Standard
115       is static;
116
117     Perform ( me: in out;
118               S1: HSurface from Adaptor3d; D1: TopolTool from Adaptor3d;
119               S2: HSurface from Adaptor3d; D2: TopolTool from Adaptor3d;
120               U1,V1,U2,V2 : Real from Standard;
121               TolArc,TolTang: Real from Standard)
122               
123       raises ConstructionError from Standard
124       is static;
125
126     Perform (me: in out;
127              S1: HSurface from Adaptor3d; D1: TopolTool from Adaptor3d;
128              TolArc,TolTang: Real from Standard)
129       
130       raises ConstructionError from Standard
131       is static;
132   
133     ParamParamPerfom( me: in out;
134                       S1: HSurface from Adaptor3d; D1: TopolTool from Adaptor3d;
135                       S2: HSurface from Adaptor3d; D2: TopolTool from Adaptor3d;
136                       TolArc,TolTang: Real from Standard;
137                       LOfPnts: in out ListOfPntOn2S from IntSurf;
138                       RestrictLine: Boolean from Standard;
139                       typs1, typs2: SurfaceType from GeomAbs)
140
141       is private;
142       
143     GeomGeomPerfom( me: in out;
144                     S1: HSurface from Adaptor3d; D1: TopolTool from Adaptor3d;
145                     S2: HSurface from Adaptor3d; D2: TopolTool from Adaptor3d;
146                     TolArc,TolTang: Real from Standard;
147                     LOfPnts: in out ListOfPntOn2S from IntSurf;
148                     RestrictLine: Boolean from Standard;
149                     typs1, typs2: SurfaceType from GeomAbs)
150
151       is private;
152                     
153     GeomParamPerfom(me: in out;
154                     S1: HSurface from Adaptor3d; D1: TopolTool from Adaptor3d;
155                     S2: HSurface from Adaptor3d; D2: TopolTool from Adaptor3d;
156                     isNotAnalitical: Boolean from Standard;
157                     typs1, typs2: SurfaceType from GeomAbs)
158       
159       is private;
160       
161     IsDone(me)
162     
163         ---Purpose: Returns True if the calculus was succesfull.
164
165         returns Boolean from Standard
166       ---C++: inline
167       
168         is static;
169
170
171     IsEmpty(me)
172       ---Purpose: Returns true if the is no intersection.
173       ---C++: inline
174       returns Boolean from Standard
175       raises NotDone from StdFail
176       is static;
177
178
179     TangentFaces(me)
180       ---Purpose: Returns True if the two patches are considered as
181       --          entierly tangent, i-e every restriction arc of one
182       --          patch is inside the geometric base of the other patch.
183       ---C++: inline
184       
185       returns Boolean from Standard
186       raises NotDone from StdFail
187       is static;
188       
189     OppositeFaces(me)
190       ---Purpose: Returns True when the TangentFaces returns True and the
191       --          normal vectors evaluated at a point on the first and the
192       --          second surface are opposite. 
193       --          The exception DomainError is raised if TangentFaces
194       --          returns False.
195       ---C++: inline
196
197         returns Boolean from Standard
198       raises  NotDone     from StdFail,
199               DomainError from Standard
200       is static;
201
202
203     NbPnts(me)
204       ---Purpose: Returns the number of "single" points.
205       ---C++: inline
206
207         returns Integer from Standard
208         raises NotDone from StdFail
209         is static;
210
211
212     Point(me; Index: Integer from Standard)
213     
214         ---Purpose: Returns the point of range Index.
215         --          An exception is raised if Index<=0 or Index>NbPnt.
216       ---C++: return const&
217       ---C++: inline
218
219         returns Point from IntPatch
220         raises  NotDone    from StdFail,
221               OutOfRange from Standard
222
223         is static;
224
225
226     NbLines(me)
227       ---Purpose: Returns the number of intersection lines.
228       ---C++: inline
229       
230       returns Integer from Standard
231       raises NotDone from StdFail
232       is static;
233       
234     Line(me; Index: Integer from Standard)
235       ---Purpose: Returns the line of range Index.
236         --          An exception is raised if Index<=0 or Index>NbLine.
237       ---C++: return const&
238       ---C++: inline
239
240         returns Line from IntPatch
241         raises  NotDone    from StdFail,
242               OutOfRange from Standard
243               
244       is static;
245       
246     SequenceOfLine(me)
247       ---C++: return const&
248       
249       returns SequenceOfLine from IntPatch
250       raises NotDone    from StdFail
251       is static;
252         
253     Dump(me; Mode : Integer from Standard;
254              S1   : HSurface from Adaptor3d; D1: TopolTool from Adaptor3d;
255              S2   : HSurface from Adaptor3d; D2: TopolTool from Adaptor3d) 
256         ---Purpose: Dump of each result line. 
257         ---         Mode for more accurate dumps. 
258         --          
259         is static;
260
261 fields
262
263     done       : Boolean         from Standard;
264     empt       : Boolean         from Standard;
265     tgte       : Boolean         from Standard;
266     oppo       : Boolean         from Standard;
267     spnt       : SequenceOfPoint from IntPatch;
268     slin       : SequenceOfLine  from IntPatch;
269     myTolArc   : Real from Standard;
270     myTolTang  : Real from Standard;
271     myUVMaxStep: Real from Standard;
272     myFleche   : Real from Standard;
273     myIsStartPnt: Boolean from Standard;
274     myU1Start  : Real from Standard;
275     myV1Start  : Real from Standard;
276     myU2Start  : Real from Standard;
277     myV2Start  : Real from Standard;
278
279 end Intersection;