0028966: Coding Rules - remove Adaptor2d_HCurve2d, Adaptor3d_HCurve and Adaptor3d_HSu...
[occt.git] / src / ChFi3d / ChFi3d_Builder.hxx
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 <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>
37
38 class TopOpeBRepDS_HDataStructure;
39 class TopOpeBRepBuild_HBuilder;
40 class Standard_OutOfRange;
41 class Standard_NoSuchObject;
42 class Standard_ConstructionError;
43 class TopoDS_Edge;
44 class ChFiDS_Spine;
45 class TopoDS_Vertex;
46 class Geom_Surface;
47 class ChFiDS_SurfData;
48 class Adaptor3d_TopolTool;
49 class BRepBlend_Line;
50 class Blend_Function;
51 class Blend_FuncInv;
52 class Blend_SurfRstFunction;
53 class Blend_SurfPointFuncInv;
54 class Blend_SurfCurvFuncInv;
55 class Blend_RstRstFunction;
56 class Blend_CurvPointFuncInv;
57 class ChFiDS_Stripe;
58 class BRepTopAdaptor_TopolTool;
59 class gp_Pnt2d;
60 class ChFiDS_CommonPoint;
61 class TopoDS_Face;
62 class AppBlend_Approx;
63 class Geom2d_Curve;
64
65
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.
69 class ChFi3d_Builder 
70 {
71 public:
72
73   DEFINE_STANDARD_ALLOC
74
75   Standard_EXPORT virtual ~ChFi3d_Builder();
76   
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);
83   
84   Standard_EXPORT void SetContinuity (const GeomAbs_Shape InternalContinuity,
85                                       const Standard_Real AngularTolerance);
86   
87   //! extracts from  the list the contour containing edge E.
88   Standard_EXPORT void Remove (const TopoDS_Edge& E);
89   
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;
93   
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;
99   
100   //! gives the number of  disjoint contours on  which
101   //! the  fillets  are  calculated
102   Standard_EXPORT Standard_Integer NbElements() const;
103   
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;
107   
108   //! returns the length of  the contour of index IC.
109   Standard_EXPORT Standard_Real Length (const Standard_Integer IC) const;
110   
111   //! returns the First vertex V of
112   //! the contour of index IC.
113   Standard_EXPORT TopoDS_Vertex FirstVertex (const Standard_Integer IC) const;
114   
115   //! returns the Last vertex V of
116   //! the contour of index IC.
117   Standard_EXPORT TopoDS_Vertex LastVertex (const Standard_Integer IC) const;
118   
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;
123   
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;
128   
129   //! returns true if the contour of index IC is closed
130   //! an tangent.
131   Standard_EXPORT Standard_Boolean ClosedAndTangent (const Standard_Integer IC) const;
132   
133   //! returns true if the contour of index IC is closed
134   Standard_EXPORT Standard_Boolean Closed (const Standard_Integer IC) const;
135   
136   //! general calculation of geometry on all edges,
137   //! topologic reconstruction.
138   Standard_EXPORT void Compute();
139   
140   //! returns True if the computation  is  success
141   Standard_EXPORT Standard_Boolean IsDone() const;
142   
143   //! if (Isdone()) makes the result.
144   //! if (!Isdone())
145   Standard_EXPORT TopoDS_Shape Shape() const;
146   
147   //! Advanced  function for the history
148   Standard_EXPORT const TopTools_ListOfShape& Generated (const TopoDS_Shape& EouV);
149   
150   //! Returns the number of contours on  which the calculation
151   //! has failed.
152   Standard_EXPORT Standard_Integer NbFaultyContours() const;
153   
154   //! Returns the number of  I'th contour on  which the calculation
155   //! has failed.
156   Standard_EXPORT Standard_Integer FaultyContour (const Standard_Integer I) const;
157   
158   //! Returns the number of  surfaces calculated  on  the contour IC.
159   Standard_EXPORT Standard_Integer NbComputedSurfaces (const Standard_Integer IC) const;
160   
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;
164   
165   //! Returns the number of vertices on  which the calculation
166   //! has failed.
167   Standard_EXPORT Standard_Integer NbFaultyVertices() const;
168   
169   //! Returns the IV'th vertex on  which the calculation has failed.
170   Standard_EXPORT TopoDS_Vertex FaultyVertex (const Standard_Integer IV) const;
171   
172   //! returns True if  a partial result has  been  calculated
173   Standard_EXPORT Standard_Boolean HasResult() const;
174   
175   //! if (HasResult()) returns partial result
176   //! if (!HasResult())
177   Standard_EXPORT TopoDS_Shape BadShape() const;
178   
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;
182   
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();
187   
188   //! Returns the Builder of  topologic operations.
189   Standard_EXPORT Handle(TopOpeBRepBuild_HBuilder) Builder() const;
190   
191   //! Method, implemented in the inheritants, calculates
192   //! the elements of construction of the surface (fillet or
193   //! chamfer).
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);
204   
205   Standard_EXPORT Standard_Boolean PerformTwoCornerbyInter (const Standard_Integer Index);
206
207
208
209
210 protected:
211
212   
213   Standard_EXPORT ChFi3d_Builder(const TopoDS_Shape& S, const Standard_Real Ta);
214   
215   Standard_EXPORT virtual void SimulKPart (const Handle(ChFiDS_SurfData)& SD) const = 0;
216   
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,
227                                                       Standard_Real& Last,
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;
236   
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,
253                                           Standard_Real& Last,
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);
261   
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,
278                                           Standard_Real& Last,
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);
286   
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,
308                                           Standard_Real& Last,
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);
317   
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,
327                                               Blend_FuncInv& FInv,
328                                               const Standard_Real PFirst,
329                                               const Standard_Real MaxStep,
330                                               const Standard_Real Fleche,
331                                               const Standard_Real TolGuide,
332                                               Standard_Real& First,
333                                               Standard_Real& Last,
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);
341   
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,
352                                               Blend_FuncInv& FInv,
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,
360                                               Standard_Real& Last,
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);
369   
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,
391                                               Standard_Real& Last,
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);
401   
402   Standard_EXPORT virtual void SetRegul() = 0;
403   
404   Standard_EXPORT Standard_Boolean PerformElement (const Handle(ChFiDS_Spine)& CElement,
405                                                    const Standard_Real         Offset,
406                                                    const TopoDS_Face&          theFirstFace);
407   
408   Standard_EXPORT void PerformExtremity (const Handle(ChFiDS_Spine)& CElement);
409   
410   Standard_EXPORT void PerformSetOfSurf (Handle(ChFiDS_Stripe)& S,
411                                          const Standard_Boolean Simul = Standard_False);
412   
413   Standard_EXPORT void PerformSetOfKPart (Handle(ChFiDS_Stripe)& S,
414                                           const Standard_Boolean Simul = Standard_False);
415   
416   Standard_EXPORT void PerformSetOfKGen (Handle(ChFiDS_Stripe)& S,
417                                          const Standard_Boolean Simul = Standard_False);
418   
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);
426   
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,
435                                         const gp_Pnt2d& P1,
436                                         const gp_Pnt2d& P3,
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,
446                                         Standard_Real& Last,
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,
452                                         math_Vector& Soldep,
453                                         Standard_Integer& Intf,
454                                         Standard_Integer& Intl,
455                                         Handle(BRepAdaptor_Surface)& Surf1,
456                                         Handle(BRepAdaptor_Surface)& Surf2);
457   
458   //! Method, implemented in the inheritants, calculating
459   //! elements of construction of the surface (fillet or
460   //! chamfer).
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,
473                                                         Standard_Real& Last,
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;
482   
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,
503                                             Standard_Real& Last,
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);
511   
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,
532                                             Standard_Real& Last,
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);
540   
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,
566                                             Standard_Real& Last,
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);
575   
576   Standard_EXPORT virtual void PerformTwoCorner (const Standard_Integer Index) = 0;
577   
578   Standard_EXPORT virtual void PerformThreeCorner (const Standard_Integer Index) = 0;
579   
580   Standard_EXPORT void PerformMoreThreeCorner (const Standard_Integer Index,
581                                                const Standard_Integer nbcourb);
582   
583   Standard_EXPORT virtual void ExtentOneCorner (const TopoDS_Vertex& V,
584                                                 const Handle(ChFiDS_Stripe)& S) = 0;
585   
586   Standard_EXPORT virtual void ExtentTwoCorner (const TopoDS_Vertex& V,
587                                                 const ChFiDS_ListOfStripe& LS) = 0;
588   
589   Standard_EXPORT virtual void ExtentThreeCorner (const TopoDS_Vertex& V,
590                                                   const ChFiDS_ListOfStripe& LS) = 0;
591   
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,
600                                                                 math_Vector& SolDep,
601                                                                 TopAbs_State& Pos1,
602                                                                 TopAbs_State& Pos2) const = 0;
603   
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;
608   
609   Standard_EXPORT Standard_Boolean StripeOrientations (const Handle(ChFiDS_Spine)& Sp,
610                                                        TopAbs_Orientation& Or1,
611                                                        TopAbs_Orientation& Or2,
612                                                        Standard_Integer& ChoixConge) const;
613   
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,
624                                                 Blend_FuncInv& FInv,
625                                                 const Standard_Real PFirst,
626                                                 const Standard_Real MaxStep,
627                                                 const Standard_Real Fleche,
628                                                 const Standard_Real TolGuide,
629                                                 Standard_Real& First,
630                                                 Standard_Real& Last,
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);
643   
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,
655                                                 Blend_FuncInv& FInv,
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,
663                                                 Standard_Real& Last,
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);
671   
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,
694                                                 Standard_Real& Last,
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);
703   
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);
715   
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);
723   
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);
730   
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);
742   
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);
755
756
757   Standard_Real tolappangle;
758   Standard_Real tolesp;
759   Standard_Real tol2d;
760   Standard_Real tolapp3d;
761   Standard_Real tolapp2d;
762   Standard_Real fleche;
763   GeomAbs_Shape myConti;
764   ChFiDS_Map myEFMap;
765   ChFiDS_Map myESoMap;
766   ChFiDS_Map myEShMap;
767   ChFiDS_Map myVFMap;
768   ChFiDS_Map myVEMap;
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;
780
781
782 private:
783
784   
785   Standard_EXPORT Standard_Boolean FaceTangency (const TopoDS_Edge& E0,
786                                                  const TopoDS_Edge& E1,
787                                                  const TopoDS_Vertex& V) const;
788   
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);
794   
795   Standard_EXPORT void PerformFilletOnVertex (const Standard_Integer Index);
796   
797   Standard_EXPORT void PerformSingularCorner (const Standard_Integer Index);
798   
799   Standard_EXPORT void PerformOneCorner (const Standard_Integer Index,
800                                          const Standard_Boolean PrepareOnSame = Standard_False);
801   
802   Standard_EXPORT void IntersectMoreCorner (const Standard_Integer Index);
803   
804   Standard_EXPORT void PerformMoreSurfdata (const Standard_Integer Index);
805   
806   Standard_EXPORT void PerformIntersectionAtEnd (const Standard_Integer Index);
807   
808   Standard_EXPORT void ExtentAnalyse();
809   
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;
814   
815   Standard_EXPORT Standard_Boolean FindFace (const TopoDS_Vertex& V,
816                                              const ChFiDS_CommonPoint& P1,
817                                              const ChFiDS_CommonPoint& P2,
818                                              TopoDS_Face& Fv,
819                                              const TopoDS_Face& Favoid) const;
820   
821   Standard_EXPORT Standard_Boolean MoreSurfdata (const Standard_Integer Index) const;
822   
823   Standard_EXPORT Standard_Boolean StartSol (const Handle(ChFiDS_Spine)& Spine,
824                                              Handle(BRepAdaptor_Surface)& HS,
825                                              gp_Pnt2d& P,
826                                              Handle(BRepAdaptor_Curve2d)& HC,
827                                              Standard_Real& W,
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,
838                                              gp_Pnt2d& Pbis,
839                                              const Standard_Boolean Decroch,
840                                              const TopoDS_Vertex& Vref) const;
841   
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,
848                                  gp_Pnt2d& P1,
849                                  gp_Pnt2d& P2,
850                                  Standard_Real& First) const;
851   
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;
856
857
858   TopoDS_Shape myShape;
859   Standard_Real angular;
860   TopTools_ListOfShape myGenerated;
861   TopoDS_Shape myShapeResult;
862   TopoDS_Shape badShape;
863
864
865 };
866
867
868
869
870
871
872
873 #endif // _ChFi3d_Builder_HeaderFile