summaryrefslogtreecommitdiff
path: root/inc/ChFi3d_Builder.hxx
blob: 5828adccf7f494aee955f7a21eff93bbe567c7d7 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
// This file is generated by WOK (CPPExt).
// Please do not edit this file; modify original file instead.
// The copyright and license terms as defined for the original file apply to 
// this header file considered to be the "object code" form of the original source.

#ifndef _ChFi3d_Builder_HeaderFile
#define _ChFi3d_Builder_HeaderFile

#ifndef _Standard_HeaderFile
#include <Standard.hxx>
#endif
#ifndef _Standard_Macro_HeaderFile
#include <Standard_Macro.hxx>
#endif

#ifndef _TopoDS_Shape_HeaderFile
#include <TopoDS_Shape.hxx>
#endif
#ifndef _Standard_Real_HeaderFile
#include <Standard_Real.hxx>
#endif
#ifndef _GeomAbs_Shape_HeaderFile
#include <GeomAbs_Shape.hxx>
#endif
#ifndef _ChFiDS_Map_HeaderFile
#include <ChFiDS_Map.hxx>
#endif
#ifndef _Handle_TopOpeBRepDS_HDataStructure_HeaderFile
#include <Handle_TopOpeBRepDS_HDataStructure.hxx>
#endif
#ifndef _Handle_TopOpeBRepBuild_HBuilder_HeaderFile
#include <Handle_TopOpeBRepBuild_HBuilder.hxx>
#endif
#ifndef _ChFiDS_ListOfStripe_HeaderFile
#include <ChFiDS_ListOfStripe.hxx>
#endif
#ifndef _ChFiDS_StripeMap_HeaderFile
#include <ChFiDS_StripeMap.hxx>
#endif
#ifndef _ChFiDS_Regularities_HeaderFile
#include <ChFiDS_Regularities.hxx>
#endif
#ifndef _TopTools_ListOfShape_HeaderFile
#include <TopTools_ListOfShape.hxx>
#endif
#ifndef _TopTools_DataMapOfShapeListOfInteger_HeaderFile
#include <TopTools_DataMapOfShapeListOfInteger.hxx>
#endif
#ifndef _Standard_Boolean_HeaderFile
#include <Standard_Boolean.hxx>
#endif
#ifndef _Standard_Integer_HeaderFile
#include <Standard_Integer.hxx>
#endif
#ifndef _Handle_ChFiDS_Spine_HeaderFile
#include <Handle_ChFiDS_Spine.hxx>
#endif
#ifndef _Handle_Geom_Surface_HeaderFile
#include <Handle_Geom_Surface.hxx>
#endif
#ifndef _ChFiDS_ErrorStatus_HeaderFile
#include <ChFiDS_ErrorStatus.hxx>
#endif
#ifndef _Handle_ChFiDS_SurfData_HeaderFile
#include <Handle_ChFiDS_SurfData.hxx>
#endif
#ifndef _Handle_ChFiDS_HElSpine_HeaderFile
#include <Handle_ChFiDS_HElSpine.hxx>
#endif
#ifndef _Handle_BRepAdaptor_HSurface_HeaderFile
#include <Handle_BRepAdaptor_HSurface.hxx>
#endif
#ifndef _Handle_Adaptor3d_TopolTool_HeaderFile
#include <Handle_Adaptor3d_TopolTool.hxx>
#endif
#ifndef _Handle_BRepAdaptor_HCurve2d_HeaderFile
#include <Handle_BRepAdaptor_HCurve2d.hxx>
#endif
#ifndef _TopAbs_Orientation_HeaderFile
#include <TopAbs_Orientation.hxx>
#endif
#ifndef _Handle_BRepBlend_Line_HeaderFile
#include <Handle_BRepBlend_Line.hxx>
#endif
#ifndef _Handle_Adaptor3d_HSurface_HeaderFile
#include <Handle_Adaptor3d_HSurface.hxx>
#endif
#ifndef _Handle_Adaptor2d_HCurve2d_HeaderFile
#include <Handle_Adaptor2d_HCurve2d.hxx>
#endif
#ifndef _Handle_ChFiDS_Stripe_HeaderFile
#include <Handle_ChFiDS_Stripe.hxx>
#endif
#ifndef _Handle_BRepTopAdaptor_TopolTool_HeaderFile
#include <Handle_BRepTopAdaptor_TopolTool.hxx>
#endif
#ifndef _TopAbs_State_HeaderFile
#include <TopAbs_State.hxx>
#endif
#ifndef _Handle_Geom2d_Curve_HeaderFile
#include <Handle_Geom2d_Curve.hxx>
#endif
class TopOpeBRepDS_HDataStructure;
class TopOpeBRepBuild_HBuilder;
class Standard_OutOfRange;
class Standard_NoSuchObject;
class Standard_ConstructionError;
class TopoDS_Shape;
class TopoDS_Edge;
class ChFiDS_Spine;
class TopoDS_Vertex;
class TopTools_ListOfShape;
class Geom_Surface;
class ChFiDS_SurfData;
class ChFiDS_HElSpine;
class BRepAdaptor_HSurface;
class Adaptor3d_TopolTool;
class math_Vector;
class BRepAdaptor_HCurve2d;
class BRepBlend_Line;
class Adaptor3d_HSurface;
class Blend_Function;
class Blend_FuncInv;
class Adaptor2d_HCurve2d;
class Blend_SurfRstFunction;
class Blend_SurfPointFuncInv;
class Blend_SurfCurvFuncInv;
class Blend_RstRstFunction;
class Blend_CurvPointFuncInv;
class ChFiDS_Stripe;
class BRepTopAdaptor_TopolTool;
class ChFiDS_SequenceOfSurfData;
class gp_Pnt2d;
class ChFiDS_ListOfStripe;
class ChFiDS_CommonPoint;
class TopoDS_Face;
class AppBlend_Approx;
class Geom2d_Curve;


