Back to home page

EIC code displayed by LXR

 
 

    


Warning, file /include/opencascade/ChFi3d_Builder.hxx was not indexed or was modified since last indexation (in which case cross-reference links may be missing, inaccurate or erroneous).

0001 // Created on: 1993-11-09
0002 // Created by: Laurent BOURESCHE
0003 // Copyright (c) 1993-1999 Matra Datavision
0004 // Copyright (c) 1999-2014 OPEN CASCADE SAS
0005 //
0006 // This file is part of Open CASCADE Technology software library.
0007 //
0008 // This library is free software; you can redistribute it and/or modify it under
0009 // the terms of the GNU Lesser General Public License version 2.1 as published
0010 // by the Free Software Foundation, with special exception defined in the file
0011 // OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
0012 // distribution for complete text of the license and disclaimer of any warranty.
0013 //
0014 // Alternatively, this file may be used under the terms of Open CASCADE
0015 // commercial license or contractual agreement.
0016 
0017 #ifndef _ChFi3d_Builder_HeaderFile
0018 #define _ChFi3d_Builder_HeaderFile
0019 
0020 #include <BRepAdaptor_Curve2d.hxx>
0021 #include <BRepAdaptor_Surface.hxx>
0022 #include <GeomAbs_Shape.hxx>
0023 #include <ChFiDS_ErrorStatus.hxx>
0024 #include <ChFiDS_Map.hxx>
0025 #include <ChFiDS_Regularities.hxx>
0026 #include <ChFiDS_SequenceOfSurfData.hxx>
0027 #include <ChFiDS_StripeMap.hxx>
0028 #include <ChFiDS_ElSpine.hxx>
0029 #include <math_Vector.hxx>
0030 #include <TopoDS_Shape.hxx>
0031 #include <TopTools_ListOfShape.hxx>
0032 #include <TopTools_DataMapOfShapeListOfInteger.hxx>
0033 #include <TopTools_DataMapOfShapeShape.hxx>
0034 #include <TopAbs_Orientation.hxx>
0035 #include <TopAbs_State.hxx>
0036 
0037 class TopOpeBRepDS_HDataStructure;
0038 class TopOpeBRepBuild_HBuilder;
0039 class TopoDS_Edge;
0040 class ChFiDS_Spine;
0041 class TopoDS_Vertex;
0042 class Geom_Surface;
0043 class ChFiDS_SurfData;
0044 class Adaptor3d_TopolTool;
0045 class BRepBlend_Line;
0046 class Blend_Function;
0047 class Blend_FuncInv;
0048 class Blend_SurfRstFunction;
0049 class Blend_SurfPointFuncInv;
0050 class Blend_SurfCurvFuncInv;
0051 class Blend_RstRstFunction;
0052 class Blend_CurvPointFuncInv;
0053 class ChFiDS_Stripe;
0054 class BRepTopAdaptor_TopolTool;
0055 class gp_Pnt2d;
0056 class ChFiDS_CommonPoint;
0057 class TopoDS_Face;
0058 class AppBlend_Approx;
0059 class Geom2d_Curve;
0060 
0061 
0062 //! Root  class  for calculation of  surfaces (fillets,
0063 //! chamfers)  destined  to smooth edges  of
0064 //! a gap on a Shape and the reconstruction of  the   Shape.
0065 class ChFi3d_Builder 
0066 {
0067 public:
0068 
0069   DEFINE_STANDARD_ALLOC
0070 
0071   Standard_EXPORT virtual ~ChFi3d_Builder();
0072   
0073   Standard_EXPORT void SetParams (const Standard_Real Tang,
0074                                   const Standard_Real Tesp,
0075                                   const Standard_Real T2d,
0076                                   const Standard_Real TApp3d,
0077                                   const Standard_Real TolApp2d,
0078                                   const Standard_Real Fleche);
0079   
0080   Standard_EXPORT void SetContinuity (const GeomAbs_Shape InternalContinuity,
0081                                       const Standard_Real AngularTolerance);
0082   
0083   //! extracts from  the list the contour containing edge E.
0084   Standard_EXPORT void Remove (const TopoDS_Edge& E);
0085   
0086   //! gives the number of  the contour containing E or 0
0087   //! if E does  not  belong to  any  contour.
0088   Standard_EXPORT Standard_Integer Contains (const TopoDS_Edge& E) const;
0089   
0090   //! gives  the number of  the contour containing E or 0
0091   //! if E does  not  belong  to  any  contour.
0092   //! Sets in IndexInSpine the index of E in the contour if it's found
0093   Standard_EXPORT Standard_Integer Contains (const TopoDS_Edge& E,
0094                                              Standard_Integer& IndexInSpine) const;
0095   
0096   //! gives the number of  disjoint contours on  which
0097   //! the  fillets  are  calculated
0098   Standard_EXPORT Standard_Integer NbElements() const;
0099   
0100   //! gives the n'th set  of edges (contour)
0101   //! if I >NbElements()
0102   Standard_EXPORT Handle(ChFiDS_Spine) Value (const Standard_Integer I) const;
0103   
0104   //! returns the length of  the contour of index IC.
0105   Standard_EXPORT Standard_Real Length (const Standard_Integer IC) const;
0106   
0107   //! returns the First vertex V of
0108   //! the contour of index IC.
0109   Standard_EXPORT TopoDS_Vertex FirstVertex (const Standard_Integer IC) const;
0110   
0111   //! returns the Last vertex V of
0112   //! the contour of index IC.
0113   Standard_EXPORT TopoDS_Vertex LastVertex (const Standard_Integer IC) const;
0114   
0115   //! returns the abscissa of the vertex V on
0116   //! the contour of index IC.
0117   Standard_EXPORT Standard_Real Abscissa (const Standard_Integer IC,
0118                                           const TopoDS_Vertex& V) const;
0119   
0120   //! returns the relative abscissa([0.,1.]) of the
0121   //! vertex V on the contour of index IC.
0122   Standard_EXPORT Standard_Real RelativeAbscissa (const Standard_Integer IC,
0123                                                   const TopoDS_Vertex& V) const;
0124   
0125   //! returns true if the contour of index IC is closed
0126   //! an tangent.
0127   Standard_EXPORT Standard_Boolean ClosedAndTangent (const Standard_Integer IC) const;
0128   
0129   //! returns true if the contour of index IC is closed
0130   Standard_EXPORT Standard_Boolean Closed (const Standard_Integer IC) const;
0131   
0132   //! general calculation of geometry on all edges,
0133   //! topologic reconstruction.
0134   Standard_EXPORT void Compute();
0135   
0136   //! returns True if the computation  is  success
0137   Standard_EXPORT Standard_Boolean IsDone() const;
0138   
0139   //! if (Isdone()) makes the result.
0140   //! if (!Isdone())
0141   Standard_EXPORT TopoDS_Shape Shape() const;
0142   
0143   //! Advanced  function for the history
0144   Standard_EXPORT const TopTools_ListOfShape& Generated (const TopoDS_Shape& EouV);
0145   
0146   //! Returns the number of contours on  which the calculation
0147   //! has failed.
0148   Standard_EXPORT Standard_Integer NbFaultyContours() const;
0149   
0150   //! Returns the number of  I'th contour on  which the calculation
0151   //! has failed.
0152   Standard_EXPORT Standard_Integer FaultyContour (const Standard_Integer I) const;
0153   
0154   //! Returns the number of  surfaces calculated  on  the contour IC.
0155   Standard_EXPORT Standard_Integer NbComputedSurfaces (const Standard_Integer IC) const;
0156   
0157   //! Returns the IS'th surface calculated on  the contour IC.
0158   Standard_EXPORT Handle(Geom_Surface) ComputedSurface (const Standard_Integer IC,
0159                                                         const Standard_Integer IS) const;
0160   
0161   //! Returns the number of vertices on  which the calculation
0162   //! has failed.
0163   Standard_EXPORT Standard_Integer NbFaultyVertices() const;
0164   
0165   //! Returns the IV'th vertex on  which the calculation has failed.
0166   Standard_EXPORT TopoDS_Vertex FaultyVertex (const Standard_Integer IV) const;
0167   
0168   //! returns True if  a partial result has  been  calculated
0169   Standard_EXPORT Standard_Boolean HasResult() const;
0170   
0171   //! if (HasResult()) returns partial result
0172   //! if (!HasResult())
0173   Standard_EXPORT TopoDS_Shape BadShape() const;
0174   
0175   //! for the stripe IC ,indication on the cause
0176   //! of  failure WalkingFailure,TwistedSurface,Error, Ok
0177   Standard_EXPORT ChFiDS_ErrorStatus StripeStatus (const Standard_Integer IC) const;
0178   
0179   //! Reset all results of compute and returns the algorithm
0180   //! in the state of the last acquisition to enable modification of contours or areas.
0181   Standard_EXPORT void Reset();
0182   
0183   //! Returns the Builder of  topologic operations.
0184   Standard_EXPORT Handle(TopOpeBRepBuild_HBuilder) Builder() const;
0185   
0186   //! Method, implemented in the inheritants, calculates
0187   //! the elements of construction of the surface (fillet or
0188   //! chamfer).
0189   Standard_EXPORT Standard_Boolean SplitKPart (const Handle(ChFiDS_SurfData)& Data,
0190                                                ChFiDS_SequenceOfSurfData& SetData,
0191                                                const Handle(ChFiDS_Spine)& Spine,
0192                                                const Standard_Integer Iedge,
0193                                                const Handle(Adaptor3d_Surface)& S1,
0194                                                const Handle(Adaptor3d_TopolTool)& I1,
0195                                                const Handle(Adaptor3d_Surface)& S2,
0196                                                const Handle(Adaptor3d_TopolTool)& I2,
0197                                                Standard_Boolean& Intf,
0198                                                Standard_Boolean& Intl);
0199   
0200   Standard_EXPORT Standard_Boolean PerformTwoCornerbyInter (const Standard_Integer Index);
0201 
0202 
0203 
0204 
0205 protected:
0206 
0207   
0208   Standard_EXPORT ChFi3d_Builder(const TopoDS_Shape& S, const Standard_Real Ta);
0209   
0210   Standard_EXPORT virtual void SimulKPart (const Handle(ChFiDS_SurfData)& SD) const = 0;
0211   
0212   Standard_EXPORT virtual Standard_Boolean SimulSurf (Handle(ChFiDS_SurfData)& Data,
0213                                                       const Handle(ChFiDS_ElSpine)& Guide,
0214                                                       const Handle(ChFiDS_Spine)& Spine,
0215                                                       const Standard_Integer Choix,
0216                                                       const Handle(BRepAdaptor_Surface)& S1,
0217                                                       const Handle(Adaptor3d_TopolTool)& I1,
0218                                                       const Handle(BRepAdaptor_Surface)& S2,
0219                                                       const Handle(Adaptor3d_TopolTool)& I2,
0220                                                       const Standard_Real TolGuide,
0221                                                       Standard_Real& First,
0222                                                       Standard_Real& Last,
0223                                                       const Standard_Boolean Inside,
0224                                                       const Standard_Boolean Appro,
0225                                                       const Standard_Boolean Forward,
0226                                                       const Standard_Boolean RecOnS1,
0227                                                       const Standard_Boolean RecOnS2,
0228                                                       const math_Vector& Soldep,
0229                                                       Standard_Integer& Intf,
0230                                                       Standard_Integer& Intl) = 0;
0231   
0232   Standard_EXPORT virtual void SimulSurf (Handle(ChFiDS_SurfData)& Data,
0233                                           const Handle(ChFiDS_ElSpine)& Guide,
0234                                           const Handle(ChFiDS_Spine)& Spine,
0235                                           const Standard_Integer Choix,
0236                                           const Handle(BRepAdaptor_Surface)& S1,
0237                                           const Handle(Adaptor3d_TopolTool)& I1,
0238                                           const Handle(BRepAdaptor_Curve2d)& PC1,
0239                                           const Handle(BRepAdaptor_Surface)& Sref1,
0240                                           const Handle(BRepAdaptor_Curve2d)& PCref1,
0241                                           Standard_Boolean& Decroch1,
0242                                           const Handle(BRepAdaptor_Surface)& S2,
0243                                           const Handle(Adaptor3d_TopolTool)& I2,
0244                                           const TopAbs_Orientation Or2,
0245                                           const Standard_Real Fleche,
0246                                           const Standard_Real TolGuide,
0247                                           Standard_Real& First,
0248                                           Standard_Real& Last,
0249                                           const Standard_Boolean Inside,
0250                                           const Standard_Boolean Appro,
0251                                           const Standard_Boolean Forward,
0252                                           const Standard_Boolean RecP,
0253                                           const Standard_Boolean RecS,
0254                                           const Standard_Boolean RecRst,
0255                                           const math_Vector& Soldep);
0256   
0257   Standard_EXPORT virtual void SimulSurf (Handle(ChFiDS_SurfData)& Data,
0258                                           const Handle(ChFiDS_ElSpine)& Guide,
0259                                           const Handle(ChFiDS_Spine)& Spine,
0260                                           const Standard_Integer Choix,
0261                                           const Handle(BRepAdaptor_Surface)& S1,
0262                                           const Handle(Adaptor3d_TopolTool)& I1,
0263                                           const TopAbs_Orientation Or1,
0264                                           const Handle(BRepAdaptor_Surface)& S2,
0265                                           const Handle(Adaptor3d_TopolTool)& I2,
0266                                           const Handle(BRepAdaptor_Curve2d)& PC2,
0267                                           const Handle(BRepAdaptor_Surface)& Sref2,
0268                                           const Handle(BRepAdaptor_Curve2d)& PCref2,
0269                                           Standard_Boolean& Decroch2,
0270                                           const Standard_Real Fleche,
0271                                           const Standard_Real TolGuide,
0272                                           Standard_Real& First,
0273                                           Standard_Real& Last,
0274                                           const Standard_Boolean Inside,
0275                                           const Standard_Boolean Appro,
0276                                           const Standard_Boolean Forward,
0277                                           const Standard_Boolean RecP,
0278                                           const Standard_Boolean RecS,
0279                                           const Standard_Boolean RecRst,
0280                                           const math_Vector& Soldep);
0281   
0282   Standard_EXPORT virtual void SimulSurf (Handle(ChFiDS_SurfData)& Data,
0283                                           const Handle(ChFiDS_ElSpine)& Guide,
0284                                           const Handle(ChFiDS_Spine)& Spine,
0285                                           const Standard_Integer Choix,
0286                                           const Handle(BRepAdaptor_Surface)& S1,
0287                                           const Handle(Adaptor3d_TopolTool)& I1,
0288                                           const Handle(BRepAdaptor_Curve2d)& PC1,
0289                                           const Handle(BRepAdaptor_Surface)& Sref1,
0290                                           const Handle(BRepAdaptor_Curve2d)& PCref1,
0291                                           Standard_Boolean& Decroch1,
0292                                           const TopAbs_Orientation Or1,
0293                                           const Handle(BRepAdaptor_Surface)& S2,
0294                                           const Handle(Adaptor3d_TopolTool)& I2,
0295                                           const Handle(BRepAdaptor_Curve2d)& PC2,
0296                                           const Handle(BRepAdaptor_Surface)& Sref2,
0297                                           const Handle(BRepAdaptor_Curve2d)& PCref2,
0298                                           Standard_Boolean& Decroch2,
0299                                           const TopAbs_Orientation Or2,
0300                                           const Standard_Real Fleche,
0301                                           const Standard_Real TolGuide,
0302                                           Standard_Real& First,
0303                                           Standard_Real& Last,
0304                                           const Standard_Boolean Inside,
0305                                           const Standard_Boolean Appro,
0306                                           const Standard_Boolean Forward,
0307                                           const Standard_Boolean RecP1,
0308                                           const Standard_Boolean RecRst1,
0309                                           const Standard_Boolean RecP2,
0310                                           const Standard_Boolean RecRst2,
0311                                           const math_Vector& Soldep);
0312   
0313   Standard_EXPORT Standard_Boolean SimulData (Handle(ChFiDS_SurfData)& Data,
0314                                               const Handle(ChFiDS_ElSpine)& Guide,
0315                                               const Handle(ChFiDS_ElSpine)& AdditionalGuide,
0316                                               Handle(BRepBlend_Line)& Lin,
0317                                               const Handle(Adaptor3d_Surface)& S1,
0318                                               const Handle(Adaptor3d_TopolTool)& I1,
0319                                               const Handle(Adaptor3d_Surface)& S2,
0320                                               const Handle(Adaptor3d_TopolTool)& I2,
0321                                               Blend_Function& Func,
0322                                               Blend_FuncInv& FInv,
0323                                               const Standard_Real PFirst,
0324                                               const Standard_Real MaxStep,
0325                                               const Standard_Real Fleche,
0326                                               const Standard_Real TolGuide,
0327                                               Standard_Real& First,
0328                                               Standard_Real& Last,
0329                                               const Standard_Boolean Inside,
0330                                               const Standard_Boolean Appro,
0331                                               const Standard_Boolean Forward,
0332                                               const math_Vector& Soldep,
0333                                               const Standard_Integer NbSecMin,
0334                                               const Standard_Boolean RecOnS1 = Standard_False,
0335                                               const Standard_Boolean RecOnS2 = Standard_False);
0336   
0337   Standard_EXPORT Standard_Boolean SimulData (Handle(ChFiDS_SurfData)& Data,
0338                                               const Handle(ChFiDS_ElSpine)& HGuide,
0339                                               Handle(BRepBlend_Line)& Lin,
0340                                               const Handle(Adaptor3d_Surface)& S1,
0341                                               const Handle(Adaptor3d_TopolTool)& I1,
0342                                               const Handle(Adaptor3d_Surface)& S2,
0343                                               const Handle(Adaptor2d_Curve2d)& PC2,
0344                                               const Handle(Adaptor3d_TopolTool)& I2,
0345                                               Standard_Boolean& Decroch,
0346                                               Blend_SurfRstFunction& Func,
0347                                               Blend_FuncInv& FInv,
0348                                               Blend_SurfPointFuncInv& FInvP,
0349                                               Blend_SurfCurvFuncInv& FInvC,
0350                                               const Standard_Real PFirst,
0351                                               const Standard_Real MaxStep,
0352                                               const Standard_Real Fleche,
0353                                               const Standard_Real TolGuide,
0354                                               Standard_Real& First,
0355                                               Standard_Real& Last,
0356                                               const math_Vector& Soldep,
0357                                               const Standard_Integer NbSecMin,
0358                                               const Standard_Boolean Inside,
0359                                               const Standard_Boolean Appro,
0360                                               const Standard_Boolean Forward,
0361                                               const Standard_Boolean RecP,
0362                                               const Standard_Boolean RecS,
0363                                               const Standard_Boolean RecRst);
0364   
0365   Standard_EXPORT Standard_Boolean SimulData (Handle(ChFiDS_SurfData)& Data,
0366                                               const Handle(ChFiDS_ElSpine)& HGuide,
0367                                               Handle(BRepBlend_Line)& Lin,
0368                                               const Handle(Adaptor3d_Surface)& S1,
0369                                               const Handle(Adaptor2d_Curve2d)& PC1,
0370                                               const Handle(Adaptor3d_TopolTool)& I1,
0371                                               Standard_Boolean& Decroch1,
0372                                               const Handle(Adaptor3d_Surface)& S2,
0373                                               const Handle(Adaptor2d_Curve2d)& PC2,
0374                                               const Handle(Adaptor3d_TopolTool)& I2,
0375                                               Standard_Boolean& Decroch2,
0376                                               Blend_RstRstFunction& Func,
0377                                               Blend_SurfCurvFuncInv& FInv1,
0378                                               Blend_CurvPointFuncInv& FInvP1,
0379                                               Blend_SurfCurvFuncInv& FInv2,
0380                                               Blend_CurvPointFuncInv& FInvP2,
0381                                               const Standard_Real PFirst,
0382                                               const Standard_Real MaxStep,
0383                                               const Standard_Real Fleche,
0384                                               const Standard_Real TolGuide,
0385                                               Standard_Real& First,
0386                                               Standard_Real& Last,
0387                                               const math_Vector& Soldep,
0388                                               const Standard_Integer NbSecMin,
0389                                               const Standard_Boolean Inside,
0390                                               const Standard_Boolean Appro,
0391                                               const Standard_Boolean Forward,
0392                                               const Standard_Boolean RecP1,
0393                                               const Standard_Boolean RecRst1,
0394                                               const Standard_Boolean RecP2,
0395                                               const Standard_Boolean RecRst2);
0396   
0397   Standard_EXPORT virtual void SetRegul() = 0;
0398   
0399   Standard_EXPORT Standard_Boolean PerformElement (const Handle(ChFiDS_Spine)& CElement,
0400                                                    const Standard_Real         Offset,
0401                                                    const TopoDS_Face&          theFirstFace);
0402   
0403   Standard_EXPORT void PerformExtremity (const Handle(ChFiDS_Spine)& CElement);
0404   
0405   Standard_EXPORT void PerformSetOfSurf (Handle(ChFiDS_Stripe)& S,
0406                                          const Standard_Boolean Simul = Standard_False);
0407   
0408   Standard_EXPORT void PerformSetOfKPart (Handle(ChFiDS_Stripe)& S,
0409                                           const Standard_Boolean Simul = Standard_False);
0410   
0411   Standard_EXPORT void PerformSetOfKGen (Handle(ChFiDS_Stripe)& S,
0412                                          const Standard_Boolean Simul = Standard_False);
0413   
0414   Standard_EXPORT void Trunc (const Handle(ChFiDS_SurfData)& SD,
0415                               const Handle(ChFiDS_Spine)& Spine,
0416                               const Handle(Adaptor3d_Surface)& S1,
0417                               const Handle(Adaptor3d_Surface)& S2,
0418                               const Standard_Integer iedge,
0419                               const Standard_Boolean isfirst,
0420                               const Standard_Integer cntlFiOnS);
0421   
0422   Standard_EXPORT void CallPerformSurf (Handle(ChFiDS_Stripe)& Stripe,
0423                                         const Standard_Boolean Simul,
0424                                         ChFiDS_SequenceOfSurfData& SeqSD,
0425                                         Handle(ChFiDS_SurfData)& SD,
0426                                         const Handle(ChFiDS_ElSpine)& Guide,
0427                                         const Handle(ChFiDS_Spine)& Spine,
0428                                         const Handle(BRepAdaptor_Surface)& HS1,
0429                                         const Handle(BRepAdaptor_Surface)& HS3,
0430                                         const gp_Pnt2d& P1,
0431                                         const gp_Pnt2d& P3,
0432                                         const Handle(Adaptor3d_TopolTool)& I1,
0433                                         const Handle(BRepAdaptor_Surface)& HS2,
0434                                         const Handle(BRepAdaptor_Surface)& HS4,
0435                                         const gp_Pnt2d& P2, const gp_Pnt2d& P4,
0436                                         const Handle(Adaptor3d_TopolTool)& I2,
0437                                         const Standard_Real MaxStep,
0438                                         const Standard_Real Fleche,
0439                                         const Standard_Real TolGuide,
0440                                         Standard_Real& First,
0441                                         Standard_Real& Last,
0442                                         const Standard_Boolean Inside,
0443                                         const Standard_Boolean Appro,
0444                                         const Standard_Boolean Forward,
0445                                         const Standard_Boolean RecOnS1,
0446                                         const Standard_Boolean RecOnS2,
0447                                         math_Vector& Soldep,
0448                                         Standard_Integer& Intf,
0449                                         Standard_Integer& Intl,
0450                                         Handle(BRepAdaptor_Surface)& Surf1,
0451                                         Handle(BRepAdaptor_Surface)& Surf2);
0452   
0453   //! Method, implemented in the inheritants, calculating
0454   //! elements of construction of the surface (fillet or
0455   //! chamfer).
0456   Standard_EXPORT virtual Standard_Boolean PerformSurf (ChFiDS_SequenceOfSurfData& Data,
0457                                                         const Handle(ChFiDS_ElSpine)& Guide,
0458                                                         const Handle(ChFiDS_Spine)& Spine,
0459                                                         const Standard_Integer Choix,
0460                                                         const Handle(BRepAdaptor_Surface)& S1,
0461                                                         const Handle(Adaptor3d_TopolTool)& I1,
0462                                                         const Handle(BRepAdaptor_Surface)& S2,
0463                                                         const Handle(Adaptor3d_TopolTool)& I2,
0464                                                         const Standard_Real MaxStep,
0465                                                         const Standard_Real Fleche,
0466                                                         const Standard_Real TolGuide,
0467                                                         Standard_Real& First,
0468                                                         Standard_Real& Last,
0469                                                         const Standard_Boolean Inside,
0470                                                         const Standard_Boolean Appro,
0471                                                         const Standard_Boolean Forward,
0472                                                         const Standard_Boolean RecOnS1,
0473                                                         const Standard_Boolean RecOnS2,
0474                                                         const math_Vector& Soldep,
0475                                                         Standard_Integer& Intf,
0476                                                         Standard_Integer& Intl) = 0;
0477   
0478   //! Method, implemented  in inheritants, calculates
0479   //! the elements of construction of  the surface (fillet
0480   //! or chamfer) contact edge/face.
0481   Standard_EXPORT virtual void PerformSurf (ChFiDS_SequenceOfSurfData& Data,
0482                                             const Handle(ChFiDS_ElSpine)& Guide,
0483                                             const Handle(ChFiDS_Spine)& Spine,
0484                                             const Standard_Integer Choix,
0485                                             const Handle(BRepAdaptor_Surface)& S1,
0486                                             const Handle(Adaptor3d_TopolTool)& I1,
0487                                             const Handle(BRepAdaptor_Curve2d)& PC1,
0488                                             const Handle(BRepAdaptor_Surface)& Sref1,
0489                                             const Handle(BRepAdaptor_Curve2d)& PCref1,
0490                                             Standard_Boolean& Decroch1,
0491                                             const Handle(BRepAdaptor_Surface)& S2,
0492                                             const Handle(Adaptor3d_TopolTool)& I2,
0493                                             const TopAbs_Orientation Or2,
0494                                             const Standard_Real MaxStep,
0495                                             const Standard_Real Fleche,
0496                                             const Standard_Real TolGuide,
0497                                             Standard_Real& First,
0498                                             Standard_Real& Last,
0499                                             const Standard_Boolean Inside,
0500                                             const Standard_Boolean Appro,
0501                                             const Standard_Boolean Forward,
0502                                             const Standard_Boolean RecP,
0503                                             const Standard_Boolean RecS,
0504                                             const Standard_Boolean RecRst,
0505                                             const math_Vector& Soldep);
0506   
0507   //! Method, implemented in  inheritants, calculates
0508   //! the elements of construction of  the surface (fillet
0509   //! or chamfer) contact edge/face.
0510   Standard_EXPORT virtual void PerformSurf (ChFiDS_SequenceOfSurfData& Data,
0511                                             const Handle(ChFiDS_ElSpine)& Guide,
0512                                             const Handle(ChFiDS_Spine)& Spine,
0513                                             const Standard_Integer Choix,
0514                                             const Handle(BRepAdaptor_Surface)& S1,
0515                                             const Handle(Adaptor3d_TopolTool)& I1,
0516                                             const TopAbs_Orientation Or1,
0517                                             const Handle(BRepAdaptor_Surface)& S2,
0518                                             const Handle(Adaptor3d_TopolTool)& I2,
0519                                             const Handle(BRepAdaptor_Curve2d)& PC2,
0520                                             const Handle(BRepAdaptor_Surface)& Sref2,
0521                                             const Handle(BRepAdaptor_Curve2d)& PCref2,
0522                                             Standard_Boolean& Decroch2,
0523                                             const Standard_Real MaxStep,
0524                                             const Standard_Real Fleche,
0525                                             const Standard_Real TolGuide,
0526                                             Standard_Real& First,
0527                                             Standard_Real& Last,
0528                                             const Standard_Boolean Inside,
0529                                             const Standard_Boolean Appro,
0530                                             const Standard_Boolean Forward,
0531                                             const Standard_Boolean RecP,
0532                                             const Standard_Boolean RecS,
0533                                             const Standard_Boolean RecRst,
0534                                             const math_Vector& Soldep);
0535   
0536   //! Method, implemented in inheritants, calculates
0537   //! the elements of construction of  the surface (fillet
0538   //! or chamfer) contact edge/edge.
0539   Standard_EXPORT virtual void PerformSurf (ChFiDS_SequenceOfSurfData& Data,
0540                                             const Handle(ChFiDS_ElSpine)& Guide,
0541                                             const Handle(ChFiDS_Spine)& Spine,
0542                                             const Standard_Integer Choix,
0543                                             const Handle(BRepAdaptor_Surface)& S1,
0544                                             const Handle(Adaptor3d_TopolTool)& I1,
0545                                             const Handle(BRepAdaptor_Curve2d)& PC1,
0546                                             const Handle(BRepAdaptor_Surface)& Sref1,
0547                                             const Handle(BRepAdaptor_Curve2d)& PCref1,
0548                                             Standard_Boolean& Decroch1,
0549                                             const TopAbs_Orientation Or1,
0550                                             const Handle(BRepAdaptor_Surface)& S2,
0551                                             const Handle(Adaptor3d_TopolTool)& I2,
0552                                             const Handle(BRepAdaptor_Curve2d)& PC2,
0553                                             const Handle(BRepAdaptor_Surface)& Sref2,
0554                                             const Handle(BRepAdaptor_Curve2d)& PCref2,
0555                                             Standard_Boolean& Decroch2,
0556                                             const TopAbs_Orientation Or2,
0557                                             const Standard_Real MaxStep,
0558                                             const Standard_Real Fleche,
0559                                             const Standard_Real TolGuide,
0560                                             Standard_Real& First,
0561                                             Standard_Real& Last,
0562                                             const Standard_Boolean Inside,
0563                                             const Standard_Boolean Appro,
0564                                             const Standard_Boolean Forward,
0565                                             const Standard_Boolean RecP1,
0566                                             const Standard_Boolean RecRst1,
0567                                             const Standard_Boolean RecP2,
0568                                             const Standard_Boolean RecRst2,
0569                                             const math_Vector& Soldep);
0570   
0571   Standard_EXPORT virtual void PerformTwoCorner (const Standard_Integer Index) = 0;
0572   
0573   Standard_EXPORT virtual void PerformThreeCorner (const Standard_Integer Index) = 0;
0574   
0575   Standard_EXPORT void PerformMoreThreeCorner (const Standard_Integer Index,
0576                                                const Standard_Integer nbcourb);
0577   
0578   Standard_EXPORT virtual void ExtentOneCorner (const TopoDS_Vertex& V,
0579                                                 const Handle(ChFiDS_Stripe)& S) = 0;
0580   
0581   Standard_EXPORT virtual void ExtentTwoCorner (const TopoDS_Vertex& V,
0582                                                 const ChFiDS_ListOfStripe& LS) = 0;
0583   
0584   Standard_EXPORT virtual void ExtentThreeCorner (const TopoDS_Vertex& V,
0585                                                   const ChFiDS_ListOfStripe& LS) = 0;
0586   
0587   Standard_EXPORT virtual Standard_Boolean PerformFirstSection (const Handle(ChFiDS_Spine)& S,
0588                                                                 const Handle(ChFiDS_ElSpine)& HGuide,
0589                                                                 const Standard_Integer Choix,
0590                                                                 Handle(BRepAdaptor_Surface)& S1,
0591                                                                 Handle(BRepAdaptor_Surface)& S2,
0592                                                                 const Handle(Adaptor3d_TopolTool)& I1,
0593                                                                 const Handle(Adaptor3d_TopolTool)& I2,
0594                                                                 const Standard_Real Par,
0595                                                                 math_Vector& SolDep,
0596                                                                 TopAbs_State& Pos1,
0597                                                                 TopAbs_State& Pos2) const = 0;
0598   
0599   Standard_EXPORT Standard_Boolean SearchFace (const Handle(ChFiDS_Spine)& Sp,
0600                                                const ChFiDS_CommonPoint& Pc,
0601                                                const TopoDS_Face& FRef,
0602                                                TopoDS_Face& FVoi) const;
0603   
0604   Standard_EXPORT Standard_Boolean StripeOrientations (const Handle(ChFiDS_Spine)& Sp,
0605                                                        TopAbs_Orientation& Or1,
0606                                                        TopAbs_Orientation& Or2,
0607                                                        Standard_Integer& ChoixConge) const;
0608   
0609   //! Calculates  a Line of contact face/face.
0610   Standard_EXPORT Standard_Boolean ComputeData (Handle(ChFiDS_SurfData)& Data,
0611                                                 const Handle(ChFiDS_ElSpine)& Guide,
0612                                                 const Handle(ChFiDS_Spine)& Spine,
0613                                                 Handle(BRepBlend_Line)& Lin,
0614                                                 const Handle(Adaptor3d_Surface)& S1,
0615                                                 const Handle(Adaptor3d_TopolTool)& I1,
0616                                                 const Handle(Adaptor3d_Surface)& S2,
0617                                                 const Handle(Adaptor3d_TopolTool)& I2,
0618                                                 Blend_Function& Func,
0619                                                 Blend_FuncInv& FInv,
0620                                                 const Standard_Real PFirst,
0621                                                 const Standard_Real MaxStep,
0622                                                 const Standard_Real Fleche,
0623                                                 const Standard_Real TolGuide,
0624                                                 Standard_Real& First,
0625                                                 Standard_Real& Last,
0626                                                 const Standard_Boolean Inside,
0627                                                 const Standard_Boolean Appro,
0628                                                 const Standard_Boolean Forward,
0629                                                 const math_Vector& Soldep,
0630                                                 Standard_Integer& Intf,
0631                                                 Standard_Integer& Intl,
0632                                                 Standard_Boolean& Gd1,
0633                                                 Standard_Boolean& Gd2,
0634                                                 Standard_Boolean& Gf1,
0635                                                 Standard_Boolean& Gf2,
0636                                                 const Standard_Boolean RecOnS1 = Standard_False,
0637                                                 const Standard_Boolean RecOnS2 = Standard_False);
0638   
0639   //! Calculates a Line of contact edge/face.
0640   Standard_EXPORT Standard_Boolean ComputeData (Handle(ChFiDS_SurfData)& Data,
0641                                                 const Handle(ChFiDS_ElSpine)& HGuide,
0642                                                 Handle(BRepBlend_Line)& Lin,
0643                                                 const Handle(Adaptor3d_Surface)& S1,
0644                                                 const Handle(Adaptor3d_TopolTool)& I1,
0645                                                 const Handle(Adaptor3d_Surface)& S2,
0646                                                 const Handle(Adaptor2d_Curve2d)& PC2,
0647                                                 const Handle(Adaptor3d_TopolTool)& I2,
0648                                                 Standard_Boolean& Decroch,
0649                                                 Blend_SurfRstFunction& Func,
0650                                                 Blend_FuncInv& FInv,
0651                                                 Blend_SurfPointFuncInv& FInvP,
0652                                                 Blend_SurfCurvFuncInv& FInvC,
0653                                                 const Standard_Real PFirst,
0654                                                 const Standard_Real MaxStep,
0655                                                 const Standard_Real Fleche,
0656                                                 const Standard_Real TolGuide,
0657                                                 Standard_Real& First,
0658                                                 Standard_Real& Last,
0659                                                 const math_Vector& Soldep,
0660                                                 const Standard_Boolean Inside,
0661                                                 const Standard_Boolean Appro,
0662                                                 const Standard_Boolean Forward,
0663                                                 const Standard_Boolean RecP,
0664                                                 const Standard_Boolean RecS,
0665                                                 const Standard_Boolean RecRst);
0666   
0667   //! Calculates a Line of contact edge/edge.
0668   Standard_EXPORT Standard_Boolean ComputeData (Handle(ChFiDS_SurfData)& Data,
0669                                                 const Handle(ChFiDS_ElSpine)& HGuide,
0670                                                 Handle(BRepBlend_Line)& Lin,
0671                                                 const Handle(Adaptor3d_Surface)& S1,
0672                                                 const Handle(Adaptor2d_Curve2d)& PC1,
0673                                                 const Handle(Adaptor3d_TopolTool)& I1,
0674                                                 Standard_Boolean& Decroch1,
0675                                                 const Handle(Adaptor3d_Surface)& S2,
0676                                                 const Handle(Adaptor2d_Curve2d)& PC2,
0677                                                 const Handle(Adaptor3d_TopolTool)& I2,
0678                                                 Standard_Boolean& Decroch2,
0679                                                 Blend_RstRstFunction& Func,
0680                                                 Blend_SurfCurvFuncInv& FInv1,
0681                                                 Blend_CurvPointFuncInv& FInvP1,
0682                                                 Blend_SurfCurvFuncInv& FInv2,
0683                                                 Blend_CurvPointFuncInv& FInvP2,
0684                                                 const Standard_Real PFirst,
0685                                                 const Standard_Real MaxStep,
0686                                                 const Standard_Real Fleche,
0687                                                 const Standard_Real TolGuide,
0688                                                 Standard_Real& First,
0689                                                 Standard_Real& Last,
0690                                                 const math_Vector& Soldep,
0691                                                 const Standard_Boolean Inside,
0692                                                 const Standard_Boolean Appro,
0693                                                 const Standard_Boolean Forward,
0694                                                 const Standard_Boolean RecP1,
0695                                                 const Standard_Boolean RecRst1,
0696                                                 const Standard_Boolean RecP2,
0697                                                 const Standard_Boolean RecRst2);
0698   
0699   Standard_EXPORT Standard_Boolean CompleteData (Handle(ChFiDS_SurfData)& Data,
0700                                                  Blend_Function& Func,
0701                                                  Handle(BRepBlend_Line)& Lin,
0702                                                  const Handle(Adaptor3d_Surface)& S1,
0703                                                  const Handle(Adaptor3d_Surface)& S2,
0704                                                  const TopAbs_Orientation Or1,
0705                                                  const Standard_Boolean Gd1,
0706                                                  const Standard_Boolean Gd2,
0707                                                  const Standard_Boolean Gf1,
0708                                                  const Standard_Boolean Gf2,
0709                                                  const Standard_Boolean Reversed = Standard_False);
0710   
0711   Standard_EXPORT Standard_Boolean CompleteData (Handle(ChFiDS_SurfData)& Data,
0712                                                  Blend_SurfRstFunction& Func,
0713                                                  Handle(BRepBlend_Line)& Lin,
0714                                                  const Handle(Adaptor3d_Surface)& S1,
0715                                                  const Handle(Adaptor3d_Surface)& S2,
0716                                                  const TopAbs_Orientation Or,
0717                                                  const Standard_Boolean Reversed);
0718   
0719   Standard_EXPORT Standard_Boolean CompleteData (Handle(ChFiDS_SurfData)& Data,
0720                                                  Blend_RstRstFunction& Func,
0721                                                  Handle(BRepBlend_Line)& Lin,
0722                                                  const Handle(Adaptor3d_Surface)& S1,
0723                                                  const Handle(Adaptor3d_Surface)& S2,
0724                                                  const TopAbs_Orientation Or);
0725   
0726   Standard_EXPORT Standard_Boolean StoreData (Handle(ChFiDS_SurfData)& Data,
0727                                               const AppBlend_Approx& Approx,
0728                                               const Handle(BRepBlend_Line)& Lin,
0729                                               const Handle(Adaptor3d_Surface)& S1,
0730                                               const Handle(Adaptor3d_Surface)& S2,
0731                                               const TopAbs_Orientation Or1,
0732                                               const Standard_Boolean Gd1,
0733                                               const Standard_Boolean Gd2,
0734                                               const Standard_Boolean Gf1,
0735                                               const Standard_Boolean Gf2,
0736                                               const Standard_Boolean Reversed = Standard_False);
0737   
0738   Standard_EXPORT Standard_Boolean CompleteData (Handle(ChFiDS_SurfData)& Data,
0739                                                  const Handle(Geom_Surface)& Surfcoin,
0740                                                  const Handle(Adaptor3d_Surface)& S1,
0741                                                  const Handle(Geom2d_Curve)& PC1,
0742                                                  const Handle(Adaptor3d_Surface)& S2,
0743                                                  const Handle(Geom2d_Curve)& PC2,
0744                                                  const TopAbs_Orientation Or,
0745                                                  const Standard_Boolean On1,
0746                                                  const Standard_Boolean Gd1,
0747                                                  const Standard_Boolean Gd2,
0748                                                  const Standard_Boolean Gf1,
0749                                                  const Standard_Boolean Gf2);
0750 
0751 
0752   Standard_Real tolappangle;
0753   Standard_Real tolesp;
0754   Standard_Real tol2d;
0755   Standard_Real tolapp3d;
0756   Standard_Real tolapp2d;
0757   Standard_Real fleche;
0758   GeomAbs_Shape myConti;
0759   ChFiDS_Map myEFMap;
0760   ChFiDS_Map myESoMap;
0761   ChFiDS_Map myEShMap;
0762   ChFiDS_Map myVFMap;
0763   ChFiDS_Map myVEMap;
0764   Handle(TopOpeBRepDS_HDataStructure) myDS;
0765   Handle(TopOpeBRepBuild_HBuilder) myCoup;
0766   ChFiDS_ListOfStripe myListStripe;
0767   ChFiDS_StripeMap myVDataMap;
0768   ChFiDS_Regularities myRegul;
0769   ChFiDS_ListOfStripe badstripes;
0770   TopTools_ListOfShape badvertices;
0771   TopTools_DataMapOfShapeListOfInteger myEVIMap;
0772   TopTools_DataMapOfShapeShape myEdgeFirstFace;
0773   Standard_Boolean done;
0774   Standard_Boolean hasresult;
0775 
0776 
0777 private:
0778 
0779   
0780   Standard_EXPORT Standard_Boolean FaceTangency (const TopoDS_Edge& E0,
0781                                                  const TopoDS_Edge& E1,
0782                                                  const TopoDS_Vertex& V) const;
0783   
0784   Standard_EXPORT void PerformSetOfSurfOnElSpine (const Handle(ChFiDS_ElSpine)& ES,
0785                                                   Handle(ChFiDS_Stripe)& St,
0786                                                   Handle(BRepTopAdaptor_TopolTool)& It1,
0787                                                   Handle(BRepTopAdaptor_TopolTool)& It2,
0788                                                   const Standard_Boolean Simul = Standard_False);
0789   
0790   Standard_EXPORT void PerformFilletOnVertex (const Standard_Integer Index);
0791   
0792   Standard_EXPORT void PerformSingularCorner (const Standard_Integer Index);
0793   
0794   Standard_EXPORT void PerformOneCorner (const Standard_Integer Index,
0795                                          const Standard_Boolean PrepareOnSame = Standard_False);
0796   
0797   Standard_EXPORT void IntersectMoreCorner (const Standard_Integer Index);
0798   
0799   Standard_EXPORT void PerformMoreSurfdata (const Standard_Integer Index);
0800   
0801   Standard_EXPORT void PerformIntersectionAtEnd (const Standard_Integer Index);
0802   
0803   Standard_EXPORT void ExtentAnalyse();
0804   
0805   Standard_EXPORT Standard_Boolean FindFace (const TopoDS_Vertex& V,
0806                                              const ChFiDS_CommonPoint& P1,
0807                                              const ChFiDS_CommonPoint& P2,
0808                                              TopoDS_Face& Fv) const;
0809   
0810   Standard_EXPORT Standard_Boolean FindFace (const TopoDS_Vertex& V,
0811                                              const ChFiDS_CommonPoint& P1,
0812                                              const ChFiDS_CommonPoint& P2,
0813                                              TopoDS_Face& Fv,
0814                                              const TopoDS_Face& Favoid) const;
0815   
0816   Standard_EXPORT Standard_Boolean MoreSurfdata (const Standard_Integer Index) const;
0817   
0818   Standard_EXPORT Standard_Boolean StartSol (const Handle(ChFiDS_Spine)& Spine,
0819                                              Handle(BRepAdaptor_Surface)& HS,
0820                                              gp_Pnt2d& P,
0821                                              Handle(BRepAdaptor_Curve2d)& HC,
0822                                              Standard_Real& W,
0823                                              const Handle(ChFiDS_SurfData)& SD,
0824                                              const Standard_Boolean isFirst,
0825                                              const Standard_Integer OnS,
0826                                              Handle(BRepAdaptor_Surface)& HSref,
0827                                              Handle(BRepAdaptor_Curve2d)& HCref,
0828                                              Standard_Boolean& RecP,
0829                                              Standard_Boolean& RecS,
0830                                              Standard_Boolean& RecRst,
0831                                              Standard_Boolean& C1Obst,
0832                                              Handle(BRepAdaptor_Surface)& HSbis,
0833                                              gp_Pnt2d& Pbis,
0834                                              const Standard_Boolean Decroch,
0835                                              const TopoDS_Vertex& Vref) const;
0836   
0837   Standard_EXPORT void StartSol (const Handle(ChFiDS_Stripe)& S,
0838                                  const Handle(ChFiDS_ElSpine)& HGuide,
0839                                  Handle(BRepAdaptor_Surface)& HS1,
0840                                  Handle(BRepAdaptor_Surface)& HS2,
0841                                  Handle(BRepTopAdaptor_TopolTool)& I1,
0842                                  Handle(BRepTopAdaptor_TopolTool)& I2,
0843                                  gp_Pnt2d& P1,
0844                                  gp_Pnt2d& P2,
0845                                  Standard_Real& First) const;
0846   
0847   Standard_EXPORT void ConexFaces (const Handle(ChFiDS_Spine)& Sp,
0848                                    const Standard_Integer IEdge,
0849                                    Handle(BRepAdaptor_Surface)& HS1,
0850                                    Handle(BRepAdaptor_Surface)& HS2) const;
0851 
0852   //! Assign to tolesp parameter minimal value of spine's tolesp if it is less
0853   //! than default initial value.
0854   Standard_EXPORT void UpdateTolesp();
0855 
0856 
0857   TopoDS_Shape myShape;
0858   Standard_Real angular;
0859   TopTools_ListOfShape myGenerated;
0860   TopoDS_Shape myShapeResult;
0861   TopoDS_Shape badShape;
0862 
0863 
0864 };
0865 
0866 
0867 
0868 
0869 
0870 
0871 
0872 #endif // _ChFi3d_Builder_HeaderFile