Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2026-06-14 08:28:34

0001 // Created on: 1997-07-28
0002 // Created by: Jerome LEMONIER
0003 // Copyright (c) 1997-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 _BRepBlend_SurfRstEvolRad_HeaderFile
0018 #define _BRepBlend_SurfRstEvolRad_HeaderFile
0019 
0020 #include <Adaptor3d_CurveOnSurface.hxx>
0021 #include <Adaptor3d_Surface.hxx>
0022 #include <gp_Pnt.hxx>
0023 #include <gp_Pnt2d.hxx>
0024 #include <gp_Vec.hxx>
0025 #include <gp_Vec2d.hxx>
0026 #include <BlendFunc_SectionShape.hxx>
0027 #include <Convert_ParameterisationType.hxx>
0028 #include <Blend_SurfRstFunction.hxx>
0029 #include <math_Vector.hxx>
0030 #include <TColStd_Array1OfReal.hxx>
0031 #include <GeomAbs_Shape.hxx>
0032 #include <TColStd_Array1OfInteger.hxx>
0033 #include <TColgp_Array1OfPnt.hxx>
0034 #include <TColgp_Array1OfVec.hxx>
0035 #include <TColgp_Array1OfPnt2d.hxx>
0036 #include <TColgp_Array1OfVec2d.hxx>
0037 
0038 class Law_Function;
0039 class math_Matrix;
0040 class gp_Circ;
0041 class Blend_Point;
0042 
0043 //! Function  to approximate by AppSurface  for
0044 //! Edge/Face  and  evolutif  radius
0045 class BRepBlend_SurfRstEvolRad : public Blend_SurfRstFunction
0046 {
0047 public:
0048   DEFINE_STANDARD_ALLOC
0049 
0050   Standard_EXPORT BRepBlend_SurfRstEvolRad(const Handle(Adaptor3d_Surface)& Surf,
0051                                            const Handle(Adaptor3d_Surface)& SurfRst,
0052                                            const Handle(Adaptor2d_Curve2d)& Rst,
0053                                            const Handle(Adaptor3d_Curve)&   CGuide,
0054                                            const Handle(Law_Function)&      Evol);
0055 
0056   //! Returns 3.
0057   Standard_EXPORT Standard_Integer NbVariables() const Standard_OVERRIDE;
0058 
0059   //! Returns 3.
0060   Standard_EXPORT Standard_Integer NbEquations() const Standard_OVERRIDE;
0061 
0062   //! computes the values <F> of the Functions for the
0063   //! variable <X>.
0064   //! Returns True if the computation was done successfully,
0065   //! False otherwise.
0066   Standard_EXPORT Standard_Boolean Value(const math_Vector& X, math_Vector& F) Standard_OVERRIDE;
0067 
0068   //! returns the values <D> of the derivatives for the
0069   //! variable <X>.
0070   //! Returns True if the computation was done successfully,
0071   //! False otherwise.
0072   Standard_EXPORT Standard_Boolean Derivatives(const math_Vector& X,
0073                                                math_Matrix&       D) Standard_OVERRIDE;
0074 
0075   //! returns the values <F> of the functions and the derivatives
0076   //! <D> for the variable <X>.
0077   //! Returns True if the computation was done successfully,
0078   //! False otherwise.
0079   Standard_EXPORT Standard_Boolean Values(const math_Vector& X,
0080                                           math_Vector&       F,
0081                                           math_Matrix&       D) Standard_OVERRIDE;
0082 
0083   Standard_EXPORT void Set(const Handle(Adaptor3d_Surface)& SurfRef,
0084                            const Handle(Adaptor2d_Curve2d)& RstRef);
0085 
0086   Standard_EXPORT void Set(const Standard_Real Param) Standard_OVERRIDE;
0087 
0088   //! Sets the bounds of the parametric interval on
0089   //! the guide line.
0090   //! This determines the derivatives in these values if the
0091   //! function is not Cn.
0092   Standard_EXPORT void Set(const Standard_Real First, const Standard_Real Last) Standard_OVERRIDE;
0093 
0094   Standard_EXPORT void GetTolerance(math_Vector&        Tolerance,
0095                                     const Standard_Real Tol) const Standard_OVERRIDE;
0096 
0097   Standard_EXPORT void GetBounds(math_Vector& InfBound,
0098                                  math_Vector& SupBound) const Standard_OVERRIDE;
0099 
0100   Standard_EXPORT Standard_Boolean IsSolution(const math_Vector&  Sol,
0101                                               const Standard_Real Tol) Standard_OVERRIDE;
0102 
0103   //! Returns   the    minimal  Distance  between   two
0104   //! extremities of calculated sections.
0105   Standard_EXPORT virtual Standard_Real GetMinimalDistance() const Standard_OVERRIDE;
0106 
0107   Standard_EXPORT const gp_Pnt& PointOnS() const Standard_OVERRIDE;
0108 
0109   Standard_EXPORT const gp_Pnt& PointOnRst() const Standard_OVERRIDE;
0110 
0111   //! Returns U,V coordinates of the point on the surface.
0112   Standard_EXPORT const gp_Pnt2d& Pnt2dOnS() const Standard_OVERRIDE;
0113 
0114   //! Returns  U,V coordinates of the point  on the curve on
0115   //! surface.
0116   Standard_EXPORT const gp_Pnt2d& Pnt2dOnRst() const Standard_OVERRIDE;
0117 
0118   //! Returns parameter of the point on the curve.
0119   Standard_EXPORT Standard_Real ParameterOnRst() const Standard_OVERRIDE;
0120 
0121   Standard_EXPORT Standard_Boolean IsTangencyPoint() const Standard_OVERRIDE;
0122 
0123   Standard_EXPORT const gp_Vec& TangentOnS() const Standard_OVERRIDE;
0124 
0125   Standard_EXPORT const gp_Vec2d& Tangent2dOnS() const Standard_OVERRIDE;
0126 
0127   Standard_EXPORT const gp_Vec& TangentOnRst() const Standard_OVERRIDE;
0128 
0129   Standard_EXPORT const gp_Vec2d& Tangent2dOnRst() const Standard_OVERRIDE;
0130 
0131   //! Permet  d ' implementer   un   critere  de  decrochage
0132   //! specifique a la fonction.
0133   Standard_EXPORT Standard_Boolean Decroch(const math_Vector& Sol,
0134                                            gp_Vec&            NS,
0135                                            gp_Vec&            TgS) const Standard_OVERRIDE;
0136 
0137   Standard_EXPORT void Set(const Standard_Integer Choix);
0138 
0139   //! Sets  the  type  of   section generation   for the
0140   //! approximations.
0141   Standard_EXPORT void Set(const BlendFunc_SectionShape TypeSection);
0142 
0143   Standard_EXPORT void Section(const Standard_Real Param,
0144                                const Standard_Real U,
0145                                const Standard_Real V,
0146                                const Standard_Real W,
0147                                Standard_Real&      Pdeb,
0148                                Standard_Real&      Pfin,
0149                                gp_Circ&            C);
0150 
0151   //! Returns  if the section is rational
0152   Standard_EXPORT Standard_Boolean IsRational() const Standard_OVERRIDE;
0153 
0154   //! Returns the length of the maximum section
0155   Standard_EXPORT Standard_Real GetSectionSize() const Standard_OVERRIDE;
0156 
0157   //! Compute the minimal value of weight for each poles
0158   //! of all sections.
0159   Standard_EXPORT void GetMinimalWeight(TColStd_Array1OfReal& Weigths) const Standard_OVERRIDE;
0160 
0161   //! Returns  the number  of  intervals for  continuity
0162   //! <S>. May be one if Continuity(me) >= <S>
0163   Standard_EXPORT Standard_Integer NbIntervals(const GeomAbs_Shape S) const Standard_OVERRIDE;
0164 
0165   //! Stores in <T> the  parameters bounding the intervals
0166   //! of continuity <S>.
0167   //! The array must provide  enough room to  accommodate
0168   //! for the parameters. i.e. T.Length() > NbIntervals()
0169   Standard_EXPORT void Intervals(TColStd_Array1OfReal& T,
0170                                  const GeomAbs_Shape   S) const Standard_OVERRIDE;
0171 
0172   Standard_EXPORT void GetShape(Standard_Integer& NbPoles,
0173                                 Standard_Integer& NbKnots,
0174                                 Standard_Integer& Degree,
0175                                 Standard_Integer& NbPoles2d) Standard_OVERRIDE;
0176 
0177   //! Returns the tolerance to reach in approximation
0178   //! to respect
0179   //! BoundTol error at the Boundary
0180   //! AngleTol tangent error at the Boundary
0181   //! SurfTol error inside the surface.
0182   Standard_EXPORT void GetTolerance(const Standard_Real BoundTol,
0183                                     const Standard_Real SurfTol,
0184                                     const Standard_Real AngleTol,
0185                                     math_Vector&        Tol3d,
0186                                     math_Vector&        Tol1D) const Standard_OVERRIDE;
0187 
0188   Standard_EXPORT void Knots(TColStd_Array1OfReal& TKnots) Standard_OVERRIDE;
0189 
0190   Standard_EXPORT void Mults(TColStd_Array1OfInteger& TMults) Standard_OVERRIDE;
0191 
0192   //! Used for the first and last section
0193   Standard_EXPORT Standard_Boolean Section(const Blend_Point&    P,
0194                                            TColgp_Array1OfPnt&   Poles,
0195                                            TColgp_Array1OfVec&   DPoles,
0196                                            TColgp_Array1OfPnt2d& Poles2d,
0197                                            TColgp_Array1OfVec2d& DPoles2d,
0198                                            TColStd_Array1OfReal& Weigths,
0199                                            TColStd_Array1OfReal& DWeigths) Standard_OVERRIDE;
0200 
0201   //! Used for the first and last section
0202   //! The method returns Standard_True if the derivatives
0203   //! are computed, otherwise it returns Standard_False.
0204   Standard_EXPORT Standard_Boolean Section(const Blend_Point&    P,
0205                                            TColgp_Array1OfPnt&   Poles,
0206                                            TColgp_Array1OfVec&   DPoles,
0207                                            TColgp_Array1OfVec&   D2Poles,
0208                                            TColgp_Array1OfPnt2d& Poles2d,
0209                                            TColgp_Array1OfVec2d& DPoles2d,
0210                                            TColgp_Array1OfVec2d& D2Poles2d,
0211                                            TColStd_Array1OfReal& Weigths,
0212                                            TColStd_Array1OfReal& DWeigths,
0213                                            TColStd_Array1OfReal& D2Weigths) Standard_OVERRIDE;
0214 
0215   Standard_EXPORT void Section(const Blend_Point&    P,
0216                                TColgp_Array1OfPnt&   Poles,
0217                                TColgp_Array1OfPnt2d& Poles2d,
0218                                TColStd_Array1OfReal& Weigths) Standard_OVERRIDE;
0219 
0220   Standard_EXPORT void Resolution(const Standard_Integer IC2d,
0221                                   const Standard_Real    Tol,
0222                                   Standard_Real&         TolU,
0223                                   Standard_Real&         TolV) const Standard_OVERRIDE;
0224 
0225 protected:
0226 private:
0227   Handle(Adaptor3d_Surface)    surf;
0228   Handle(Adaptor3d_Surface)    surfrst;
0229   Handle(Adaptor2d_Curve2d)    rst;
0230   Adaptor3d_CurveOnSurface     cons;
0231   Handle(Adaptor3d_Curve)      guide;
0232   Handle(Adaptor3d_Curve)      tguide;
0233   gp_Pnt                       pts;
0234   gp_Pnt                       ptrst;
0235   gp_Pnt2d                     pt2ds;
0236   gp_Pnt2d                     pt2drst;
0237   Standard_Real                prmrst;
0238   Standard_Boolean             istangent;
0239   gp_Vec                       tgs;
0240   gp_Vec2d                     tg2ds;
0241   gp_Vec                       tgrst;
0242   gp_Vec2d                     tg2drst;
0243   Standard_Real                ray;
0244   Standard_Real                dray;
0245   Standard_Integer             choix;
0246   gp_Pnt                       ptgui;
0247   gp_Vec                       d1gui;
0248   gp_Vec                       d2gui;
0249   gp_Vec                       nplan;
0250   Standard_Real                normtg;
0251   Standard_Real                theD;
0252   Handle(Adaptor3d_Surface)    surfref;
0253   Handle(Adaptor2d_Curve2d)    rstref;
0254   Standard_Real                maxang;
0255   Standard_Real                minang;
0256   Standard_Real                distmin;
0257   BlendFunc_SectionShape       mySShape;
0258   Convert_ParameterisationType myTConv;
0259   Handle(Law_Function)         tevol;
0260   Handle(Law_Function)         fevol;
0261   Standard_Real                sg1;
0262 };
0263 
0264 #endif // _BRepBlend_SurfRstEvolRad_HeaderFile