//! Root  class  for calculation of  surfaces (fillets, <br>
//!          chamfers)  destined  to smooth edges  of <br>
//!          a gap on a Shape and the reconstruction of  the   Shape. <br>
class ChFi3d_Builder  {
public:

  void* operator new(size_t,void* anAddress) 
  {
    return anAddress;
  }
  void* operator new(size_t size) 
  {
    return Standard::Allocate(size); 
  }
  void  operator delete(void *anAddress) 
  {
    if (anAddress) Standard::Free((Standard_Address&)anAddress); 
  }

  
  Standard_EXPORT   virtual  void Delete() ;
Standard_EXPORT virtual ~ChFi3d_Builder(){Delete() ; }
  
  Standard_EXPORT     void SetParams(const Standard_Real Tang,const Standard_Real Tesp,const Standard_Real T2d,const Standard_Real TApp3d,const Standard_Real TolApp2d,const Standard_Real Fleche) ;
  
  Standard_EXPORT     void SetContinuity(const GeomAbs_Shape InternalContinuity,const Standard_Real AngularTolerance) ;
  //! extracts from  the list the contour containing edge E. <br>
//! <br>
  Standard_EXPORT     void Remove(const TopoDS_Edge& E) ;
  //! gives the number of  the contour containing E or 0 <br>
//!          if E does  not  belong to  any  contour. <br>
  Standard_EXPORT     Standard_Integer Contains(const TopoDS_Edge& E) const;
  //! gives  the number of  the contour containing E or 0 <br>
//!          if E does  not  belong  to  any  contour. <br>
//!	        Sets in IndexInSpine the index of E in the contour if it's found <br>
  Standard_EXPORT     Standard_Integer Contains(const TopoDS_Edge& E,Standard_Integer& IndexInSpine) const;
  //! gives the number of  disjoint contours on  which <br>
//!          the  fillets  are  calculated <br>
  Standard_EXPORT     Standard_Integer NbElements() const;
  //! gives the n'th set  of edges (contour) <br>//! if I >NbElements() <br>
  Standard_EXPORT     Handle_ChFiDS_Spine Value(const Standard_Integer I) const;
  //! returns the length of  the contour of index IC. <br>
  Standard_EXPORT     Standard_Real Length(const Standard_Integer IC) const;
  //! returns the First vertex V of <br>
//!          the contour of index IC. <br>
  Standard_EXPORT     TopoDS_Vertex FirstVertex(const Standard_Integer IC) const;
  //! returns the Last vertex V of <br>
//!          the contour of index IC. <br>
  Standard_EXPORT     TopoDS_Vertex LastVertex(const Standard_Integer IC) const;
  //! returns the abscissa of the vertex V on <br>
//!          the contour of index IC. <br>
  Standard_EXPORT     Standard_Real Abscissa(const Standard_Integer IC,const TopoDS_Vertex& V) const;
  //! returns the relative abscissa([0.,1.]) of the <br>
//!          vertex V on the contour of index IC. <br>
  Standard_EXPORT     Standard_Real RelativeAbscissa(const Standard_Integer IC,const TopoDS_Vertex& V) const;
  //! returns true if the contour of index IC is closed <br>
//!          an tangent. <br>
  Standard_EXPORT     Standard_Boolean ClosedAndTangent(const Standard_Integer IC) const;
  //! returns true if the contour of index IC is closed <br>
  Standard_EXPORT     Standard_Boolean Closed(const Standard_Integer IC) const;
  //! general calculation of geometry on all edges, <br>
//!          topologic reconstruction. <br>
  Standard_EXPORT     void Compute() ;
  //! returns True if the computation  is  success <br>
  Standard_EXPORT     Standard_Boolean IsDone() const;
  //! if (Isdone()) makes the result. <br>//! if (!Isdone()) <br>
  Standard_EXPORT     TopoDS_Shape Shape() const;
  //! Advanced  function for the history <br>
  Standard_EXPORT    const TopTools_ListOfShape& Generated(const TopoDS_Shape& EouV) ;
  //! Returns the number of contours on  which the calculation <br>
//!          has failed. <br>
  Standard_EXPORT     Standard_Integer NbFaultyContours() const;
  //! Returns the number of  I'th contour on  which the calculation <br>
//!          has failed. <br>
  Standard_EXPORT     Standard_Integer FaultyContour(const Standard_Integer I) const;
  //! Returns the number of  surfaces calculated  on  the contour IC. <br>
  Standard_EXPORT     Standard_Integer NbComputedSurfaces(const Standard_Integer IC) const;
  //! Returns the IS'th surface calculated on  the contour IC. <br>
  Standard_EXPORT     Handle_Geom_Surface ComputedSurface(const Standard_Integer IC,const Standard_Integer IS) const;
  //! Returns the number of vertices on  which the calculation <br>
//!          has failed. <br>
  Standard_EXPORT     Standard_Integer NbFaultyVertices() const;
  //! Returns the IV'th vertex on  which the calculation has failed. <br>
  Standard_EXPORT     TopoDS_Vertex FaultyVertex(const Standard_Integer IV) const;
  //! returns True if  a partial result has  been  calculated <br>
  Standard_EXPORT     Standard_Boolean HasResult() const;
  //! if (HasResult()) returns partial result <br>//! if (!HasResult()) <br>
  Standard_EXPORT     TopoDS_Shape BadShape() const;
  //! for the stripe IC ,indication on the cause <br>
//!          of  failure WalkingFailure,TwistedSurface,Error, Ok <br>
  Standard_EXPORT     ChFiDS_ErrorStatus StripeStatus(const Standard_Integer IC) const;
  //! Reset all  results of   compute and returns the  algorythm <br>
//!          in  the  state  of  the  last  acquisition to <br>
//!          enable modification of contours or areas. <br>
  Standard_EXPORT     void Reset() ;
  //! Returns the Builder of  topologic operations. <br>
  Standard_EXPORT     Handle_TopOpeBRepBuild_HBuilder Builder() const;
  //! Method, implemented in the inheritants, calculates <br>
//!          the elements of construction of the surface (fillet or <br>
//!          chamfer). <br>
  Standard_EXPORT     Standard_Boolean SplitKPart(const Handle(ChFiDS_SurfData)& Data,ChFiDS_SequenceOfSurfData& SetData,const Handle(ChFiDS_Spine)& Spine,const Standard_Integer Iedge,const Handle(Adaptor3d_HSurface)& S1,const Handle(Adaptor3d_TopolTool)& I1,const Handle(Adaptor3d_HSurface)& S2,const Handle(Adaptor3d_TopolTool)& I2,Standard_Boolean& Intf,Standard_Boolean& Intl) ;
  
