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