3aea7d53169913334e651f0d2b70d4088febf503
[occt.git] / src / IntWalk / IntWalk_IWalking.cdl
1 -- Created on: 1992-03-25
2 -- Created by: Isabelle GRIGNON
3 -- Copyright (c) 1992-1999 Matra Datavision
4 -- Copyright (c) 1999-2014 OPEN CASCADE SAS
5 --
6 -- This file is part of Open CASCADE Technology software library.
7 --
8 -- This library is free software; you can redistribute it and/or modify it under
9 -- the terms of the GNU Lesser General Public License version 2.1 as published
10 -- by the Free Software Foundation, with special exception defined in the file
11 -- OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
12 -- distribution for complete text of the license and disclaimer of any warranty.
13 --
14 -- Alternatively, this file may be used under the terms of Open CASCADE
15 -- commercial license or contractual agreement.
16
17 generic class IWalking from  IntWalk (
18       ThePointOfPath     as any;
19       ThePointOfPathTool as any;
20       ThePOPIterator     as any;
21       ThePointOfLoop     as any;
22       ThePointOfLoopTool as any;
23       ThePOLIterator     as any;
24       ThePSurface        as any;
25       ThePSurfaceTool    as any;
26       TheIWFunction      as any)
27
28
29     ---Purpose: This class implements an algorithm to find all the points
30     --          on a parametric surface  verifying f(u,v)=0
31     --          where f is defined in the IWFunction class.
32     --          These points are found by a marching algorithm, using a set of
33     --          points as starting points.
34
35
36
37
38 uses Vector            from math,
39      SequenceOfInteger from TColStd,
40      SequenceOfReal    from TColStd,
41      StatusDeflection  from IntWalk,
42      VectorOfInteger   from IntWalk,
43      VectorOfWalkingData from IntWalk,
44      Vec               from gp,
45      Dir2d             from gp,
46      PntOn2S           from IntSurf
47
48
49 raises   NotDone    from StdFail,
50          OutOfRange from Standard
51
52
53     class TheIWLine instantiates IWLine from IntWalk
54             (ThePointOfPath);
55
56     class SequenceOfIWLine instantiates Sequence from TCollection
57             (TheIWLine);
58
59
60 is
61
62     Create(Epsilon, Deflection, Step : Real from Standard)
63     
64         ---Purpose: Deflection is the maximum deflection admitted between two 
65         --          consecutive points on a resulting polyline.
66         --          Step is the maximum increment admitted between two 
67         --          consecutive points (in 2d space).
68         --          Epsilon is the tolerance beyond which 2 points
69         --          are confused.
70     
71         returns IWalking from IntWalk;
72
73
74     SetTolerance(me: in out;Epsilon, Deflection, Step : Real from Standard)
75     
76         ---Purpose: Deflection is the maximum deflection admitted between two 
77         --          consecutive points on a resulting polyline.
78         --          Step is the maximum increment admitted between two 
79         --          consecutive points (in 2d space).
80         --          Epsilon is the tolerance beyond which 2 points
81         --          are confused
82     
83         ---C++: inline
84
85         is static;
86
87
88     Perform(me: in out;
89             Pnts1    : ThePOPIterator;
90             Pnts2    : ThePOLIterator;
91             Func     : in out TheIWFunction;
92             S        : ThePSurface;
93             Reversed : Boolean from Standard = Standard_False)
94      
95         ---Purpose: Searches a set of polylines starting on a point of Pnts1
96         --          or Pnts2.
97         --          Each point on a resulting polyline verifies F(u,v)=0
98
99         is static;
100
101
102     Perform(me: in out;
103             Pnts1    : ThePOPIterator;
104             Func     : in out TheIWFunction;
105             S        : ThePSurface;
106             Reversed : Boolean from Standard = Standard_False)
107
108         ---Purpose: Searches a set of polylines starting on a point of Pnts1.
109         --          Each point on a resulting polyline verifies F(u,v)=0
110
111         is static;
112
113
114     IsDone(me)
115     
116         ---Purpose: Returns true if the calculus was successful.
117
118         returns Boolean from Standard
119         ---C++: inline
120
121         is static;      
122
123
124     NbLines(me)
125     
126         ---Purpose: Returns the number of resulting polylines.
127         --          An exception is raised if IsDone returns False.
128
129         returns Integer from Standard
130         ---C++: inline
131
132         raises NotDone from StdFail
133         
134         is static;      
135
136
137     Value(me; Index: Integer from Standard)
138     
139         ---Purpose: Returns the polyline of range Index.
140         --          An exception is raised if IsDone is False.
141         --          An exception is raised if Index<=0 or Index>NbLines.
142
143         returns TheIWLine
144         ---C++: return const&
145         ---C++: inline
146
147         raises OutOfRange from Standard,
148                NotDone    from StdFail
149
150         is static;
151
152
153     NbSinglePnts(me)
154     
155         ---Purpose: Returns the number of points belonging to Pnts on which no
156         --          line starts or ends.
157         --          An exception is raised if IsDone returns False.
158
159         returns Integer from Standard
160         ---C++: inline
161
162         raises NotDone from StdFail
163         
164         is static;
165     
166
167     SinglePnt(me ; Index: Integer from Standard)
168     
169         ---Purpose: Returns the point of range Index .
170         --          An exception is raised if IsDone returns False.
171         --          An exception is raised if Index<=0 or
172         --          Index > NbSinglePnts.
173
174         returns ThePointOfPath
175         ---C++: return const&
176         ---C++: inline
177
178         raises OutOfRange from Standard,
179                NotDone    from StdFail
180
181         is static;
182     
183
184 -- -- private
185
186     Cadrage(me; BornInf, BornSup, UVap : in out Vector from math;
187                 Step : in out Real from Standard; 
188 --                StepV : in out Real from Standard; 
189                 StepSign : Integer from Standard)
190     returns Boolean from Standard 
191     is static protected;
192     
193     TestArretPassage (me: in out; Umult  : SequenceOfReal from TColStd;
194                                   Vmult  : SequenceOfReal from TColStd;
195                                   Section: in out TheIWFunction;
196                                   UV     : in out Vector from math;
197                                   Irang  : out Integer from Standard) 
198     returns Boolean from Standard
199     is static protected;                      
200        
201     TestArretPassage (me: in out; Umult  : SequenceOfReal from TColStd;
202                                   Vmult  : SequenceOfReal from TColStd;
203                                   UV     : Vector from math;
204                                   Index  : Integer from Standard;
205                                   Irang  : out Integer from Standard) 
206     returns Boolean from Standard
207     is static protected;                      
208
209     TestArretAjout(me: in out; Section: in out TheIWFunction;
210                                UV     : in out Vector from math;
211                                Irang  : out Integer from Standard; 
212                                PSol   : out PntOn2S from IntSurf )
213     returns Boolean from Standard
214     is static protected;                      
215                     
216     TestArretCadre(me : in out; Umult  : SequenceOfReal from TColStd;
217                                 Vmult  : SequenceOfReal from TColStd;
218                                 Line   : mutable TheIWLine;
219                                 Section: in out TheIWFunction;
220                                 UV     : in out Vector from math;
221                                 Irang  : out Integer from Standard)
222     is static protected;                      
223
224
225     TestDeflection(me: in out; Section         : in out TheIWFunction;
226                                Finished        : Boolean from Standard;
227                                UV              : Vector from math;
228                                StatusPrecedent : StatusDeflection from IntWalk;
229                                NbDivision      : in out Integer from Standard;
230                                Step           : in out Real from Standard;
231 --                               StepV           : in out Real from Standard;
232                                StepSign        : Integer from Standard)
233     returns StatusDeflection from IntWalk                   
234     is static protected;                      
235
236     ComputeOpenLine(me : in out; Umult  : SequenceOfReal from TColStd;
237                                  Vmult  : SequenceOfReal from TColStd;
238                                  Pnts1  : ThePOPIterator;
239                                  Section: in out TheIWFunction;
240                                  Rajout : in out Boolean from Standard)
241     is static protected;        
242        
243     OpenLine(me : in out; N      : Integer from Standard; 
244                           Psol   : PntOn2S from IntSurf;
245                           Pnts1  : ThePOPIterator;
246                           Section: in out TheIWFunction;
247                           Line   : mutable TheIWLine)
248     is static protected;        
249
250     ComputeCloseLine(me : in out; Umult  : SequenceOfReal from TColStd;
251                                   Vmult  : SequenceOfReal from TColStd;
252                                   Pnts1  : ThePOPIterator;
253                                   Pnts2  : ThePOLIterator;
254                                   Section: in out TheIWFunction;
255                                   Rajout : in out Boolean from Standard)
256     is static protected;        
257
258     AddPointInCurrentLine(me ; N           : Integer from Standard;
259                                PathPnt     : ThePointOfPath;
260                                CurrentLine : mutable TheIWLine)
261     is static protected;
262
263     MakeWalkingPoint(me : in out ; Case    : Integer from Standard;
264                                    U,V     : Real from Standard;
265                                    Section : in out TheIWFunction;
266                                    Psol    : in out PntOn2S from IntSurf)
267
268     is static protected;
269     
270     Clear (me: in out) is static protected;
271     ---Purpose: Clears up internal containers
272
273
274 fields 
275
276     done                : Boolean           from Standard;
277     seqSingle           : ThePOPIterator;
278     fleche              : Real              from Standard;
279     pas                 : Real              from Standard;
280     tolerance           : Vector            from math;
281     epsilon             : Real              from Standard;
282     reversed            : Boolean           from Standard;
283
284     wd1                 : VectorOfWalkingData from IntWalk;
285     wd2                 : VectorOfWalkingData from IntWalk;
286     nbMultiplicities    : VectorOfInteger   from IntWalk;
287     Um                  : Real              from Standard; -- Min U de la surf
288     UM                  : Real              from Standard; -- Max U de la surf
289     Vm                  : Real              from Standard; -- Min V de la surf
290     VM                  : Real              from Standard; -- Max V de la surf
291     previousPoint       : PntOn2S           from IntSurf;
292     prevtg              : Boolean           from Standard;
293     previousd3d         : Vec               from gp;
294     previousd2d         : Dir2d             from gp;
295     seqAjout            : SequenceOfInteger from TColStd; 
296     lines               : SequenceOfIWLine;
297     NbPointsConfondusConsecutifs: Integer   from Standard;
298     EpsilonSembleTropGrand      : Integer   from Standard;
299 end IWalking;
300