  Standard_EXPORT     Standard_Integer PerformTwoCornerbyInter(const Standard_Integer Index) ;





protected:

  
  Standard_EXPORT   ChFi3d_Builder(const TopoDS_Shape& S,const Standard_Real Ta);
  
  Standard_EXPORT   virtual  void SimulKPart(const Handle(ChFiDS_SurfData)& SD) const = 0;
  
  Standard_EXPORT   virtual  Standard_Boolean SimulSurf(Handle(ChFiDS_SurfData)& Data,const Handle(ChFiDS_HElSpine)& Guide,const Handle(ChFiDS_Spine)& Spine,const Standard_Integer Choix,const Handle(BRepAdaptor_HSurface)& S1,const Handle(Adaptor3d_TopolTool)& I1,const Handle(BRepAdaptor_HSurface)& S2,const Handle(Adaptor3d_TopolTool)& I2,const Standard_Real TolGuide,Standard_Real& First,Standard_Real& Last,const Standard_Boolean Inside,const Standard_Boolean Appro,const Standard_Boolean Forward,const Standard_Boolean RecOnS1,const Standard_Boolean RecOnS2,const math_Vector& Soldep,Standard_Boolean& Intf,Standard_Boolean& Intl)  = 0;
  
  Standard_EXPORT   virtual  void SimulSurf(Handle(ChFiDS_SurfData)& Data,const Handle(ChFiDS_HElSpine)& Guide,const Handle(ChFiDS_Spine)& Spine,const Standard_Integer Choix,const Handle(BRepAdaptor_HSurface)& S1,const Handle(Adaptor3d_TopolTool)& I1,const Handle(BRepAdaptor_HCurve2d)& PC1,const Handle(BRepAdaptor_HSurface)& Sref1,const Handle(BRepAdaptor_HCurve2d)& PCref1,Standard_Boolean& Decroch1,const Handle(BRepAdaptor_HSurface)& S2,const Handle(Adaptor3d_TopolTool)& I2,const TopAbs_Orientation Or2,const Standard_Real Fleche,const Standard_Real TolGuide,Standard_Real& First,Standard_Real& Last,const Standard_Boolean Inside,const Standard_Boolean Appro,const Standard_Boolean Forward,const Standard_Boolean RecP,const Standard_Boolean RecS,const Standard_Boolean RecRst,const math_Vector& Soldep) ;
  
  Standard_EXPORT   virtual  void SimulSurf(Handle(ChFiDS_SurfData)& Data,const Handle(ChFiDS_HElSpine)& Guide,const Handle(ChFiDS_Spine)& Spine,const Standard_Integer Choix,const Handle(BRepAdaptor_HSurface)& S1,const Handle(Adaptor3d_TopolTool)& I1,const TopAbs_Orientation Or1,const Handle(BRepAdaptor_HSurface)& S2,const Handle(Adaptor3d_TopolTool)& I2,const Handle(BRepAdaptor_HCurve2d)& PC2,const Handle(BRepAdaptor_HSurface)& Sref2,const Handle(BRepAdaptor_HCurve2d)& PCref2,Standard_Boolean& Decroch2,const Standard_Real Fleche,const Standard_Real TolGuide,Standard_Real& First,Standard_Real& Last,const Standard_Boolean Inside,const Standard_Boolean Appro,const Standard_Boolean Forward,const Standard_Boolean RecP,const Standard_Boolean RecS,const Standard_Boolean RecRst,const math_Vector& Soldep) ;
  
