0026173: Wrong result of ChFi3d_ChBuilder algorithm: incorrect processing of G1 junct...
[occt.git] / src / ChFi3d / ChFi3d_Builder_0.hxx
1 // Created on: 1994-03-24
2 // Created by: Isabelle GRIGNON
3 // Copyright (c) 1994-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_0_HeaderFile
18 #define ChFi3d_Builder_0_HeaderFile
19
20 #include <TopOpeBRepDS_SurfaceCurveInterference.hxx>
21 #include <TopOpeBRepDS_CurvePointInterference.hxx>
22 #include <TopOpeBRepDS_DataStructure.hxx>
23 #include <TopOpeBRepDS_Curve.hxx>
24 #include <TopOpeBRepDS_Surface.hxx>
25 #include <BRepBlend_Extremity.hxx>
26 #include <ChFiDS_Stripe.hxx>
27 #include <ChFiDS_SurfData.hxx>
28 #include <ChFiDS_Spine.hxx>
29 #include <ChFiDS_HElSpine.hxx>
30 #include <ChFiDS_CommonPoint.hxx>
31 #include <ChFiDS_Regularities.hxx>
32 #include <ChFiDS_FaceInterference.hxx>
33 #include <ChFiDS_Map.hxx>
34 #include <TopoDS_Face.hxx>
35 #include <TopoDS_Vertex.hxx>
36 #include <TopoDS.hxx>
37 #include <TopAbs_Orientation.hxx>
38 #include <TopTools_ListOfShape.hxx>
39 #include <TopTools_ListIteratorOfListOfShape.hxx>
40 #include <IntSurf_LineOn2S.hxx>
41 #include <IntSurf_TypeTrans.hxx>
42 #include <GeomFill_Boundary.hxx>
43 #include <GeomFill_BoundWithSurf.hxx>
44 #include <GeomFill_SimpleBound.hxx>
45 #include <GeomFill_ConstrainedFilling.hxx>
46 #include <Geom2d_Curve.hxx>
47 #include <Geom_Curve.hxx>
48 #include <Geom_TrimmedCurve.hxx>
49 #include <Geom_Surface.hxx>
50 #include <Geom_BezierCurve.hxx>
51 #include <Geom_Circle.hxx>
52 #include <GeomAdaptor_Curve.hxx>
53 #include <GeomAdaptor_Surface.hxx>
54 #include <GeomAdaptor_HSurface.hxx>
55 #include <BRepAdaptor_Surface.hxx>
56 #include <BRepAdaptor_HSurface.hxx>
57 #include <Adaptor3d_HCurve.hxx>
58 #include <Adaptor3d_HCurveOnSurface.hxx>
59 #include <Adaptor3d_HSurface.hxx>
60 #include <Extrema_LocateExtCC.hxx>
61 #include <Extrema_POnCurv.hxx>
62 #include <Bnd_Box.hxx>
63 #include <GeomAbs_Shape.hxx>
64 #include <gp_Pnt.hxx>
65 #include <gp_Vec.hxx>
66 #include <gp_Pnt2d.hxx>
67 #include <gp_Vec2d.hxx>
68 #include <gp_Dir2d.hxx>
69 #include <TColgp_Array1OfPnt.hxx>
70 #include <TColgp_Array1OfVec.hxx>
71 #include <TColStd_Array1OfReal.hxx>
72 #include <TColStd_Array1OfInteger.hxx>
73 #include <TopTools_Array1OfShape.hxx>
74 #ifdef OCCT_DEBUG
75 #include <OSD_Chronometer.hxx>
76 extern OSD_Chronometer simul,elspine,chemine;
77 #endif
78
79 Standard_Real ChFi3d_InPeriod(const Standard_Real U, 
80                               const Standard_Real UFirst, 
81                               const Standard_Real ULast,
82                               const Standard_Real Eps);
83
84 void ChFi3d_Boite(const gp_Pnt2d& p1,const gp_Pnt2d& p2,
85                   Standard_Real& mu,Standard_Real& Mu,
86                   Standard_Real& mv,Standard_Real& Mv);
87
88 void ChFi3d_Boite(const gp_Pnt2d& p1,const gp_Pnt2d& p2,
89                   const gp_Pnt2d& p3,const gp_Pnt2d& p4,
90                   Standard_Real& Du,Standard_Real& Dv,
91                   Standard_Real& mu,Standard_Real& Mu,
92                   Standard_Real& mv,Standard_Real& Mv);
93
94 void ChFi3d_SetPointTolerance(TopOpeBRepDS_DataStructure& DStr,
95                               const Bnd_Box&              box,
96                               const Standard_Integer      IP);
97
98 void ChFi3d_EnlargeBox(const Handle(Geom_Curve)& C,
99                        const Standard_Real       wd,
100                        const Standard_Real       wf,
101                        Bnd_Box&                  box1,
102                        Bnd_Box&                  box2);
103
104 void ChFi3d_EnlargeBox(const Handle(Adaptor3d_HSurface)& S,
105                        const Handle(Geom2d_Curve)&     PC,
106                        const Standard_Real             wd,
107                        const Standard_Real             wf,
108                        Bnd_Box&                        box1,
109                        Bnd_Box&                        box2);
110
111 void ChFi3d_EnlargeBox(const TopoDS_Edge&           E,
112                        const TopTools_ListOfShape&  LF,
113                        const Standard_Real          w,
114                        Bnd_Box&                     box);
115
116 void ChFi3d_EnlargeBox(TopOpeBRepDS_DataStructure&    DStr,
117                        const Handle(ChFiDS_Stripe)&   st, 
118                        const Handle(ChFiDS_SurfData)& sd,
119                        Bnd_Box&                       b1,
120                        Bnd_Box&                       b2,
121                        const Standard_Boolean         isfirst);
122
123 GeomAbs_Shape ChFi3d_evalconti(const TopoDS_Edge& E,
124                                const TopoDS_Face& F1,
125                                const TopoDS_Face& F2);
126
127 void ChFi3d_conexfaces(const TopoDS_Edge& E,
128                        TopoDS_Face&       F1,
129                        TopoDS_Face&       F2,
130                        const ChFiDS_Map&  EFMap);
131
132 ChFiDS_State ChFi3d_EdgeState(TopoDS_Edge* E,
133                               const ChFiDS_Map&  EFMap);
134
135 Standard_Boolean ChFi3d_KParticular
136 (const Handle(ChFiDS_Spine)& Spine,
137  const Standard_Integer      IE,
138  const BRepAdaptor_Surface&  S1,
139  const BRepAdaptor_Surface&  S2);
140  
141 void ChFi3d_BoundFac(BRepAdaptor_Surface& S,
142                      const Standard_Real  umin,
143                      const Standard_Real  umax,
144                      const Standard_Real  vmin,
145                      const Standard_Real  vmax,
146                      const Standard_Boolean checknaturalbounds = Standard_True);
147                       
148 void ChFi3d_BoundSrf(GeomAdaptor_Surface& S,
149                      const Standard_Real  umin,
150                      const Standard_Real  umax,
151                      const Standard_Real  vmin,
152                      const Standard_Real  vmax,
153                      const Standard_Boolean checknaturalbounds = Standard_True);
154                       
155 Standard_Boolean  ChFi3d_InterPlaneEdge (const Handle(Adaptor3d_HSurface)& Plan,
156                                          const Handle(Adaptor3d_HCurve)&   C,
157                                          Standard_Real&            W,
158                                          const Standard_Boolean    Sens,
159                                          const Standard_Real tolc);
160                                          
161 void ChFi3d_ExtrSpineCarac(const TopOpeBRepDS_DataStructure& DStr,
162                            const Handle(ChFiDS_Stripe)&      cd,
163                            const Standard_Integer            i,
164                            const Standard_Real               p,
165                            const Standard_Integer            jf,
166                            const Standard_Integer            sens,
167                            gp_Pnt&                           P,
168                            gp_Vec&                           V,
169                            Standard_Real&                    R);
170                            
171 Handle(Geom_Circle) ChFi3d_CircularSpine(Standard_Real&      WFirst,
172                                          Standard_Real&      WLast,
173                                          const gp_Pnt&       Pdeb,
174                                          const gp_Vec&       Vdeb,
175                                          const gp_Pnt&       Pfin,
176                                          const gp_Vec&       Vfin,
177                                          const Standard_Real rad);
178
179 Handle(Geom_BezierCurve) ChFi3d_Spine(const gp_Pnt&       pd,
180                                       gp_Vec&             vd,
181                                       const gp_Pnt&       pf,
182                                       gp_Vec&             vf,
183                                       const Standard_Real R);
184
185 Handle(GeomFill_Boundary) ChFi3d_mkbound
186 (const Handle(Adaptor3d_HSurface)& Fac,
187  Handle(Geom2d_Curve)& curv, 
188  const Standard_Integer sens1,
189  const gp_Pnt2d& pfac1,
190  const gp_Vec2d& vfac1,
191  const Standard_Integer sens2,
192  const gp_Pnt2d& pfac2,
193  const gp_Vec2d& vfac2,
194  const Standard_Real t3d,
195  const Standard_Real ta);
196
197 Handle(GeomFill_Boundary) ChFi3d_mkbound
198 (const Handle(Adaptor3d_HSurface)& Surf,
199  Handle(Geom2d_Curve)& curv,
200  const Standard_Integer sens1,
201  const gp_Pnt2d& p1,
202  gp_Vec&   v1,
203  const Standard_Integer sens2,
204  const gp_Pnt2d& p2,
205  gp_Vec& v2,
206  const Standard_Real t3d,
207  const Standard_Real ta);
208
209 Handle(GeomFill_Boundary) ChFi3d_mkbound
210 (const Handle(Geom_Surface)& s,
211  const gp_Pnt2d& p1,
212  const gp_Pnt2d& p2,
213  const Standard_Real t3d,
214  const Standard_Real ta,
215  const Standard_Boolean isfreeboundary = Standard_False);
216
217 Handle(GeomFill_Boundary) ChFi3d_mkbound
218 (const Handle(Adaptor3d_HSurface)& HS,
219  const gp_Pnt2d& p1,
220  const gp_Pnt2d& p2,
221  const Standard_Real t3d,
222  const Standard_Real ta,
223  const Standard_Boolean isfreeboundary = Standard_False);
224
225 Handle(GeomFill_Boundary) ChFi3d_mkbound
226 (const Handle(Adaptor3d_HSurface)& HS,
227  const Handle(Geom2d_Curve)& curv,
228  const Standard_Real t3d,
229  const Standard_Real ta,
230  const Standard_Boolean isfreeboundary = Standard_False);
231
232 Handle(GeomFill_Boundary) ChFi3d_mkbound
233 (const Handle(Adaptor3d_HSurface)& Fac,
234  Handle(Geom2d_Curve)& curv, 
235  const gp_Pnt2d& p1,
236  const gp_Pnt2d& p2,
237  const Standard_Real t3d,
238  const Standard_Real ta,
239  const Standard_Boolean isfreeboundary = Standard_False);
240
241 void ChFi3d_Coefficient(const gp_Vec& V3d,
242                         const gp_Vec& D1u,
243                         const gp_Vec& D1v,
244                         Standard_Real& DU,
245                         Standard_Real& DV); 
246
247 Handle(Geom2d_Curve) ChFi3d_BuildPCurve
248 (const gp_Pnt2d&        p1,
249  gp_Dir2d&              d1,
250  const gp_Pnt2d&        p2,
251  gp_Dir2d&              d2,
252  const Standard_Boolean redresse = Standard_True);
253
254 Handle(Geom2d_Curve) ChFi3d_BuildPCurve
255 (const Handle(Adaptor3d_HSurface)& Surf,
256  const gp_Pnt2d&                 p1,
257  const gp_Vec&                   v1,
258  const gp_Pnt2d&                 p2,
259  const gp_Vec&                   v2,
260  const Standard_Boolean redresse = Standard_False);
261
262 Handle(Geom2d_Curve) ChFi3d_BuildPCurve
263 (const Handle(Adaptor3d_HSurface)& Surf,
264  const gp_Pnt2d&                 p1,
265  const gp_Vec2d&                 v1,
266  const gp_Pnt2d&                 p2,
267  const gp_Vec2d&                 v2,
268  const Standard_Boolean redresse = Standard_False);
269
270 Standard_Boolean ChFi3d_CheckSameParameter 
271 (const Handle(Adaptor3d_HCurve)&   C3d,
272  Handle(Geom2d_Curve)&           Pcurv,
273  const Handle(Adaptor3d_HSurface)& S,
274  const Standard_Real             tol3d,
275  Standard_Real&                  tolreached);
276
277 Standard_Boolean ChFi3d_SameParameter(const Handle(Adaptor3d_HCurve)&   C3d,
278                                       Handle(Geom2d_Curve)&           Pcurv,
279                                       const Handle(Adaptor3d_HSurface)& S,
280                                       const Standard_Real             tol3d,
281                                       Standard_Real&                  tolreached);
282
283 Standard_Boolean ChFi3d_SameParameter(const Handle(Geom_Curve)&   C3d,
284                                       Handle(Geom2d_Curve)&       Pcurv,
285                                       const Handle(Geom_Surface)& S,
286                                       const Standard_Real         Pardeb,
287                                       const Standard_Real         Parfin,
288                                       const Standard_Real         tol3d,
289                                       Standard_Real&              tolreached);
290
291 void ChFi3d_ComputePCurv(const Handle(Geom_Curve)&   C3d,
292                          const gp_Pnt2d&             UV1,
293                          const gp_Pnt2d&             UV2,
294                          Handle(Geom2d_Curve)&       Pcurv,
295                          const Handle(Geom_Surface)& S,
296                          const Standard_Real         Pardeb,
297                          const Standard_Real         Parfin,
298                          const Standard_Real         tol3d,
299                          Standard_Real&              tolreached,
300                          const Standard_Boolean      reverse = Standard_False);
301
302 void ChFi3d_ComputePCurv(const Handle(Adaptor3d_HCurve)&   C3d,
303                          const gp_Pnt2d&                 UV1,
304                          const gp_Pnt2d&                 UV2,
305                          Handle(Geom2d_Curve)&           Pcurv,
306                          const Handle(Adaptor3d_HSurface)& S,
307                          const Standard_Real             Pardeb,
308                          const Standard_Real             Parfin,
309                          const Standard_Real             tol3d,
310                          Standard_Real&                  tolreached,
311                          const Standard_Boolean          reverse = Standard_False);
312
313 void ChFi3d_ComputePCurv(const gp_Pnt2d& UV1,
314                          const gp_Pnt2d& UV2,
315                          Handle(Geom2d_Curve)& Pcurv,
316                          const Standard_Real Pardeb,
317                          const Standard_Real Parfin,
318                          const Standard_Boolean reverse = Standard_False);
319
320 Standard_Boolean ChFi3d_IntTraces(const Handle(ChFiDS_SurfData)& fd1,
321                                   const Standard_Real            pref1,
322                                   Standard_Real&                 p1,
323                                   const Standard_Integer         jf1,
324                                   const Standard_Integer         sens1,
325                                   const Handle(ChFiDS_SurfData)& fd2,
326                                   const Standard_Real            pref2,
327                                   Standard_Real&                 p2,
328                                   const Standard_Integer         jf2,
329                                   const Standard_Integer         sens2,
330                                   const gp_Pnt2d&                RefP2d,
331                                   const Standard_Boolean         Check2dDistance = Standard_False,
332                                   const Standard_Boolean         enlarge = Standard_False);
333
334 Standard_Boolean ChFi3d_IsInFront(TopOpeBRepDS_DataStructure& DStr,
335                                   const Handle(ChFiDS_Stripe)& cd1, 
336                                   const Handle(ChFiDS_Stripe)& cd2,
337                                   const Standard_Integer i1,
338                                   const Standard_Integer i2,
339                                   const Standard_Integer sens1,
340                                   const Standard_Integer sens2,
341                                   Standard_Real& p1,
342                                   Standard_Real& p2,
343                                   TopoDS_Face& face,
344                                   Standard_Boolean& sameside,
345                                   Standard_Integer& jf1,
346                                   Standard_Integer& jf2,
347                                   Standard_Boolean& visavis,
348                                   const TopoDS_Vertex& Vtx,
349                                   const Standard_Boolean Check2dDistance = Standard_False,
350                                   const Standard_Boolean enlarge = Standard_False);
351
352 void ChFi3d_ProjectPCurv(const Handle(Adaptor3d_HCurve)&   HCg, 
353                          const Handle(Adaptor3d_HSurface)& HSg, 
354                          Handle(Geom2d_Curve)&           Pcurv,
355                          const Standard_Real             tol3d,
356                          Standard_Real&                  tolreached) ;
357
358 void ChFi3d_ReparamPcurv(const Standard_Real   Uf, 
359                          const Standard_Real   Ul,
360                          Handle(Geom2d_Curve)& Pcurv) ;
361
362 void  ChFi3d_ComputeArete(const ChFiDS_CommonPoint&   P1,
363                           const gp_Pnt2d&             UV1,
364                           const ChFiDS_CommonPoint&   P2,
365                           const gp_Pnt2d&             UV2,
366                           const Handle(Geom_Surface)& Surf,
367                           Handle(Geom_Curve)&         C3d,
368                           Handle(Geom2d_Curve)&       Pcurv,
369                           Standard_Real&              Pardeb,
370                           Standard_Real&              Parfin,
371                           const Standard_Real         tol3d,
372                           const Standard_Real         tol2d,
373                           Standard_Real&              tolreached,
374                           const Standard_Integer      IFlag);
375                           
376 Handle(TopOpeBRepDS_SurfaceCurveInterference)  
377      ChFi3d_FilCurveInDS(const Standard_Integer Icurv,
378                          const Standard_Integer Isurf,
379                          const Handle(Geom2d_Curve)& Pcurv,
380                          const TopAbs_Orientation Et);
381
382 TopAbs_Orientation ChFi3d_TrsfTrans(const IntSurf_TypeTrans T1);
383
384 Standard_EXPORT void ChFi3d_FilCommonPoint(const BRepBlend_Extremity& SP,
385                                            const IntSurf_TypeTrans TransLine,
386                                            const Standard_Boolean Start,
387                                            ChFiDS_CommonPoint& CP,
388                                            const Standard_Real Tol);
389
390                          
391 Standard_Integer ChFi3d_SolidIndex(const Handle(ChFiDS_Spine)&  sp,
392                                    TopOpeBRepDS_DataStructure&  DStr,
393                                    ChFiDS_Map&                  MapESo,
394                                    ChFiDS_Map&                  MapESh);
395
396 Standard_Integer  ChFi3d_IndexPointInDS(const ChFiDS_CommonPoint& P1,
397                                         TopOpeBRepDS_DataStructure& DStr);
398
399 Handle(TopOpeBRepDS_CurvePointInterference) ChFi3d_FilPointInDS
400 (const TopAbs_Orientation Et,
401  const Standard_Integer Ic,
402  const Standard_Integer Ip,
403  const Standard_Real Par,
404  const Standard_Boolean IsVertex = Standard_False);
405
406 Handle(TopOpeBRepDS_CurvePointInterference) ChFi3d_FilVertexInDS
407 (const TopAbs_Orientation Et,
408  const Standard_Integer Ic,
409  const Standard_Integer Ip,
410  const Standard_Real Par);
411
412 void  ChFi3d_FilDS(const Standard_Integer       SolidIndex,
413                    const Handle(ChFiDS_Stripe)& CorDat,
414                    TopOpeBRepDS_DataStructure&  DStr,
415                    ChFiDS_Regularities&         reglist,
416                    const Standard_Real          tol3d,
417                    const Standard_Real          tol2d);
418                    
419
420 void ChFi3d_StripeEdgeInter (const Handle(ChFiDS_Stripe)& theStripe1,
421                              const Handle(ChFiDS_Stripe)& theStripe2,
422                              TopOpeBRepDS_DataStructure&  DStr,
423                              const Standard_Real          tol2d);
424
425 Standard_Integer ChFi3d_IndexOfSurfData(const TopoDS_Vertex& V1,
426                                         const Handle(ChFiDS_Stripe)& CD,
427                                         Standard_Integer& sens);
428
429 TopoDS_Edge ChFi3d_EdgeFromV1(const TopoDS_Vertex& V1,
430                               const Handle(ChFiDS_Stripe)& CD,
431                               Standard_Integer& sens);
432
433 Standard_Real ChFi3d_ConvTol2dToTol3d(const Handle(Adaptor3d_HSurface)& S,
434                                       const Standard_Real             tol2d);
435
436 Standard_Boolean  ChFi3d_ComputeCurves(const Handle(Adaptor3d_HSurface)&   S1,
437                                        const Handle(Adaptor3d_HSurface)&   S2,
438                                        const TColStd_Array1OfReal& Pardeb,
439                                        const TColStd_Array1OfReal& Parfin,
440                                        Handle(Geom_Curve)&         C3d,
441                                        Handle(Geom2d_Curve)&       Pc1,
442                                        Handle(Geom2d_Curve)&       Pc2,
443                                        const Standard_Real         tol3d,
444                                        const Standard_Real         tol2d,
445                                        Standard_Real&              tolreached,
446                                        const Standard_Boolean      wholeCurv
447                                         = Standard_True);
448
449 Standard_Boolean ChFi3d_IntCS(const Handle(Adaptor3d_HSurface)& S,
450                               const Handle(Adaptor3d_HCurve)& C,
451                               gp_Pnt2d& p2dS,
452                               Standard_Real& wc);
453
454 void ChFi3d_ComputesIntPC (const ChFiDS_FaceInterference&      Fi1,
455                            const ChFiDS_FaceInterference&      Fi2,
456                            const Handle(GeomAdaptor_HSurface)& HS1,
457                            const Handle(GeomAdaptor_HSurface)& HS2,
458                            Standard_Real&                      UInt1, 
459                            Standard_Real&                      UInt2);
460
461 void ChFi3d_ComputesIntPC (const ChFiDS_FaceInterference&      Fi1,
462                            const ChFiDS_FaceInterference&      Fi2,
463                            const Handle(GeomAdaptor_HSurface)& HS1,
464                            const Handle(GeomAdaptor_HSurface)& HS2,
465                            Standard_Real&                      UInt1, 
466                            Standard_Real&                      UInt2,
467                            gp_Pnt&                             P);
468
469 Handle(GeomAdaptor_HSurface) ChFi3d_BoundSurf(TopOpeBRepDS_DataStructure& DStr,
470                                               const Handle(ChFiDS_SurfData)& Fd1,
471                                               const Standard_Integer&        IFaCo1,
472                                               const Standard_Integer&        IFaArc1);
473
474 Standard_Integer ChFi3d_SearchPivot(Standard_Integer* s,
475                                     Standard_Real u[3][3],
476                                     const Standard_Real t);
477
478 Standard_Boolean ChFi3d_SearchFD(TopOpeBRepDS_DataStructure& DStr,
479                                  const Handle(ChFiDS_Stripe)& cd1, 
480                                  const Handle(ChFiDS_Stripe)& cd2,
481                                  const Standard_Integer sens1,
482                                  const Standard_Integer sens2,
483                                  Standard_Integer& i1,
484                                  Standard_Integer& i2,
485                                  Standard_Real& p1,
486                                  Standard_Real& p2,
487                                  const Standard_Integer ind1,
488                                  const Standard_Integer ind2,
489                                  TopoDS_Face& face,
490                                  Standard_Boolean& sameside,
491                                  Standard_Integer& jf1,
492                                  Standard_Integer& jf2);
493
494
495 void ChFi3d_Parameters(const Handle(Geom_Surface)& S,
496                        const gp_Pnt& p3d,
497                        Standard_Real& u,
498                        Standard_Real& v);
499
500 void ChFi3d_TrimCurve(const Handle(Geom_Curve)& gc,
501                       const gp_Pnt& FirstP,
502                       const gp_Pnt& LastP,
503                       Handle(Geom_TrimmedCurve)& gtc);
504
505 Standard_EXPORT void ChFi3d_PerformElSpine(Handle(ChFiDS_HElSpine)& HES,
506                                            Handle(ChFiDS_Spine)&    Spine,
507                                            const GeomAbs_Shape      continuity,
508                                            const Standard_Real      tol);
509
510 TopoDS_Face ChFi3d_EnlargeFace(const Handle(ChFiDS_Spine)& Spine,
511                                const Handle(BRepAdaptor_HSurface)&  HS,
512                                const Standard_Real         Tol );
513
514
515 void ChFi3d_cherche_face1 (const TopTools_ListOfShape & map,
516                     const TopoDS_Face & F1,
517                           TopoDS_Face &  F);  
518
519 void ChFi3d_cherche_element( const TopoDS_Vertex & V,
520                       const TopoDS_Edge & E1,
521                       const TopoDS_Face & F1,
522                       TopoDS_Edge & E , 
523                       TopoDS_Vertex  & Vtx );
524
525 Standard_Real ChFi3d_EvalTolReached(const Handle(Adaptor3d_HSurface)& S1,
526                                     const Handle(Geom2d_Curve)&     pc1,
527                                     const Handle(Adaptor3d_HSurface)& S2,
528                                     const Handle(Geom2d_Curve)&     pc2,
529                                     const Handle(Geom_Curve)&       C);
530
531 void ChFi3d_cherche_edge( const TopoDS_Vertex & V,
532                       const  TopTools_Array1OfShape  & E1,
533                       const TopoDS_Face & F1,
534                       TopoDS_Edge & E , 
535                       TopoDS_Vertex  & Vtx );
536
537 Standard_Integer  ChFi3d_nbface (const TopTools_ListOfShape & mapVF );
538
539 void ChFi3d_edge_common_faces (const TopTools_ListOfShape & mapEF,
540                                TopoDS_Face & F1,
541                                TopoDS_Face &  F2); 
542
543
544 Standard_Real ChFi3d_AngleEdge (const TopoDS_Vertex & Vtx,
545                                   const TopoDS_Edge&  E1,
546                                   const TopoDS_Edge &  E2);
547
548 void ChFi3d_ChercheBordsLibres(const  ChFiDS_Map & myVEMap,
549                                 const TopoDS_Vertex & V1,
550                                 Standard_Boolean & bordlibre,
551                                 TopoDS_Edge & edgelibre1,
552                                 TopoDS_Edge & edgelibre2);
553
554 Standard_Boolean ChFi3d_isTangentFaces(const TopoDS_Edge &theEdge,
555                                        const TopoDS_Face &theFace1,
556                                        const TopoDS_Face &theFace2,
557                                        const GeomAbs_Shape Order = GeomAbs_G1);
558
559 Standard_Integer ChFi3d_NbNotDegeneratedEdges (const TopoDS_Vertex& Vtx,
560                                       const ChFiDS_Map& VEMap);
561 Standard_Integer ChFi3d_NumberOfEdges(const TopoDS_Vertex& Vtx,
562                                       const ChFiDS_Map& VEMap);
563
564 Standard_Integer ChFi3d_NumberOfSharpEdges(const TopoDS_Vertex& Vtx,
565                                            const ChFiDS_Map& VEMap,
566                                            const ChFiDS_Map& EFmap);
567
568 void ChFi3d_cherche_vertex (const TopoDS_Edge & E1,
569                             const TopoDS_Edge & E2,
570                             TopoDS_Vertex & vertex,
571                             Standard_Boolean & trouve);
572
573 void ChFi3d_Couture( const TopoDS_Face & F,
574                      Standard_Boolean & couture,
575                      TopoDS_Edge & edgecouture);
576
577 void ChFi3d_CoutureOnVertex( const TopoDS_Face & F,
578                              const TopoDS_Vertex & V,
579                              Standard_Boolean & couture,
580                              TopoDS_Edge & edgecouture);
581
582 Standard_Boolean ChFi3d_IsPseudoSeam( const TopoDS_Edge& E,
583                                       const TopoDS_Face& F );
584
585 Handle(Geom_BSplineCurve) ChFi3d_ApproxByC2( const Handle(Geom_Curve)& C );
586
587 Standard_Boolean ChFi3d_IsSmooth( const Handle(Geom_Curve)& C );
588
589 #endif