b311480e |
1 | -- Created on: 1997-01-23 |
2 | -- Created by: Laurent BOURESCHE |
3 | -- Copyright (c) 1997-1999 Matra Datavision |
973c2be1 |
4 | -- Copyright (c) 1999-2014 OPEN CASCADE SAS |
b311480e |
5 | -- |
973c2be1 |
6 | -- This file is part of Open CASCADE Technology software library. |
b311480e |
7 | -- |
d5f74e42 |
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 |
973c2be1 |
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. |
b311480e |
13 | -- |
973c2be1 |
14 | -- Alternatively, this file may be used under the terms of Open CASCADE |
15 | -- commercial license or contractual agreement. |
7fd59977 |
16 | |
17 | class RstRstLineBuilder from BRepBlend |
18 | |
19 | ---Purpose: This class processes the data resulting from |
20 | -- Blend_CSWalking but it takes in consideration the Surface |
21 | -- supporting the curve to detect the breakpoint. |
22 | -- |
23 | -- As a result, the criteria of distribution of |
24 | -- points on the line become more flexible because it |
25 | -- should calculate values approached |
26 | -- by an approximation of continued functions based on the |
27 | -- Blend_RstRstFunction. |
28 | -- |
29 | -- Thus this pseudo path necessitates 3 criteria of |
30 | -- regrouping : |
31 | -- |
32 | -- 1) exit of the domain of the curve |
33 | -- |
34 | -- 2) exit of the domain of the surface |
35 | -- |
36 | -- 3) stall as there is a solution of problem |
37 | -- surf/surf within the domain of the surface |
38 | -- of support of the restriction. |
ff8178ef |
39 | -- |
40 | -- Construction of a BRepBlend_Line between two pcurves |
41 | -- from an approached starting solution. The output |
42 | -- entries of this builder are of the same nature |
43 | -- as of a traditional walking, but the requirements |
44 | -- to the Line are not the same. If the determination of validity range is always |
45 | -- guaranteed, the criteria of correct repartition of sections |
46 | -- before smoothing are not respected. The resulting Line |
47 | -- is f(t) oriented. |
7fd59977 |
48 | |
49 | uses Point from Blend, |
50 | Status from Blend, |
51 | DecrochStatus from Blend, |
52 | RstRstFunction from Blend, |
53 | FuncInv from Blend, |
54 | SurfCurvFuncInv from Blend, |
55 | CurvPointFuncInv from Blend, |
56 | Vector from math, |
57 | Matrix from math, |
58 | State from TopAbs, |
59 | Pnt from gp, |
60 | Pnt2d from gp, |
61 | Vec from gp, |
62 | Vec2d from gp, |
63 | HArray1OfReal from TColStd, |
64 | Transition from IntSurf, |
65 | HVertex from Adaptor3d, |
66 | HSurface from Adaptor3d, |
67 | HCurve2d from Adaptor2d, |
68 | TopolTool from Adaptor3d, |
69 | Line from BRepBlend, |
70 | Extremity from BRepBlend |
71 | |
72 | is |
73 | |
74 | Create(Surf1 : HSurface from Adaptor3d; |
75 | Rst1 : HCurve2d from Adaptor2d; |
76 | Domain1 : TopolTool from Adaptor3d; |
77 | Surf2 : HSurface from Adaptor3d; |
78 | Rst2 : HCurve2d from Adaptor2d; |
79 | Domain2 : TopolTool from Adaptor3d) |
80 | returns RstRstLineBuilder from BRepBlend; |
81 | |
82 | Perform(me : in out; |
83 | Func : in out RstRstFunction from Blend; |
84 | Finv1 : in out SurfCurvFuncInv from Blend; |
85 | FinvP1 : in out CurvPointFuncInv from Blend; |
86 | Finv2 : in out SurfCurvFuncInv from Blend; |
87 | FinvP2 : in out CurvPointFuncInv from Blend; |
88 | Pdep : Real from Standard; |
89 | Pmax : Real from Standard; |
90 | MaxStep : Real from Standard; |
91 | TolGuide : Real from Standard; |
92 | Soldep : Vector from math; |
93 | Tolesp : Real from Standard; |
94 | Fleche : Real from Standard; |
95 | Appro : Boolean from Standard = Standard_False) |
96 | is static; |
97 | |
98 | PerformFirstSection(me : in out; |
99 | Func : in out RstRstFunction from Blend; |
100 | Finv1 : in out SurfCurvFuncInv from Blend; |
101 | FinvP1 : in out CurvPointFuncInv from Blend; |
102 | Finv2 : in out SurfCurvFuncInv from Blend; |
103 | FinvP2 : in out CurvPointFuncInv from Blend; |
104 | Pdep : Real from Standard; |
105 | Pmax : Real from Standard; |
106 | Soldep : Vector from math; |
107 | Tolesp : Real from Standard; |
108 | TolGuide : Real from Standard; |
109 | RecRst1 : Boolean from Standard; |
110 | RecP1 : Boolean from Standard; |
111 | RecRst2 : Boolean from Standard; |
112 | RecP2 : Boolean from Standard; |
113 | Psol : out Real from Standard; |
114 | ParSol : out Vector from math) |
115 | returns Boolean from Standard |
116 | is static; |
117 | |
118 | Complete(me : in out; |
119 | Func : in out RstRstFunction from Blend; |
120 | Finv1 : in out SurfCurvFuncInv from Blend; |
121 | FinvP1 : in out CurvPointFuncInv from Blend; |
122 | Finv2 : in out SurfCurvFuncInv from Blend; |
123 | FinvP2 : in out CurvPointFuncInv from Blend; |
124 | Pmin : Real from Standard) |
125 | |
126 | returns Boolean from Standard |
127 | is static; |
128 | |
129 | InternalPerform (me : in out; |
130 | Func : in out RstRstFunction from Blend; |
131 | Finv1 : in out SurfCurvFuncInv from Blend; |
132 | FinvP1 : in out CurvPointFuncInv from Blend; |
133 | Finv2 : in out SurfCurvFuncInv from Blend; |
134 | FinvP2 : in out CurvPointFuncInv from Blend; |
135 | Bound : Real from Standard) |
136 | is static private; |
137 | |
138 | Recadre1(me : in out; |
139 | Func : in out RstRstFunction from Blend; |
140 | Finv : in out SurfCurvFuncInv from Blend; |
141 | Solinv : out Vector from math; |
142 | IsVtx : out Boolean from Standard; |
143 | Vtx : out HVertex from Adaptor3d) |
144 | returns Boolean from Standard |
145 | is static private; |
146 | |
147 | Recadre2(me : in out; |
148 | Func : in out RstRstFunction from Blend; |
149 | Finv : in out SurfCurvFuncInv from Blend; |
150 | Solinv : out Vector from math; |
151 | IsVtx : out Boolean from Standard; |
152 | Vtx : out HVertex from Adaptor3d) |
153 | returns Boolean from Standard |
154 | is static private; |
155 | |
156 | Recadre1(me : in out; |
157 | FinvP : in out CurvPointFuncInv from Blend; |
158 | Solinv : out Vector from math; |
159 | IsVtx : out Boolean from Standard; |
160 | Vtx : out HVertex from Adaptor3d) |
161 | returns Boolean from Standard |
162 | is static private; |
163 | |
164 | Recadre2(me : in out; |
165 | FinvP : in out CurvPointFuncInv from Blend; |
166 | Solinv : out Vector from math; |
167 | IsVtx : out Boolean from Standard; |
168 | Vtx : out HVertex from Adaptor3d) |
169 | returns Boolean from Standard |
170 | is static private; |
171 | |
172 | IsDone(me) |
173 | returns Boolean from Standard |
174 | ---C++: inline |
175 | is static; |
176 | |
177 | Line(me) |
178 | returns Line from BRepBlend |
179 | ---C++: inline |
180 | ---C++: return const& |
181 | is static; |
182 | |
183 | Decroch1Start(me) |
184 | returns Boolean from Standard |
185 | ---C++: inline |
186 | is static; |
187 | |
188 | Decroch1End(me) |
189 | returns Boolean from Standard |
190 | ---C++: inline |
191 | is static; |
192 | |
193 | Decroch2Start(me) |
194 | returns Boolean from Standard |
195 | ---C++: inline |
196 | is static; |
197 | |
198 | Decroch2End(me) |
199 | returns Boolean from Standard |
200 | ---C++: inline |
201 | is static; |
202 | |
203 | Transition(me : in out; |
204 | OnFirst : Boolean from Standard; |
205 | Arc : HCurve2d from Adaptor2d; |
206 | Param : Real from Standard; |
207 | TLine,TArc : out Transition from IntSurf) |
208 | is static private; |
209 | |
210 | MakeExtremity(me : in out; |
211 | Extrem : in out Extremity from BRepBlend; |
212 | OnFirst : Boolean from Standard; |
213 | Arc : HCurve2d from Adaptor2d; |
214 | Param : Real from Standard; |
215 | IsVtx : Boolean from Standard; |
216 | Vtx : HVertex from Adaptor3d) |
217 | is static private; |
218 | |
219 | CheckDeflectionOnRst1(me : in out; |
220 | CurPoint : Point from Blend) |
221 | returns Status from Blend |
222 | is static private; |
223 | |
224 | CheckDeflectionOnRst2(me : in out; |
225 | CurPoint : Point from Blend) |
226 | returns Status from Blend |
227 | is static private; |
228 | |
229 | TestArret(me : in out; |
230 | Func : in out RstRstFunction from Blend; |
231 | TestDeflection : Boolean from Standard; |
232 | State : Status from Blend) |
233 | returns Status from Blend |
234 | is static private; |
235 | |
236 | CheckInside(me : in out; |
237 | Func : in out RstRstFunction from Blend; |
238 | SituOnC1 : out State from TopAbs; |
239 | SituOnC2 : out State from TopAbs; |
240 | Decroch : out DecrochStatus from Blend) |
241 | returns Boolean from Standard |
242 | is static private; |
243 | |
244 | fields |
245 | |
246 | done : Boolean from Standard; |
247 | line : Line from BRepBlend; |
248 | sol : Vector from math; |
249 | surf1 : HSurface from Adaptor3d; |
250 | domain1 : TopolTool from Adaptor3d; |
251 | surf2 : HSurface from Adaptor3d; |
252 | domain2 : TopolTool from Adaptor3d; |
253 | rst1 : HCurve2d from Adaptor2d; |
254 | rst2 : HCurve2d from Adaptor2d; |
255 | |
256 | tolesp : Real from Standard; |
257 | tolgui : Real from Standard; |
258 | pasmax : Real from Standard; |
259 | fleche : Real from Standard; |
260 | param : Real from Standard; |
261 | previousP : Point from Blend; |
262 | rebrou : Boolean from Standard; |
263 | iscomplete : Boolean from Standard; |
264 | comptra : Boolean from Standard; |
265 | sens : Real from Standard; |
266 | decrochdeb : DecrochStatus from Blend; |
267 | decrochfin : DecrochStatus from Blend; |
268 | |
269 | end RstRstLineBuilder from BRepBlend; |
270 | |
271 | |
272 | |
273 | |