  Standard_EXPORT   virtual  void SimulSurf(Handle(ChFiDS_SurfData)& Data,const Handle(ChFiDS_HElSpine)& Guide,const Handle(ChFiDS_Spine)& Spine,const Standard_Integer Choix,const Handle(BRepAdaptor_HSurface)& S1,const Handle(Adaptor3d_TopolTool)& I1,const Handle(BRepAdaptor_HCurve2d)& PC1,const Handle(BRepAdaptor_HSurface)& Sref1,const Handle(BRepAdaptor_HCurve2d)& PCref1,Standard_Boolean& Decroch1,const TopAbs_Orientation Or1,const Handle(BRepAdaptor_HSurface)& S2,const Handle(Adaptor3d_TopolTool)& I2,const Handle(BRepAdaptor_HCurve2d)& PC2,const Handle(BRepAdaptor_HSurface)& Sref2,const Handle(BRepAdaptor_HCurve2d)& PCref2,Standard_Boolean& Decroch2,const TopAbs_Orientation Or2,const Standard_Real Fleche,const Standard_Real TolGuide,Standard_Real& First,Standard_Real& Last,const Standard_Boolean Inside,const Standard_Boolean Appro,const Standard_Boolean Forward,const Standard_Boolean RecP1,const Standard_Boolean RecRst1,const Standard_Boolean RecP2,const Standard_Boolean RecRst2,const math_Vector& Soldep) ;
  
  Standard_EXPORT     Standard_Boolean SimulData(Handle(ChFiDS_SurfData)& Data,const Handle(ChFiDS_HElSpine)& Guide,Handle(BRepBlend_Line)& Lin,const Handle(Adaptor3d_HSurface)& S1,const Handle(Adaptor3d_TopolTool)& I1,const Handle(Adaptor3d_HSurface)& S2,const Handle(Adaptor3d_TopolTool)& I2,Blend_Function& Func,Blend_FuncInv& FInv,const Standard_Real PFirst,const Standard_Real MaxStep,const Standard_Real Fleche,const Standard_Real TolGuide,Standard_Real& First,Standard_Real& Last,const Standard_Boolean Inside,const Standard_Boolean Appro,const Standard_Boolean Forward,const math_Vector& Soldep,const Standard_Integer NbSecMin,const Standard_Boolean RecOnS1 = Standard_False,const Standard_Boolean RecOnS2 = Standard_False) ;
  
  Standard_EXPORT     Standard_Boolean SimulData(Handle(ChFiDS_SurfData)& Data,const Handle(ChFiDS_HElSpine)& HGuide,Handle(BRepBlend_Line)& Lin,const Handle(Adaptor3d_HSurface)& S1,const Handle(Adaptor3d_TopolTool)& I1,const Handle(Adaptor3d_HSurface)& S2,const Handle(Adaptor2d_HCurve2d)& PC2,const Handle(Adaptor3d_TopolTool)& I2,Standard_Boolean& Decroch,Blend_SurfRstFunction& Func,Blend_FuncInv& FInv,Blend_SurfPointFuncInv& FInvP,Blend_SurfCurvFuncInv& FInvC,const Standard_Real PFirst,const Standard_Real MaxStep,const Standard_Real Fleche,const Standard_Real TolGuide,Standard_Real& First,Standard_Real& Last,const math_Vector& Soldep,const Standard_Integer NbSecMin,const Standard_Boolean Inside,const Standard_Boolean Appro,const Standard_Boolean Forward,const Standard_Boolean RecP,const Standard_Boolean RecS,const Standard_Boolean RecRst) ;
  
  Standard_EXPORT     Standard_Boolean SimulData(Handle(ChFiDS_SurfData)& Data,const Handle(ChFiDS_HElSpine)& HGuide,Handle(BRepBlend_Line)& Lin,const Handle(Adaptor3d_HSurface)& S1,const Handle(Adaptor2d_HCurve2d)& PC1,const Handle(Adaptor3d_TopolTool)& I1,Standard_Boolean& Decroch1,const Handle(Adaptor3d_HSurface)& S2,const Handle(Adaptor2d_HCurve2d)& PC2,const Handle(Adaptor3d_TopolTool)& I2,Standard_Boolean& Decroch2,Blend_RstRstFunction& Func,Blend_SurfCurvFuncInv& FInv1,Blend_CurvPointFuncInv& FInvP1,Blend_SurfCurvFuncInv& FInv2,Blend_CurvPointFuncInv& FInvP2,const Standard_Real PFirst,const Standard_Real MaxStep,const Standard_Real Fleche,const Standard_Real TolGuide,Standard_Real& First,Standard_Real& Last,const math_Vector& Soldep,const Standard_Integer NbSecMin,const Standard_Boolean Inside,const Standard_Boolean Appro,const Standard_Boolean Forward,const Standard_Boolean RecP1,const Standard_Boolean RecRst1,const Standard_Boolean RecP2,const Standard_Boolean RecRst2) ;
  
