42cf5bc1 |
1 | // Created on: 1993-11-09 |
2 | // Created by: Laurent BOURESCHE |
3 | // Copyright (c) 1993-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 | #ifndef _ChFi3d_Builder_HeaderFile |
18 | #define _ChFi3d_Builder_HeaderFile |
19 | |
20 | #include <Standard.hxx> |
21 | #include <Standard_DefineAlloc.hxx> |
22 | #include <Standard_Handle.hxx> |
23 | |
24 | #include <TopoDS_Shape.hxx> |
25 | #include <Standard_Real.hxx> |
26 | #include <GeomAbs_Shape.hxx> |
27 | #include <ChFiDS_Map.hxx> |
28 | #include <ChFiDS_ListOfStripe.hxx> |
29 | #include <ChFiDS_StripeMap.hxx> |
30 | #include <ChFiDS_Regularities.hxx> |
31 | #include <TopTools_ListOfShape.hxx> |
32 | #include <TopTools_DataMapOfShapeListOfInteger.hxx> |
1d54b807 |
33 | #include <TopTools_DataMapOfShapeShape.hxx> |
42cf5bc1 |
34 | #include <Standard_Boolean.hxx> |
35 | #include <Standard_Integer.hxx> |
36 | #include <ChFiDS_ErrorStatus.hxx> |
37 | #include <math_Vector.hxx> |
38 | #include <TopAbs_Orientation.hxx> |
39 | #include <ChFiDS_SequenceOfSurfData.hxx> |
40 | #include <TopAbs_State.hxx> |
1d54b807 |
41 | |
42 | #include <BRepAdaptor_Surface.hxx> |
43 | |
42cf5bc1 |
44 | class TopOpeBRepDS_HDataStructure; |
45 | class TopOpeBRepBuild_HBuilder; |
46 | class Standard_OutOfRange; |
47 | class Standard_NoSuchObject; |
48 | class Standard_ConstructionError; |
49 | class TopoDS_Shape; |
50 | class TopoDS_Edge; |
51 | class ChFiDS_Spine; |
52 | class TopoDS_Vertex; |
53 | class Geom_Surface; |
54 | class ChFiDS_SurfData; |
55 | class ChFiDS_HElSpine; |
56 | class BRepAdaptor_HSurface; |
57 | class Adaptor3d_TopolTool; |
58 | class BRepAdaptor_HCurve2d; |
59 | class BRepBlend_Line; |
60 | class Adaptor3d_HSurface; |
61 | class Blend_Function; |
62 | class Blend_FuncInv; |
63 | class Adaptor2d_HCurve2d; |
64 | class Blend_SurfRstFunction; |
65 | class Blend_SurfPointFuncInv; |
66 | class Blend_SurfCurvFuncInv; |
67 | class Blend_RstRstFunction; |
68 | class Blend_CurvPointFuncInv; |
69 | class ChFiDS_Stripe; |
70 | class BRepTopAdaptor_TopolTool; |
71 | class gp_Pnt2d; |
72 | class ChFiDS_CommonPoint; |
73 | class TopoDS_Face; |
74 | class AppBlend_Approx; |
75 | class Geom2d_Curve; |
76 | |
77 | |
78 | //! Root class for calculation of surfaces (fillets, |
79 | //! chamfers) destined to smooth edges of |
80 | //! a gap on a Shape and the reconstruction of the Shape. |
81 | class ChFi3d_Builder |
82 | { |
83 | public: |
84 | |
85 | DEFINE_STANDARD_ALLOC |
86 | |
e6f550da |
87 | Standard_EXPORT virtual ~ChFi3d_Builder(); |
42cf5bc1 |
88 | |
1d54b807 |
89 | Standard_EXPORT void SetParams (const Standard_Real Tang, |
90 | const Standard_Real Tesp, |
91 | const Standard_Real T2d, |
92 | const Standard_Real TApp3d, |
93 | const Standard_Real TolApp2d, |
94 | const Standard_Real Fleche); |
42cf5bc1 |
95 | |
1d54b807 |
96 | Standard_EXPORT void SetContinuity (const GeomAbs_Shape InternalContinuity, |
97 | const Standard_Real AngularTolerance); |
42cf5bc1 |
98 | |
99 | //! extracts from the list the contour containing edge E. |
100 | Standard_EXPORT void Remove (const TopoDS_Edge& E); |
101 | |
102 | //! gives the number of the contour containing E or 0 |
103 | //! if E does not belong to any contour. |
104 | Standard_EXPORT Standard_Integer Contains (const TopoDS_Edge& E) const; |
105 | |
106 | //! gives the number of the contour containing E or 0 |
107 | //! if E does not belong to any contour. |
108 | //! Sets in IndexInSpine the index of E in the contour if it's found |
1d54b807 |
109 | Standard_EXPORT Standard_Integer Contains (const TopoDS_Edge& E, |
110 | Standard_Integer& IndexInSpine) const; |
42cf5bc1 |
111 | |
112 | //! gives the number of disjoint contours on which |
113 | //! the fillets are calculated |
114 | Standard_EXPORT Standard_Integer NbElements() const; |
115 | |
116 | //! gives the n'th set of edges (contour) |
117 | //! if I >NbElements() |
118 | Standard_EXPORT Handle(ChFiDS_Spine) Value (const Standard_Integer I) const; |
119 | |
120 | //! returns the length of the contour of index IC. |
121 | Standard_EXPORT Standard_Real Length (const Standard_Integer IC) const; |
122 | |
123 | //! returns the First vertex V of |
124 | //! the contour of index IC. |
125 | Standard_EXPORT TopoDS_Vertex FirstVertex (const Standard_Integer IC) const; |
126 | |
127 | //! returns the Last vertex V of |
128 | //! the contour of index IC. |
129 | Standard_EXPORT TopoDS_Vertex LastVertex (const Standard_Integer IC) const; |
130 | |
131 | //! returns the abscissa of the vertex V on |
132 | //! the contour of index IC. |
1d54b807 |
133 | Standard_EXPORT Standard_Real Abscissa (const Standard_Integer IC, |
134 | const TopoDS_Vertex& V) const; |
42cf5bc1 |
135 | |
136 | //! returns the relative abscissa([0.,1.]) of the |
137 | //! vertex V on the contour of index IC. |
1d54b807 |
138 | Standard_EXPORT Standard_Real RelativeAbscissa (const Standard_Integer IC, |
139 | const TopoDS_Vertex& V) const; |
42cf5bc1 |
140 | |
141 | //! returns true if the contour of index IC is closed |
142 | //! an tangent. |
143 | Standard_EXPORT Standard_Boolean ClosedAndTangent (const Standard_Integer IC) const; |
144 | |
145 | //! returns true if the contour of index IC is closed |
146 | Standard_EXPORT Standard_Boolean Closed (const Standard_Integer IC) const; |
147 | |
148 | //! general calculation of geometry on all edges, |
149 | //! topologic reconstruction. |
150 | Standard_EXPORT void Compute(); |
151 | |
152 | //! returns True if the computation is success |
153 | Standard_EXPORT Standard_Boolean IsDone() const; |
154 | |
155 | //! if (Isdone()) makes the result. |
156 | //! if (!Isdone()) |
157 | Standard_EXPORT TopoDS_Shape Shape() const; |
158 | |
159 | //! Advanced function for the history |
160 | Standard_EXPORT const TopTools_ListOfShape& Generated (const TopoDS_Shape& EouV); |
161 | |
162 | //! Returns the number of contours on which the calculation |
163 | //! has failed. |
164 | Standard_EXPORT Standard_Integer NbFaultyContours() const; |
165 | |
166 | //! Returns the number of I'th contour on which the calculation |
167 | //! has failed. |
168 | Standard_EXPORT Standard_Integer FaultyContour (const Standard_Integer I) const; |
169 | |
170 | //! Returns the number of surfaces calculated on the contour IC. |
171 | Standard_EXPORT Standard_Integer NbComputedSurfaces (const Standard_Integer IC) const; |
172 | |
173 | //! Returns the IS'th surface calculated on the contour IC. |
1d54b807 |
174 | Standard_EXPORT Handle(Geom_Surface) ComputedSurface (const Standard_Integer IC, |
175 | const Standard_Integer IS) const; |
42cf5bc1 |
176 | |
177 | //! Returns the number of vertices on which the calculation |
178 | //! has failed. |
179 | Standard_EXPORT Standard_Integer NbFaultyVertices() const; |
180 | |
181 | //! Returns the IV'th vertex on which the calculation has failed. |
182 | Standard_EXPORT TopoDS_Vertex FaultyVertex (const Standard_Integer IV) const; |
183 | |
184 | //! returns True if a partial result has been calculated |
185 | Standard_EXPORT Standard_Boolean HasResult() const; |
186 | |
187 | //! if (HasResult()) returns partial result |
188 | //! if (!HasResult()) |
189 | Standard_EXPORT TopoDS_Shape BadShape() const; |
190 | |
191 | //! for the stripe IC ,indication on the cause |
192 | //! of failure WalkingFailure,TwistedSurface,Error, Ok |
193 | Standard_EXPORT ChFiDS_ErrorStatus StripeStatus (const Standard_Integer IC) const; |
194 | |
195 | //! Reset all results of compute and returns the algorythm |
196 | //! in the state of the last acquisition to |
197 | //! enable modification of contours or areas. |
198 | Standard_EXPORT void Reset(); |
199 | |
200 | //! Returns the Builder of topologic operations. |
201 | Standard_EXPORT Handle(TopOpeBRepBuild_HBuilder) Builder() const; |
202 | |
203 | //! Method, implemented in the inheritants, calculates |
204 | //! the elements of construction of the surface (fillet or |
205 | //! chamfer). |
1d54b807 |
206 | Standard_EXPORT Standard_Boolean SplitKPart (const Handle(ChFiDS_SurfData)& Data, |
207 | ChFiDS_SequenceOfSurfData& SetData, |
208 | const Handle(ChFiDS_Spine)& Spine, |
209 | const Standard_Integer Iedge, |
210 | const Handle(Adaptor3d_HSurface)& S1, |
211 | const Handle(Adaptor3d_TopolTool)& I1, |
212 | const Handle(Adaptor3d_HSurface)& S2, |
213 | const Handle(Adaptor3d_TopolTool)& I2, |
214 | Standard_Boolean& Intf, |
215 | Standard_Boolean& Intl); |
42cf5bc1 |
216 | |
dde68833 |
217 | Standard_EXPORT Standard_Boolean PerformTwoCornerbyInter (const Standard_Integer Index); |
42cf5bc1 |
218 | |
219 | |
220 | |
221 | |
222 | protected: |
223 | |
224 | |
225 | Standard_EXPORT ChFi3d_Builder(const TopoDS_Shape& S, const Standard_Real Ta); |
226 | |
227 | Standard_EXPORT virtual void SimulKPart (const Handle(ChFiDS_SurfData)& SD) const = 0; |
228 | |
1d54b807 |
229 | Standard_EXPORT virtual Standard_Boolean SimulSurf (Handle(ChFiDS_SurfData)& Data, |
230 | const Handle(ChFiDS_HElSpine)& Guide, |
231 | const Handle(ChFiDS_Spine)& Spine, |
232 | const Standard_Integer Choix, |
233 | const Handle(BRepAdaptor_HSurface)& S1, |
234 | const Handle(Adaptor3d_TopolTool)& I1, |
235 | const Handle(BRepAdaptor_HSurface)& S2, |
236 | const Handle(Adaptor3d_TopolTool)& I2, |
237 | const Standard_Real TolGuide, |
238 | Standard_Real& First, |
239 | Standard_Real& Last, |
240 | const Standard_Boolean Inside, |
241 | const Standard_Boolean Appro, |
242 | const Standard_Boolean Forward, |
243 | const Standard_Boolean RecOnS1, |
244 | const Standard_Boolean RecOnS2, |
245 | const math_Vector& Soldep, |
246 | Standard_Integer& Intf, |
247 | Standard_Integer& Intl) = 0; |
248 | |
249 | Standard_EXPORT virtual void SimulSurf (Handle(ChFiDS_SurfData)& Data, |
250 | const Handle(ChFiDS_HElSpine)& Guide, |
251 | const Handle(ChFiDS_Spine)& Spine, |
252 | const Standard_Integer Choix, |
253 | const Handle(BRepAdaptor_HSurface)& S1, |
254 | const Handle(Adaptor3d_TopolTool)& I1, |
255 | const Handle(BRepAdaptor_HCurve2d)& PC1, |
256 | const Handle(BRepAdaptor_HSurface)& Sref1, |
257 | const Handle(BRepAdaptor_HCurve2d)& PCref1, |
258 | Standard_Boolean& Decroch1, |
259 | const Handle(BRepAdaptor_HSurface)& S2, |
260 | const Handle(Adaptor3d_TopolTool)& I2, |
261 | const TopAbs_Orientation Or2, |
262 | const Standard_Real Fleche, |
263 | const Standard_Real TolGuide, |
264 | Standard_Real& First, |
265 | Standard_Real& Last, |
266 | const Standard_Boolean Inside, |
267 | const Standard_Boolean Appro, |
268 | const Standard_Boolean Forward, |
269 | const Standard_Boolean RecP, |
270 | const Standard_Boolean RecS, |
271 | const Standard_Boolean RecRst, |
272 | const math_Vector& Soldep); |
273 | |
274 | Standard_EXPORT virtual void SimulSurf (Handle(ChFiDS_SurfData)& Data, |
275 | const Handle(ChFiDS_HElSpine)& Guide, |
276 | const Handle(ChFiDS_Spine)& Spine, |
277 | const Standard_Integer Choix, |
278 | const Handle(BRepAdaptor_HSurface)& S1, |
279 | const Handle(Adaptor3d_TopolTool)& I1, |
280 | const TopAbs_Orientation Or1, |
281 | const Handle(BRepAdaptor_HSurface)& S2, |
282 | const Handle(Adaptor3d_TopolTool)& I2, |
283 | const Handle(BRepAdaptor_HCurve2d)& PC2, |
284 | const Handle(BRepAdaptor_HSurface)& Sref2, |
285 | const Handle(BRepAdaptor_HCurve2d)& PCref2, |
286 | Standard_Boolean& Decroch2, |
287 | const Standard_Real Fleche, |
288 | const Standard_Real TolGuide, |
289 | Standard_Real& First, |
290 | Standard_Real& Last, |
291 | const Standard_Boolean Inside, |
292 | const Standard_Boolean Appro, |
293 | const Standard_Boolean Forward, |
294 | const Standard_Boolean RecP, |
295 | const Standard_Boolean RecS, |
296 | const Standard_Boolean RecRst, |
297 | const math_Vector& Soldep); |
298 | |
299 | Standard_EXPORT virtual void SimulSurf (Handle(ChFiDS_SurfData)& Data, |
300 | const Handle(ChFiDS_HElSpine)& Guide, |
301 | const Handle(ChFiDS_Spine)& Spine, |
302 | const Standard_Integer Choix, |
303 | const Handle(BRepAdaptor_HSurface)& S1, |
304 | const Handle(Adaptor3d_TopolTool)& I1, |
305 | const Handle(BRepAdaptor_HCurve2d)& PC1, |
306 | const Handle(BRepAdaptor_HSurface)& Sref1, |
307 | const Handle(BRepAdaptor_HCurve2d)& PCref1, |
308 | Standard_Boolean& Decroch1, |
309 | const TopAbs_Orientation Or1, |
310 | const Handle(BRepAdaptor_HSurface)& S2, |
311 | const Handle(Adaptor3d_TopolTool)& I2, |
312 | const Handle(BRepAdaptor_HCurve2d)& PC2, |
313 | const Handle(BRepAdaptor_HSurface)& Sref2, |
314 | const Handle(BRepAdaptor_HCurve2d)& PCref2, |
315 | Standard_Boolean& Decroch2, |
316 | const TopAbs_Orientation Or2, |
317 | const Standard_Real Fleche, |
318 | const Standard_Real TolGuide, |
319 | Standard_Real& First, |
320 | Standard_Real& Last, |
321 | const Standard_Boolean Inside, |
322 | const Standard_Boolean Appro, |
323 | const Standard_Boolean Forward, |
324 | const Standard_Boolean RecP1, |
325 | const Standard_Boolean RecRst1, |
326 | const Standard_Boolean RecP2, |
327 | const Standard_Boolean RecRst2, |
328 | const math_Vector& Soldep); |
329 | |
330 | Standard_EXPORT Standard_Boolean SimulData (Handle(ChFiDS_SurfData)& Data, |
331 | const Handle(ChFiDS_HElSpine)& Guide, |
332 | const Handle(ChFiDS_HElSpine)& AdditionalGuide, |
333 | Handle(BRepBlend_Line)& Lin, |
334 | const Handle(Adaptor3d_HSurface)& S1, |
335 | const Handle(Adaptor3d_TopolTool)& I1, |
336 | const Handle(Adaptor3d_HSurface)& S2, |
337 | const Handle(Adaptor3d_TopolTool)& I2, |
338 | Blend_Function& Func, |
339 | Blend_FuncInv& FInv, |
340 | const Standard_Real PFirst, |
341 | const Standard_Real MaxStep, |
342 | const Standard_Real Fleche, |
343 | const Standard_Real TolGuide, |
344 | Standard_Real& First, |
345 | Standard_Real& Last, |
346 | const Standard_Boolean Inside, |
347 | const Standard_Boolean Appro, |
348 | const Standard_Boolean Forward, |
349 | const math_Vector& Soldep, |
350 | const Standard_Integer NbSecMin, |
351 | const Standard_Boolean RecOnS1 = Standard_False, |
352 | const Standard_Boolean RecOnS2 = Standard_False); |
353 | |
354 | Standard_EXPORT Standard_Boolean SimulData (Handle(ChFiDS_SurfData)& Data, |
355 | const Handle(ChFiDS_HElSpine)& HGuide, |
356 | Handle(BRepBlend_Line)& Lin, |
357 | const Handle(Adaptor3d_HSurface)& S1, |
358 | const Handle(Adaptor3d_TopolTool)& I1, |
359 | const Handle(Adaptor3d_HSurface)& S2, |
360 | const Handle(Adaptor2d_HCurve2d)& PC2, |
361 | const Handle(Adaptor3d_TopolTool)& I2, |
362 | Standard_Boolean& Decroch, |
363 | Blend_SurfRstFunction& Func, |
364 | Blend_FuncInv& FInv, |
365 | Blend_SurfPointFuncInv& FInvP, |
366 | Blend_SurfCurvFuncInv& FInvC, |
367 | const Standard_Real PFirst, |
368 | const Standard_Real MaxStep, |
369 | const Standard_Real Fleche, |
370 | const Standard_Real TolGuide, |
371 | Standard_Real& First, |
372 | Standard_Real& Last, |
373 | const math_Vector& Soldep, |
374 | const Standard_Integer NbSecMin, |
375 | const Standard_Boolean Inside, |
376 | const Standard_Boolean Appro, |
377 | const Standard_Boolean Forward, |
378 | const Standard_Boolean RecP, |
379 | const Standard_Boolean RecS, |
380 | const Standard_Boolean RecRst); |
381 | |
382 | Standard_EXPORT Standard_Boolean SimulData (Handle(ChFiDS_SurfData)& Data, |
383 | const Handle(ChFiDS_HElSpine)& HGuide, |
384 | Handle(BRepBlend_Line)& Lin, |
385 | const Handle(Adaptor3d_HSurface)& S1, |
386 | const Handle(Adaptor2d_HCurve2d)& PC1, |
387 | const Handle(Adaptor3d_TopolTool)& I1, |
388 | Standard_Boolean& Decroch1, |
389 | const Handle(Adaptor3d_HSurface)& S2, |
390 | const Handle(Adaptor2d_HCurve2d)& PC2, |
391 | const Handle(Adaptor3d_TopolTool)& I2, |
392 | Standard_Boolean& Decroch2, |
393 | Blend_RstRstFunction& Func, |
394 | Blend_SurfCurvFuncInv& FInv1, |
395 | Blend_CurvPointFuncInv& FInvP1, |
396 | Blend_SurfCurvFuncInv& FInv2, |
397 | Blend_CurvPointFuncInv& FInvP2, |
398 | const Standard_Real PFirst, |
399 | const Standard_Real MaxStep, |
400 | const Standard_Real Fleche, |
401 | const Standard_Real TolGuide, |
402 | Standard_Real& First, |
403 | Standard_Real& Last, |
404 | const math_Vector& Soldep, |
405 | const Standard_Integer NbSecMin, |
406 | const Standard_Boolean Inside, |
407 | const Standard_Boolean Appro, |
408 | const Standard_Boolean Forward, |
409 | const Standard_Boolean RecP1, |
410 | const Standard_Boolean RecRst1, |
411 | const Standard_Boolean RecP2, |
412 | const Standard_Boolean RecRst2); |
42cf5bc1 |
413 | |
414 | Standard_EXPORT virtual void SetRegul() = 0; |
415 | |
1d54b807 |
416 | Standard_EXPORT Standard_Boolean PerformElement (const Handle(ChFiDS_Spine)& CElement, |
417 | const Standard_Real Offset, |
418 | const TopoDS_Face& theFirstFace); |
42cf5bc1 |
419 | |
420 | Standard_EXPORT void PerformExtremity (const Handle(ChFiDS_Spine)& CElement); |
421 | |
1d54b807 |
422 | Standard_EXPORT void PerformSetOfSurf (Handle(ChFiDS_Stripe)& S, |
423 | const Standard_Boolean Simul = Standard_False); |
424 | |
425 | Standard_EXPORT void PerformSetOfKPart (Handle(ChFiDS_Stripe)& S, |
426 | const Standard_Boolean Simul = Standard_False); |
427 | |
428 | Standard_EXPORT void PerformSetOfKGen (Handle(ChFiDS_Stripe)& S, |
429 | const Standard_Boolean Simul = Standard_False); |
430 | |
431 | Standard_EXPORT void Trunc (const Handle(ChFiDS_SurfData)& SD, |
432 | const Handle(ChFiDS_Spine)& Spine, |
433 | const Handle(Adaptor3d_HSurface)& S1, |
434 | const Handle(Adaptor3d_HSurface)& S2, |
435 | const Standard_Integer iedge, |
436 | const Standard_Boolean isfirst, |
437 | const Standard_Integer cntlFiOnS); |
438 | |
439 | Standard_EXPORT void CallPerformSurf (Handle(ChFiDS_Stripe)& Stripe, |
440 | const Standard_Boolean Simul, |
441 | ChFiDS_SequenceOfSurfData& SeqSD, |
442 | Handle(ChFiDS_SurfData)& SD, |
443 | const Handle(ChFiDS_HElSpine)& Guide, |
444 | const Handle(ChFiDS_Spine)& Spine, |
445 | const Handle(BRepAdaptor_HSurface)& HS1, |
446 | const Handle(BRepAdaptor_HSurface)& HS3, |
447 | const gp_Pnt2d& P1, |
448 | const gp_Pnt2d& P3, |
449 | const Handle(Adaptor3d_TopolTool)& I1, |
450 | const Handle(BRepAdaptor_HSurface)& HS2, |
451 | const Handle(BRepAdaptor_HSurface)& HS4, |
452 | const gp_Pnt2d& P2, const gp_Pnt2d& P4, |
453 | const Handle(Adaptor3d_TopolTool)& I2, |
454 | const Standard_Real MaxStep, |
455 | const Standard_Real Fleche, |
456 | const Standard_Real TolGuide, |
457 | Standard_Real& First, |
458 | Standard_Real& Last, |
459 | const Standard_Boolean Inside, |
460 | const Standard_Boolean Appro, |
461 | const Standard_Boolean Forward, |
462 | const Standard_Boolean RecOnS1, |
463 | const Standard_Boolean RecOnS2, |
464 | math_Vector& Soldep, |
465 | Standard_Integer& Intf, |
466 | Standard_Integer& Intl, |
467 | Handle(BRepAdaptor_HSurface)& Surf1, |
468 | Handle(BRepAdaptor_HSurface)& Surf2); |
42cf5bc1 |
469 | |
470 | //! Method, implemented in the inheritants, calculating |
471 | //! elements of construction of the surface (fillet or |
472 | //! chamfer). |
1d54b807 |
473 | Standard_EXPORT virtual Standard_Boolean PerformSurf (ChFiDS_SequenceOfSurfData& Data, |
474 | const Handle(ChFiDS_HElSpine)& Guide, |
475 | const Handle(ChFiDS_Spine)& Spine, |
476 | const Standard_Integer Choix, |
477 | const Handle(BRepAdaptor_HSurface)& S1, |
478 | const Handle(Adaptor3d_TopolTool)& I1, |
479 | const Handle(BRepAdaptor_HSurface)& S2, |
480 | const Handle(Adaptor3d_TopolTool)& I2, |
481 | const Standard_Real MaxStep, |
482 | const Standard_Real Fleche, |
483 | const Standard_Real TolGuide, |
484 | Standard_Real& First, |
485 | Standard_Real& Last, |
486 | const Standard_Boolean Inside, |
487 | const Standard_Boolean Appro, |
488 | const Standard_Boolean Forward, |
489 | const Standard_Boolean RecOnS1, |
490 | const Standard_Boolean RecOnS2, |
491 | const math_Vector& Soldep, |
492 | Standard_Integer& Intf, |
493 | Standard_Integer& Intl) = 0; |
42cf5bc1 |
494 | |
495 | //! Method, implemented in inheritants, calculates |
496 | //! the elements of construction of the surface (fillet |
497 | //! or chamfer) contact edge/face. |
1d54b807 |
498 | Standard_EXPORT virtual void PerformSurf (ChFiDS_SequenceOfSurfData& Data, |
499 | const Handle(ChFiDS_HElSpine)& Guide, |
500 | const Handle(ChFiDS_Spine)& Spine, |
501 | const Standard_Integer Choix, |
502 | const Handle(BRepAdaptor_HSurface)& S1, |
503 | const Handle(Adaptor3d_TopolTool)& I1, |
504 | const Handle(BRepAdaptor_HCurve2d)& PC1, |
505 | const Handle(BRepAdaptor_HSurface)& Sref1, |
506 | const Handle(BRepAdaptor_HCurve2d)& PCref1, |
507 | Standard_Boolean& Decroch1, |
508 | const Handle(BRepAdaptor_HSurface)& S2, |
509 | const Handle(Adaptor3d_TopolTool)& I2, |
510 | const TopAbs_Orientation Or2, |
511 | const Standard_Real MaxStep, |
512 | const Standard_Real Fleche, |
513 | const Standard_Real TolGuide, |
514 | Standard_Real& First, |
515 | Standard_Real& Last, |
516 | const Standard_Boolean Inside, |
517 | const Standard_Boolean Appro, |
518 | const Standard_Boolean Forward, |
519 | const Standard_Boolean RecP, |
520 | const Standard_Boolean RecS, |
521 | const Standard_Boolean RecRst, |
522 | const math_Vector& Soldep); |
42cf5bc1 |
523 | |
524 | //! Method, implemented in inheritants, calculates |
525 | //! the elements of construction of the surface (fillet |
526 | //! or chamfer) contact edge/face. |
1d54b807 |
527 | Standard_EXPORT virtual void PerformSurf (ChFiDS_SequenceOfSurfData& Data, |
528 | const Handle(ChFiDS_HElSpine)& Guide, |
529 | const Handle(ChFiDS_Spine)& Spine, |
530 | const Standard_Integer Choix, |
531 | const Handle(BRepAdaptor_HSurface)& S1, |
532 | const Handle(Adaptor3d_TopolTool)& I1, |
533 | const TopAbs_Orientation Or1, |
534 | const Handle(BRepAdaptor_HSurface)& S2, |
535 | const Handle(Adaptor3d_TopolTool)& I2, |
536 | const Handle(BRepAdaptor_HCurve2d)& PC2, |
537 | const Handle(BRepAdaptor_HSurface)& Sref2, |
538 | const Handle(BRepAdaptor_HCurve2d)& PCref2, |
539 | Standard_Boolean& Decroch2, |
540 | const Standard_Real MaxStep, |
541 | const Standard_Real Fleche, |
542 | const Standard_Real TolGuide, |
543 | Standard_Real& First, |
544 | Standard_Real& Last, |
545 | const Standard_Boolean Inside, |
546 | const Standard_Boolean Appro, |
547 | const Standard_Boolean Forward, |
548 | const Standard_Boolean RecP, |
549 | const Standard_Boolean RecS, |
550 | const Standard_Boolean RecRst, |
551 | const math_Vector& Soldep); |
42cf5bc1 |
552 | |
553 | //! Method, implemented in inheritants, calculates |
554 | //! the elements of construction of the surface (fillet |
555 | //! or chamfer) contact edge/edge. |
1d54b807 |
556 | Standard_EXPORT virtual void PerformSurf (ChFiDS_SequenceOfSurfData& Data, |
557 | const Handle(ChFiDS_HElSpine)& Guide, |
558 | const Handle(ChFiDS_Spine)& Spine, |
559 | const Standard_Integer Choix, |
560 | const Handle(BRepAdaptor_HSurface)& S1, |
561 | const Handle(Adaptor3d_TopolTool)& I1, |
562 | const Handle(BRepAdaptor_HCurve2d)& PC1, |
563 | const Handle(BRepAdaptor_HSurface)& Sref1, |
564 | const Handle(BRepAdaptor_HCurve2d)& PCref1, |
565 | Standard_Boolean& Decroch1, |
566 | const TopAbs_Orientation Or1, |
567 | const Handle(BRepAdaptor_HSurface)& S2, |
568 | const Handle(Adaptor3d_TopolTool)& I2, |
569 | const Handle(BRepAdaptor_HCurve2d)& PC2, |
570 | const Handle(BRepAdaptor_HSurface)& Sref2, |
571 | const Handle(BRepAdaptor_HCurve2d)& PCref2, |
572 | Standard_Boolean& Decroch2, |
573 | const TopAbs_Orientation Or2, |
574 | const Standard_Real MaxStep, |
575 | const Standard_Real Fleche, |
576 | const Standard_Real TolGuide, |
577 | Standard_Real& First, |
578 | Standard_Real& Last, |
579 | const Standard_Boolean Inside, |
580 | const Standard_Boolean Appro, |
581 | const Standard_Boolean Forward, |
582 | const Standard_Boolean RecP1, |
583 | const Standard_Boolean RecRst1, |
584 | const Standard_Boolean RecP2, |
585 | const Standard_Boolean RecRst2, |
586 | const math_Vector& Soldep); |
42cf5bc1 |
587 | |
588 | Standard_EXPORT virtual void PerformTwoCorner (const Standard_Integer Index) = 0; |
589 | |
590 | Standard_EXPORT virtual void PerformThreeCorner (const Standard_Integer Index) = 0; |
591 | |
1d54b807 |
592 | Standard_EXPORT void PerformMoreThreeCorner (const Standard_Integer Index, |
593 | const Standard_Integer nbcourb); |
42cf5bc1 |
594 | |
1d54b807 |
595 | Standard_EXPORT virtual void ExtentOneCorner (const TopoDS_Vertex& V, |
596 | const Handle(ChFiDS_Stripe)& S) = 0; |
42cf5bc1 |
597 | |
1d54b807 |
598 | Standard_EXPORT virtual void ExtentTwoCorner (const TopoDS_Vertex& V, |
599 | const ChFiDS_ListOfStripe& LS) = 0; |
42cf5bc1 |
600 | |
1d54b807 |
601 | Standard_EXPORT virtual void ExtentThreeCorner (const TopoDS_Vertex& V, |
602 | const ChFiDS_ListOfStripe& LS) = 0; |
42cf5bc1 |
603 | |
1d54b807 |
604 | Standard_EXPORT virtual Standard_Boolean PerformFirstSection (const Handle(ChFiDS_Spine)& S, |
605 | const Handle(ChFiDS_HElSpine)& HGuide, |
606 | const Standard_Integer Choix, |
607 | Handle(BRepAdaptor_HSurface)& S1, |
608 | Handle(BRepAdaptor_HSurface)& S2, |
609 | const Handle(Adaptor3d_TopolTool)& I1, |
610 | const Handle(Adaptor3d_TopolTool)& I2, |
611 | const Standard_Real Par, |
612 | math_Vector& SolDep, |
613 | TopAbs_State& Pos1, |
614 | TopAbs_State& Pos2) const = 0; |
42cf5bc1 |
615 | |
1d54b807 |
616 | Standard_EXPORT Standard_Boolean SearchFace (const Handle(ChFiDS_Spine)& Sp, |
617 | const ChFiDS_CommonPoint& Pc, |
618 | const TopoDS_Face& FRef, |
619 | TopoDS_Face& FVoi) const; |
42cf5bc1 |
620 | |
1d54b807 |
621 | Standard_EXPORT Standard_Boolean StripeOrientations (const Handle(ChFiDS_Spine)& Sp, |
622 | TopAbs_Orientation& Or1, |
623 | TopAbs_Orientation& Or2, |
624 | Standard_Integer& ChoixConge) const; |
42cf5bc1 |
625 | |
626 | //! Calculates a Line of contact face/face. |
1d54b807 |
627 | Standard_EXPORT Standard_Boolean ComputeData (Handle(ChFiDS_SurfData)& Data, |
628 | const Handle(ChFiDS_HElSpine)& Guide, |
629 | const Handle(ChFiDS_Spine)& Spine, |
630 | Handle(BRepBlend_Line)& Lin, |
631 | const Handle(Adaptor3d_HSurface)& S1, |
632 | const Handle(Adaptor3d_TopolTool)& I1, |
633 | const Handle(Adaptor3d_HSurface)& S2, |
634 | const Handle(Adaptor3d_TopolTool)& I2, |
635 | Blend_Function& Func, |
636 | Blend_FuncInv& FInv, |
637 | const Standard_Real PFirst, |
638 | const Standard_Real MaxStep, |
639 | const Standard_Real Fleche, |
640 | const Standard_Real TolGuide, |
641 | Standard_Real& First, |
642 | Standard_Real& Last, |
643 | const Standard_Boolean Inside, |
644 | const Standard_Boolean Appro, |
645 | const Standard_Boolean Forward, |
646 | const math_Vector& Soldep, |
647 | Standard_Integer& Intf, |
648 | Standard_Integer& Intl, |
649 | Standard_Boolean& Gd1, |
650 | Standard_Boolean& Gd2, |
651 | Standard_Boolean& Gf1, |
652 | Standard_Boolean& Gf2, |
653 | const Standard_Boolean RecOnS1 = Standard_False, |
654 | const Standard_Boolean RecOnS2 = Standard_False); |
42cf5bc1 |
655 | |
656 | //! Calculates a Line of contact edge/face. |
1d54b807 |
657 | Standard_EXPORT Standard_Boolean ComputeData (Handle(ChFiDS_SurfData)& Data, |
658 | const Handle(ChFiDS_HElSpine)& HGuide, |
659 | Handle(BRepBlend_Line)& Lin, |
660 | const Handle(Adaptor3d_HSurface)& S1, |
661 | const Handle(Adaptor3d_TopolTool)& I1, |
662 | const Handle(Adaptor3d_HSurface)& S2, |
663 | const Handle(Adaptor2d_HCurve2d)& PC2, |
664 | const Handle(Adaptor3d_TopolTool)& I2, |
665 | Standard_Boolean& Decroch, |
666 | Blend_SurfRstFunction& Func, |
667 | Blend_FuncInv& FInv, |
668 | Blend_SurfPointFuncInv& FInvP, |
669 | Blend_SurfCurvFuncInv& FInvC, |
670 | const Standard_Real PFirst, |
671 | const Standard_Real MaxStep, |
672 | const Standard_Real Fleche, |
673 | const Standard_Real TolGuide, |
674 | Standard_Real& First, |
675 | Standard_Real& Last, |
676 | const math_Vector& Soldep, |
677 | const Standard_Boolean Inside, |
678 | const Standard_Boolean Appro, |
679 | const Standard_Boolean Forward, |
680 | const Standard_Boolean RecP, |
681 | const Standard_Boolean RecS, |
682 | const Standard_Boolean RecRst); |
42cf5bc1 |
683 | |
684 | //! Calculates a Line of contact edge/edge. |
1d54b807 |
685 | Standard_EXPORT Standard_Boolean ComputeData (Handle(ChFiDS_SurfData)& Data, |
686 | const Handle(ChFiDS_HElSpine)& HGuide, |
687 | Handle(BRepBlend_Line)& Lin, |
688 | const Handle(Adaptor3d_HSurface)& S1, |
689 | const Handle(Adaptor2d_HCurve2d)& PC1, |
690 | const Handle(Adaptor3d_TopolTool)& I1, |
691 | Standard_Boolean& Decroch1, |
692 | const Handle(Adaptor3d_HSurface)& S2, |
693 | const Handle(Adaptor2d_HCurve2d)& PC2, |
694 | const Handle(Adaptor3d_TopolTool)& I2, |
695 | Standard_Boolean& Decroch2, |
696 | Blend_RstRstFunction& Func, |
697 | Blend_SurfCurvFuncInv& FInv1, |
698 | Blend_CurvPointFuncInv& FInvP1, |
699 | Blend_SurfCurvFuncInv& FInv2, |
700 | Blend_CurvPointFuncInv& FInvP2, |
701 | const Standard_Real PFirst, |
702 | const Standard_Real MaxStep, |
703 | const Standard_Real Fleche, |
704 | const Standard_Real TolGuide, |
705 | Standard_Real& First, |
706 | Standard_Real& Last, |
707 | const math_Vector& Soldep, |
708 | const Standard_Boolean Inside, |
709 | const Standard_Boolean Appro, |
710 | const Standard_Boolean Forward, |
711 | const Standard_Boolean RecP1, |
712 | const Standard_Boolean RecRst1, |
713 | const Standard_Boolean RecP2, |
714 | const Standard_Boolean RecRst2); |
715 | |
716 | Standard_EXPORT Standard_Boolean CompleteData (Handle(ChFiDS_SurfData)& Data, |
717 | Blend_Function& Func, |
718 | Handle(BRepBlend_Line)& Lin, |
719 | const Handle(Adaptor3d_HSurface)& S1, |
720 | const Handle(Adaptor3d_HSurface)& S2, |
721 | const TopAbs_Orientation Or1, |
722 | const Standard_Boolean Gd1, |
723 | const Standard_Boolean Gd2, |
724 | const Standard_Boolean Gf1, |
725 | const Standard_Boolean Gf2, |
726 | const Standard_Boolean Reversed = Standard_False); |
727 | |
728 | Standard_EXPORT Standard_Boolean CompleteData (Handle(ChFiDS_SurfData)& Data, |
729 | Blend_SurfRstFunction& Func, |
730 | Handle(BRepBlend_Line)& Lin, |
731 | const Handle(Adaptor3d_HSurface)& S1, |
732 | const Handle(Adaptor3d_HSurface)& S2, |
733 | const TopAbs_Orientation Or, |
734 | const Standard_Boolean Reversed); |
735 | |
736 | Standard_EXPORT Standard_Boolean CompleteData (Handle(ChFiDS_SurfData)& Data, |
737 | Blend_RstRstFunction& Func, |
738 | Handle(BRepBlend_Line)& Lin, |
739 | const Handle(Adaptor3d_HSurface)& S1, |
740 | const Handle(Adaptor3d_HSurface)& S2, |
741 | const TopAbs_Orientation Or); |
742 | |
743 | Standard_EXPORT Standard_Boolean StoreData (Handle(ChFiDS_SurfData)& Data, |
744 | const AppBlend_Approx& Approx, |
745 | const Handle(BRepBlend_Line)& Lin, |
746 | const Handle(Adaptor3d_HSurface)& S1, |
747 | const Handle(Adaptor3d_HSurface)& S2, |
748 | const TopAbs_Orientation Or1, |
749 | const Standard_Boolean Gd1, |
750 | const Standard_Boolean Gd2, |
751 | const Standard_Boolean Gf1, |
752 | const Standard_Boolean Gf2, |
753 | const Standard_Boolean Reversed = Standard_False); |
754 | |
755 | Standard_EXPORT Standard_Boolean CompleteData (Handle(ChFiDS_SurfData)& Data, |
756 | const Handle(Geom_Surface)& Surfcoin, |
757 | const Handle(Adaptor3d_HSurface)& S1, |
758 | const Handle(Geom2d_Curve)& PC1, |
759 | const Handle(Adaptor3d_HSurface)& S2, |
760 | const Handle(Geom2d_Curve)& PC2, |
761 | const TopAbs_Orientation Or, |
762 | const Standard_Boolean On1, |
763 | const Standard_Boolean Gd1, |
764 | const Standard_Boolean Gd2, |
765 | const Standard_Boolean Gf1, |
766 | const Standard_Boolean Gf2); |
42cf5bc1 |
767 | |
768 | |
769 | Standard_Real tolappangle; |
770 | Standard_Real tolesp; |
771 | Standard_Real tol2d; |
772 | Standard_Real tolapp3d; |
773 | Standard_Real tolapp2d; |
774 | Standard_Real fleche; |
775 | GeomAbs_Shape myConti; |
776 | ChFiDS_Map myEFMap; |
777 | ChFiDS_Map myESoMap; |
778 | ChFiDS_Map myEShMap; |
779 | ChFiDS_Map myVFMap; |
780 | ChFiDS_Map myVEMap; |
781 | Handle(TopOpeBRepDS_HDataStructure) myDS; |
782 | Handle(TopOpeBRepBuild_HBuilder) myCoup; |
783 | ChFiDS_ListOfStripe myListStripe; |
784 | ChFiDS_StripeMap myVDataMap; |
785 | ChFiDS_Regularities myRegul; |
786 | ChFiDS_ListOfStripe badstripes; |
787 | TopTools_ListOfShape badvertices; |
788 | TopTools_DataMapOfShapeListOfInteger myEVIMap; |
1d54b807 |
789 | TopTools_DataMapOfShapeShape myEdgeFirstFace; |
42cf5bc1 |
790 | Standard_Boolean done; |
791 | Standard_Boolean hasresult; |
792 | |
793 | |
794 | private: |
795 | |
796 | |
1d54b807 |
797 | Standard_EXPORT Standard_Boolean FaceTangency (const TopoDS_Edge& E0, |
798 | const TopoDS_Edge& E1, |
799 | const TopoDS_Vertex& V) const; |
42cf5bc1 |
800 | |
1d54b807 |
801 | Standard_EXPORT void PerformSetOfSurfOnElSpine (const Handle(ChFiDS_HElSpine)& ES, |
802 | Handle(ChFiDS_Stripe)& St, |
803 | Handle(BRepTopAdaptor_TopolTool)& It1, |
804 | Handle(BRepTopAdaptor_TopolTool)& It2, |
805 | const Standard_Boolean Simul = Standard_False); |
42cf5bc1 |
806 | |
807 | Standard_EXPORT void PerformFilletOnVertex (const Standard_Integer Index); |
808 | |
809 | Standard_EXPORT void PerformSingularCorner (const Standard_Integer Index); |
810 | |
1d54b807 |
811 | Standard_EXPORT void PerformOneCorner (const Standard_Integer Index, |
812 | const Standard_Boolean PrepareOnSame = Standard_False); |
42cf5bc1 |
813 | |
814 | Standard_EXPORT void IntersectMoreCorner (const Standard_Integer Index); |
815 | |
816 | Standard_EXPORT void PerformMoreSurfdata (const Standard_Integer Index); |
817 | |
818 | Standard_EXPORT void PerformIntersectionAtEnd (const Standard_Integer Index); |
819 | |
820 | Standard_EXPORT void ExtentAnalyse(); |
821 | |
1d54b807 |
822 | Standard_EXPORT Standard_Boolean FindFace (const TopoDS_Vertex& V, |
823 | const ChFiDS_CommonPoint& P1, |
824 | const ChFiDS_CommonPoint& P2, |
825 | TopoDS_Face& Fv) const; |
42cf5bc1 |
826 | |
1d54b807 |
827 | Standard_EXPORT Standard_Boolean FindFace (const TopoDS_Vertex& V, |
828 | const ChFiDS_CommonPoint& P1, |
829 | const ChFiDS_CommonPoint& P2, |
830 | TopoDS_Face& Fv, |
831 | const TopoDS_Face& Favoid) const; |
42cf5bc1 |
832 | |
833 | Standard_EXPORT Standard_Boolean MoreSurfdata (const Standard_Integer Index) const; |
834 | |
1d54b807 |
835 | Standard_EXPORT Standard_Boolean StartSol (const Handle(ChFiDS_Spine)& Spine, |
836 | Handle(BRepAdaptor_HSurface)& HS, |
837 | gp_Pnt2d& P, |
838 | Handle(BRepAdaptor_HCurve2d)& HC, |
839 | Standard_Real& W, |
840 | const Handle(ChFiDS_SurfData)& SD, |
841 | const Standard_Boolean isFirst, |
842 | const Standard_Integer OnS, |
843 | Handle(BRepAdaptor_HSurface)& HSref, |
844 | Handle(BRepAdaptor_HCurve2d)& HCref, |
845 | Standard_Boolean& RecP, |
846 | Standard_Boolean& RecS, |
847 | Standard_Boolean& RecRst, |
848 | Standard_Boolean& C1Obst, |
849 | Handle(BRepAdaptor_HSurface)& HSbis, |
850 | gp_Pnt2d& Pbis, |
851 | const Standard_Boolean Decroch, |
852 | const TopoDS_Vertex& Vref) const; |
853 | |
854 | Standard_EXPORT void StartSol (const Handle(ChFiDS_Stripe)& S, |
855 | const Handle(ChFiDS_HElSpine)& HGuide, |
856 | Handle(BRepAdaptor_HSurface)& HS1, |
857 | Handle(BRepAdaptor_HSurface)& HS2, |
858 | Handle(BRepTopAdaptor_TopolTool)& I1, |
859 | Handle(BRepTopAdaptor_TopolTool)& I2, |
860 | gp_Pnt2d& P1, |
861 | gp_Pnt2d& P2, |
862 | Standard_Real& First) const; |
863 | |
864 | Standard_EXPORT void ConexFaces (const Handle(ChFiDS_Spine)& Sp, |
865 | const Standard_Integer IEdge, |
866 | Handle(BRepAdaptor_HSurface)& HS1, |
867 | Handle(BRepAdaptor_HSurface)& HS2) const; |
42cf5bc1 |
868 | |
869 | |
870 | TopoDS_Shape myShape; |
871 | Standard_Real angular; |
872 | TopTools_ListOfShape myGenerated; |
873 | TopoDS_Shape myShapeResult; |
874 | TopoDS_Shape badShape; |
875 | |
876 | |
877 | }; |
878 | |
879 | |
880 | |
881 | |
882 | |
883 | |
884 | |
885 | #endif // _ChFi3d_Builder_HeaderFile |