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_ElSpine.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_Surface.hxx>
55 #include <BRepAdaptor_Surface.hxx>
56 #include <BRepAdaptor_Surface.hxx>
57 #include <Adaptor3d_Curve.hxx>
58 #include <Adaptor3d_CurveOnSurface.hxx>
59 #include <Adaptor3d_Surface.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_Surface)& 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_Surface)& Plan,
156 					 const Handle(Adaptor3d_Curve)&   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_Surface)& 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_Surface)& 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_Surface)& 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_Surface)& 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_Surface)& 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_Surface)& 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_Surface)& 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_Curve)&   C3d,
272  Handle(Geom2d_Curve)&           Pcurv,
273  const Handle(Adaptor3d_Surface)& S,
274  const Standard_Real             tol3d,
275  Standard_Real&                  tolreached);
276 
277 Standard_Boolean ChFi3d_SameParameter(const Handle(Adaptor3d_Curve)&   C3d,
278 				      Handle(Geom2d_Curve)&           Pcurv,
279 				      const Handle(Adaptor3d_Surface)& 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_Curve)&   C3d,
303 			 const gp_Pnt2d&                 UV1,
304 			 const gp_Pnt2d&                 UV2,
305 			 Handle(Geom2d_Curve)&           Pcurv,
306 			 const Handle(Adaptor3d_Surface)& 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_Curve)&   HCg,
353 			 const Handle(Adaptor3d_Surface)& 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_Surface)& S,
434 				      const Standard_Real             tol2d);
435 
436 Standard_Boolean  ChFi3d_ComputeCurves(const Handle(Adaptor3d_Surface)&   S1,
437 				       const Handle(Adaptor3d_Surface)&   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_Surface)& S,
450 			      const Handle(Adaptor3d_Curve)& 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_Surface)& HS1,
457 			   const Handle(GeomAdaptor_Surface)& 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_Surface)& HS1,
464 			   const Handle(GeomAdaptor_Surface)& HS2,
465 			   Standard_Real&                      UInt1,
466 			   Standard_Real&                      UInt2,
467 			   gp_Pnt&                             P);
468 
469 Handle(GeomAdaptor_Surface) 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_ElSpine)& HES,
506 					   Handle(ChFiDS_Spine)&    Spine,
507 					   const GeomAbs_Shape      continuity,
508 					   const Standard_Real      tol,
509                                            const Standard_Boolean   IsOffset = Standard_False);
510 
511 TopoDS_Face ChFi3d_EnlargeFace(const Handle(ChFiDS_Spine)& Spine,
512 			       const Handle(BRepAdaptor_Surface)&  HS,
513 			       const Standard_Real         Tol );
514 
515 
516 void ChFi3d_cherche_face1 (const TopTools_ListOfShape & map,
517                     const TopoDS_Face & F1,
518                           TopoDS_Face &  F);
519 
520 void ChFi3d_cherche_element( const TopoDS_Vertex & V,
521                       const TopoDS_Edge & E1,
522                       const TopoDS_Face & F1,
523                       TopoDS_Edge & E ,
524                       TopoDS_Vertex  & Vtx );
525 
526 Standard_Real ChFi3d_EvalTolReached(const Handle(Adaptor3d_Surface)& S1,
527 				    const Handle(Geom2d_Curve)&     pc1,
528 				    const Handle(Adaptor3d_Surface)& S2,
529 				    const Handle(Geom2d_Curve)&     pc2,
530 				    const Handle(Geom_Curve)&       C);
531 
532 void ChFi3d_cherche_edge( const TopoDS_Vertex & V,
533                       const  TopTools_Array1OfShape  & E1,
534                       const TopoDS_Face & F1,
535                       TopoDS_Edge & E ,
536                       TopoDS_Vertex  & Vtx );
537 
538 Standard_Integer  ChFi3d_nbface (const TopTools_ListOfShape & mapVF );
539 
540 void ChFi3d_edge_common_faces (const TopTools_ListOfShape & mapEF,
541                                TopoDS_Face & F1,
542                                TopoDS_Face &  F2);
543 
544 
545 Standard_Real ChFi3d_AngleEdge (const TopoDS_Vertex & Vtx,
546                                   const TopoDS_Edge&  E1,
547                                   const TopoDS_Edge &  E2);
548 
549 void ChFi3d_ChercheBordsLibres(const  ChFiDS_Map & myVEMap,
550                                 const TopoDS_Vertex & V1,
551                                 Standard_Boolean & bordlibre,
552                                 TopoDS_Edge & edgelibre1,
553                                 TopoDS_Edge & edgelibre2);
554 
555 Standard_Integer ChFi3d_NbNotDegeneratedEdges (const TopoDS_Vertex& Vtx,
556 				      const ChFiDS_Map& VEMap);
557 Standard_Integer ChFi3d_NumberOfEdges(const TopoDS_Vertex& Vtx,
558 				      const ChFiDS_Map& VEMap);
559 
560 Standard_Integer ChFi3d_NumberOfSharpEdges(const TopoDS_Vertex& Vtx,
561                                            const ChFiDS_Map& VEMap,
562                                            const ChFiDS_Map& EFmap);
563 
564 void ChFi3d_cherche_vertex (const TopoDS_Edge & E1,
565 			    const TopoDS_Edge & E2,
566 			    TopoDS_Vertex & vertex,
567 			    Standard_Boolean & trouve);
568 
569 void ChFi3d_Couture( const TopoDS_Face & F,
570                      Standard_Boolean & couture,
571                      TopoDS_Edge & edgecouture);
572 
573 void ChFi3d_CoutureOnVertex( const TopoDS_Face & F,
574 			     const TopoDS_Vertex & V,
575 			     Standard_Boolean & couture,
576 			     TopoDS_Edge & edgecouture);
577 
578 Standard_Boolean ChFi3d_IsPseudoSeam( const TopoDS_Edge& E,
579 				      const TopoDS_Face& F );
580 
581 Handle(Geom_BSplineCurve) ChFi3d_ApproxByC2( const Handle(Geom_Curve)& C );
582 
583 Standard_Boolean ChFi3d_IsSmooth( const Handle(Geom_Curve)& C );
584 
585 #endif
586