  Standard_EXPORT   virtual  void SetRegul()  = 0;
  
  Standard_EXPORT     Standard_Boolean PerformElement(const Handle(ChFiDS_Spine)& CElement) ;
  
  Standard_EXPORT     void PerformExtremity(const Handle(ChFiDS_Spine)& CElement) ;
  
  Standard_EXPORT     void PerformSetOfSurf(Handle(ChFiDS_Stripe)& S,const Standard_Boolean Simul = Standard_False) ;
  
  Standard_EXPORT     void PerformSetOfKPart(Handle(ChFiDS_Stripe)& S,const Standard_Boolean Simul = Standard_False) ;
  
  Standard_EXPORT     void PerformSetOfKGen(Handle(ChFiDS_Stripe)& S,const Standard_Boolean Simul = Standard_False) ;
  
  Standard_EXPORT     void Trunc(const Handle(ChFiDS_SurfData)& SD,const Handle(ChFiDS_Spine)& Spine,const Handle(Adaptor3d_HSurface)& S1,const Handle(Adaptor3d_HSurface)& S2,const Standard_Integer iedge,const Standard_Boolean isfirst,const Standard_Integer cntlFiOnS) ;
  
  Standard_EXPORT     void CallPerformSurf(Handle(ChFiDS_Stripe)& Stripe,const Standard_Boolean Simul,ChFiDS_SequenceOfSurfData& SeqSD,Handle(ChFiDS_SurfData)& SD,const Handle(ChFiDS_HElSpine)& Guide,const Handle(ChFiDS_Spine)& Spine,const Handle(BRepAdaptor_HSurface)& HS1,const Handle(BRepAdaptor_HSurface)& HS3,const gp_Pnt2d& P1,const gp_Pnt2d& P3,Handle(Adaptor3d_TopolTool)& I1,const Handle(BRepAdaptor_HSurface)& HS2,const Handle(BRepAdaptor_HSurface)& HS4,const gp_Pnt2d& P2,const gp_Pnt2d& P4,Handle(Adaptor3d_TopolTool)& I2,const Standard_Real MaxStep,const Standard_Real Fleche,const Standard_Real TolGuide,Standard_Real& First,Standard_Real& Last,const Standard_Boolean Inside,const Standard_Boolean Appro,const Standard_Boolean Forward,const Standard_Boolean RecOnS1,const Standard_Boolean RecOnS2,math_Vector& Soldep,Standard_Boolean& Intf,Standard_Boolean& Intl,Handle(BRepAdaptor_HSurface)& Surf1,Handle(BRepAdaptor_HSurface)& Surf2) ;
  //! Method, implemented in the inheritants, calculating <br>
//!          elements of construction of the surface (fillet or <br>
//!          chamfer). <br>
  Standard_EXPORT   virtual  Standard_Boolean PerformSurf(ChFiDS_SequenceOfSurfData& Data,const Handle(ChFiDS_HElSpine)& Guide,const Handle(ChFiDS_Spine)& Spine,const Standard_Integer Choix,const Handle(BRepAdaptor_HSurface)& S1,const Handle(Adaptor3d_TopolTool)& I1,const Handle(BRepAdaptor_HSurface)& S2,const Handle(Adaptor3d_TopolTool)& I2,const Standard_Real MaxStep,const Standard_Real Fleche,const Standard_Real TolGuide,Standard_Real& First,Standard_Real& Last,const Standard_Boolean Inside,const Standard_Boolean Appro,const Standard_Boolean Forward,const Standard_Boolean RecOnS1,const Standard_Boolean RecOnS2,const math_Vector& Soldep,Standard_Boolean& Intf,Standard_Boolean& Intl)  = 0;
  //! Method, implemented  in inheritants, calculates <br>
//!          the elements of construction of  the surface (fillet <br>
//!          or chamfer) contact edge/face. <br>
  Standard_EXPORT   virtual  void PerformSurf(ChFiDS_SequenceOfSurfData& Data,const Handle(ChFiDS_HElSpine)& Guide,const Handle(ChFiDS_Spine)& Spine,const Standard_Integer Choix,const Handle(BRepAdaptor_HSurface)& S1,const Handle(Adaptor3d_TopolTool)& I1,const Handle(BRepAdaptor_HCurve2d)& PC1,const Handle(BRepAdaptor_HSurface)& Sref1,const Handle(BRepAdaptor_HCurve2d)& PCref1,Standard_Boolean& Decroch1,const Handle(BRepAdaptor_HSurface)& S2,const Handle(Adaptor3d_TopolTool)& I2,const TopAbs_Orientation Or2,const Standard_Real MaxStep,const Standard_Real Fleche,const Standard_Real TolGuide,Standard_Real& First,Standard_Real& Last,const Standard_Boolean Inside,const Standard_Boolean Appro,const Standard_Boolean Forward,const Standard_Boolean RecP,const Standard_Boolean RecS,const Standard_Boolean RecRst,const math_Vector& Soldep) ;
  //! Method, implemented in  inheritants, calculates <br>
//!          the elements of construction of  the surface (fillet <br>
//!          or chamfer) contact edge/face. <br>
  Standard_EXPORT   virtual  void PerformSurf(ChFiDS_SequenceOfSurfData& Data,const Handle(ChFiDS_HElSpine)& Guide,const Handle(ChFiDS_Spine)& Spine,const Standard_Integer Choix,const Handle(BRepAdaptor_HSurface)& S1,const Handle(Adaptor3d_TopolTool)& I1,const TopAbs_Orientation Or1,const Handle(BRepAdaptor_HSurface)& S2,const Handle(Adaptor3d_TopolTool)& I2,const Handle(BRepAdaptor_HCurve2d)& PC2,const Handle(BRepAdaptor_HSurface)& Sref2,const Handle(BRepAdaptor_HCurve2d)& PCref2,Standard_Boolean& Decroch2,const Standard_Real MaxStep,const Standard_Real Fleche,const Standard_Real TolGuide,Standard_Real& First,Standard_Real& Last,const Standard_Boolean Inside,const Standard_Boolean Appro,const Standard_Boolean Forward,const Standard_Boolean RecP,const Standard_Boolean RecS,const Standard_Boolean RecRst,const math_Vector& Soldep) ;
  //! Method, implemented in inheritants, calculates <br>
//!          the elements of construction of  the surface (fillet <br>
//!          or chamfer) contact edge/edge. <br>
  Standard_EXPORT   virtual  void PerformSurf(ChFiDS_SequenceOfSurfData& Data,const Handle(ChFiDS_HElSpine)& Guide,const Handle(ChFiDS_Spine)& Spine,const Standard_Integer Choix,const Handle(BRepAdaptor_HSurface)& S1,const Handle(Adaptor3d_TopolTool)& I1,const Handle(BRepAdaptor_HCurve2d)& PC1,const Handle(BRepAdaptor_HSurface)& Sref1,const Handle(BRepAdaptor_HCurve2d)& PCref1,Standard_Boolean& Decroch1,const TopAbs_Orientation Or1,const Handle(BRepAdaptor_HSurface)& S2,const Handle(Adaptor3d_TopolTool)& I2,const Handle(BRepAdaptor_HCurve2d)& PC2,const Handle(BRepAdaptor_HSurface)& Sref2,const Handle(BRepAdaptor_HCurve2d)& PCref2,Standard_Boolean& Decroch2,const TopAbs_Orientation Or2,const Standard_Real MaxStep,const Standard_Real Fleche,const Standard_Real TolGuide,Standard_Real& First,Standard_Real& Last,const Standard_Boolean Inside,const Standard_Boolean Appro,const Standard_Boolean Forward,const Standard_Boolean RecP1,const Standard_Boolean RecRst1,const Standard_Boolean RecP2,const Standard_Boolean RecRst2,const math_Vector& Soldep) ;
  
  Standard_EXPORT   virtual  void PerformTwoCorner(const Standard_Integer Index)  = 0;
  
  Standard_EXPORT   virtual  void PerformThreeCorner(const Standard_Integer Index)  = 0;
  
  Standard_EXPORT     void PerformMoreThreeCorner(const Standard_Integer Index,const Standard_Integer nbcourb) ;
  
  Standard_EXPORT   virtual  void ExtentOneCorner(const TopoDS_Vertex& V,const Handle(ChFiDS_Stripe)& S)  = 0;
  
  Standard_EXPORT   virtual  void ExtentTwoCorner(const TopoDS_Vertex& V,const ChFiDS_ListOfStripe& LS)  = 0;
  
  Standard_EXPORT   virtual  void ExtentThreeCorner(const TopoDS_Vertex& V,const ChFiDS_ListOfStripe& LS)  = 0;
  
  Standard_EXPORT   virtual  Standard_Boolean PerformFirstSection(const Handle(ChFiDS_Spine)& S,const Handle(ChFiDS_HElSpine)& HGuide,const Standard_Integer Choix,Handle(BRepAdaptor_HSurface)& S1,Handle(BRepAdaptor_HSurface)& S2,const Handle(Adaptor3d_TopolTool)& I1,const Handle(Adaptor3d_TopolTool)& I2,const Standard_Real Par,math_Vector& SolDep,TopAbs_State& Pos1,TopAbs_State& Pos2) const = 0;
  
  Standard_EXPORT     Standard_Boolean SearchFace(const Handle(ChFiDS_Spine)& Sp,const ChFiDS_CommonPoint& Pc,const TopoDS_Face& FRef,TopoDS_Face& FVoi) const;
  
  Standard_EXPORT     Standard_Boolean StripeOrientations(const Handle(ChFiDS_Spine)& Sp,TopAbs_Orientation& Or1,TopAbs_Orientation& Or2,Standard_Integer& ChoixConge) const;
  //! Calculates  a Line of contact face/face. <br>
  Standard_EXPORT     Standard_Boolean ComputeData(Handle(ChFiDS_SurfData)& Data,const Handle(ChFiDS_HElSpine)& Guide,const Handle(ChFiDS_Spine)& Spine,Handle(BRepBlend_Line)& Lin,const Handle(Adaptor3d_HSurface)& S1,const Handle(Adaptor3d_TopolTool)& I1,const Handle(Adaptor3d_HSurface)& S2,const Handle(Adaptor3d_TopolTool)& I2,Blend_Function& Func,Blend_FuncInv& FInv,const Standard_Real PFirst,const Standard_Real MaxStep,const Standard_Real Fleche,const Standard_Real TolGuide,Standard_Real& First,Standard_Real& Last,const Standard_Boolean Inside,const Standard_Boolean Appro,const Standard_Boolean Forward,const math_Vector& Soldep,Standard_Boolean& Intf,Standard_Boolean& Intl,Standard_Boolean& Gd1,Standard_Boolean& Gd2,Standard_Boolean& Gf1,Standard_Boolean& Gf2,const Standard_Boolean RecOnS1 = Standard_False,const Standard_Boolean RecOnS2 = Standard_False) ;
  //! Calculates a Line of contact edge/face. <br>
  Standard_EXPORT     Standard_Boolean ComputeData(Handle(ChFiDS_SurfData)& Data,const Handle(ChFiDS_HElSpine)& HGuide,Handle(BRepBlend_Line)& Lin,const Handle(Adaptor3d_HSurface)& S1,const Handle(Adaptor3d_TopolTool)& I1,const Handle(Adaptor3d_HSurface)& S2,const Handle(Adaptor2d_HCurve2d)& PC2,const Handle(Adaptor3d_TopolTool)& I2,Standard_Boolean& Decroch,Blend_SurfRstFunction& Func,Blend_FuncInv& FInv,Blend_SurfPointFuncInv& FInvP,Blend_SurfCurvFuncInv& FInvC,const Standard_Real PFirst,const Standard_Real MaxStep,const Standard_Real Fleche,const Standard_Real TolGuide,Standard_Real& First,Standard_Real& Last,const math_Vector& Soldep,const Standard_Boolean Inside,const Standard_Boolean Appro,const Standard_Boolean Forward,const Standard_Boolean RecP,const Standard_Boolean RecS,const Standard_Boolean RecRst) ;
  //! Calculates a Line of contact edge/edge. <br>
  Standard_EXPORT     Standard_Boolean ComputeData(Handle(ChFiDS_SurfData)& Data,const Handle(ChFiDS_HElSpine)& HGuide,Handle(BRepBlend_Line)& Lin,const Handle(Adaptor3d_HSurface)& S1,const Handle(Adaptor2d_HCurve2d)& PC1,const Handle(Adaptor3d_TopolTool)& I1,Standard_Boolean& Decroch1,const Handle(Adaptor3d_HSurface)& S2,const Handle(Adaptor2d_HCurve2d)& PC2,const Handle(Adaptor3d_TopolTool)& I2,Standard_Boolean& Decroch2,Blend_RstRstFunction& Func,Blend_SurfCurvFuncInv& FInv1,Blend_CurvPointFuncInv& FInvP1,Blend_SurfCurvFuncInv& FInv2,Blend_CurvPointFuncInv& FInvP2,const Standard_Real PFirst,const Standard_Real MaxStep,const Standard_Real Fleche,const Standard_Real TolGuide,Standard_Real& First,Standard_Real& Last,const math_Vector& Soldep,const Standard_Boolean Inside,const Standard_Boolean Appro,const Standard_Boolean Forward,const Standard_Boolean RecP1,const Standard_Boolean RecRst1,const Standard_Boolean RecP2,const Standard_Boolean RecRst2) ;
  
  Standard_EXPORT     Standard_Boolean CompleteData(Handle(ChFiDS_SurfData)& Data,Blend_Function& Func,Handle(BRepBlend_Line)& Lin,const Handle(Adaptor3d_HSurface)& S1,const Handle(Adaptor3d_HSurface)& S2,const TopAbs_Orientation Or1,const Standard_Boolean Gd1,const Standard_Boolean Gd2,const Standard_Boolean Gf1,const Standard_Boolean Gf2,const Standard_Boolean Reversed = Standard_False) ;
  
  Standard_EXPORT     Standard_Boolean CompleteData(Handle(ChFiDS_SurfData)& Data,Blend_SurfRstFunction& Func,Handle(BRepBlend_Line)& Lin,const Handle(Adaptor3d_HSurface)& S1,const Handle(Adaptor3d_HSurface)& S2,const TopAbs_Orientation Or,const Standard_Boolean Reversed) ;
  
  Standard_EXPORT     Standard_Boolean CompleteData(Handle(ChFiDS_SurfData)& Data,Blend_RstRstFunction& Func,Handle(BRepBlend_Line)& Lin,const Handle(Adaptor3d_HSurface)& S1,const Handle(Adaptor3d_HSurface)& S2,const TopAbs_Orientation Or) ;
  
  Standard_EXPORT     Standard_Boolean StoreData(Handle(ChFiDS_SurfData)& Data,const AppBlend_Approx& Approx,const Handle(BRepBlend_Line)& Lin,const Handle(Adaptor3d_HSurface)& S1,const Handle(Adaptor3d_HSurface)& S2,const TopAbs_Orientation Or1,const Standard_Boolean Gd1,const Standard_Boolean Gd2,const Standard_Boolean Gf1,const Standard_Boolean Gf2,const Standard_Boolean Reversed = Standard_False) ;
  
  Standard_EXPORT     Standard_Boolean CompleteData(Handle(ChFiDS_SurfData)& Data,const Handle(Geom_Surface)& Surfcoin,const Handle(Adaptor3d_HSurface)& S1,const Handle(Geom2d_Curve)& PC1,const Handle(Adaptor3d_HSurface)& S2,const Handle(Geom2d_Curve)& PC2,const TopAbs_Orientation Or,const Standard_Boolean On1,const Standard_Boolean Gd1,const Standard_Boolean Gd2,const Standard_Boolean Gf1,const Standard_Boolean Gf2) ;


Standard_Real tolappangle;
Standard_Real tolesp;
Standard_Real tol2d;
Standard_Real tolapp3d;
Standard_Real tolapp2d;
Standard_Real fleche;
GeomAbs_Shape myConti;
ChFiDS_Map myEFMap;
ChFiDS_Map myESoMap;
ChFiDS_Map myEShMap;
ChFiDS_Map myVFMap;
ChFiDS_Map myVEMap;
Handle_TopOpeBRepDS_HDataStructure myDS;
Handle_TopOpeBRepBuild_HBuilder myCoup;
ChFiDS_ListOfStripe myListStripe;
ChFiDS_StripeMap myVDataMap;
ChFiDS_Regularities myRegul;
ChFiDS_ListOfStripe badstripes;
TopTools_ListOfShape badvertices;
TopTools_DataMapOfShapeListOfInteger myEVIMap;
Standard_Boolean done;
Standard_Boolean hasresult;


private:

  
  Standard_EXPORT     Standard_Boolean FaceTangency(const TopoDS_Edge& E0,const TopoDS_Edge& E1,const TopoDS_Vertex& V) const;
  
  Standard_EXPORT     void PerformSetOfSurfOnElSpine(const Handle(ChFiDS_HElSpine)& ES,Handle(ChFiDS_Stripe)& St,Handle(BRepTopAdaptor_TopolTool)& It1,Handle(BRepTopAdaptor_TopolTool)& It2,const Standard_Boolean Simul = Standard_False) ;
  
  Standard_EXPORT     void PerformFilletOnVertex(const Standard_Integer Index) ;
  
  Standard_EXPORT     void PerformSingularCorner(const Standard_Integer Index) ;
  
  Standard_EXPORT     void PerformOneCorner(const Standard_Integer Index,const Standard_Boolean PrepareOnSame = Standard_False) ;
  
  Standard_EXPORT     void IntersectMoreCorner(const Standard_Integer Index) ;
  
  Standard_EXPORT     void PerformMoreSurfdata(const Standard_Integer Index) ;
  
  Standard_EXPORT     void PerformIntersectionAtEnd(const Standard_Integer Index) ;
  
  Standard_EXPORT     void ExtentAnalyse() ;
  
  Standard_EXPORT     Standard_Boolean FindFace(const TopoDS_Vertex& V,const ChFiDS_CommonPoint& P1,const ChFiDS_CommonPoint& P2,TopoDS_Face& Fv) const;
  
  Standard_EXPORT     Standard_Boolean FindFace(const TopoDS_Vertex& V,const ChFiDS_CommonPoint& P1,const ChFiDS_CommonPoint& P2,TopoDS_Face& Fv,const TopoDS_Face& Favoid) const;
  
  Standard_EXPORT     Standard_Boolean MoreSurfdata(const Standard_Integer Index) const;
  
  Standard_EXPORT     Standard_Boolean StartSol(const Handle(ChFiDS_Spine)& Spine,Handle(BRepAdaptor_HSurface)& HS,gp_Pnt2d& P,Handle(BRepAdaptor_HCurve2d)& HC,Standard_Real& W,const Handle(ChFiDS_SurfData)& SD,const Standard_Boolean isFirst,const Standard_Integer OnS,Handle(BRepAdaptor_HSurface)& HSref,Handle(BRepAdaptor_HCurve2d)& HCref,Standard_Boolean& RecP,Standard_Boolean& RecS,Standard_Boolean& RecRst,Standard_Boolean& C1Obst,Handle(BRepAdaptor_HSurface)& HSbis,gp_Pnt2d& Pbis,const Standard_Boolean Decroch,const TopoDS_Vertex& Vref) const;
  
  Standard_EXPORT     void StartSol(const Handle(ChFiDS_Stripe)& S,const Handle(ChFiDS_HElSpine)& HGuide,Handle(BRepAdaptor_HSurface)& HS1,Handle(BRepAdaptor_HSurface)& HS2,Handle(BRepTopAdaptor_TopolTool)& I1,Handle(BRepTopAdaptor_TopolTool)& I2,gp_Pnt2d& P1,gp_Pnt2d& P2,Standard_Real& First) const;
  
  Standard_EXPORT     void ConexFaces(const Handle(ChFiDS_Spine)& Sp,const Standard_Integer IEdge,const Standard_Integer RefChoix,Handle(BRepAdaptor_HSurface)& HS1,Handle(BRepAdaptor_HSurface)& HS2) const;


TopoDS_Shape myShape;
Standard_Real angular;
TopTools_ListOfShape myGenerated;
TopoDS_Shape myShapeResult;
TopoDS_Shape badShape;


};





// other Inline functions and methods (like "C++: function call" methods)


#endif