Back to home page

EIC code displayed by LXR

 
 

    


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

0001 // Created on: 1993-12-02
0002 // Created by: Jacques GOUSSARD
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 _BlendFunc_Ruled_HeaderFile
0018 #define _BlendFunc_Ruled_HeaderFile
0019 
0020 #include <Adaptor3d_Surface.hxx>
0021 #include <gp_Pnt.hxx>
0022 #include <gp_Vec.hxx>
0023 #include <gp_Vec2d.hxx>
0024 #include <Blend_Function.hxx>
0025 #include <math_Vector.hxx>
0026 #include <TColgp_Array1OfPnt.hxx>
0027 #include <TColgp_Array1OfVec.hxx>
0028 #include <TColStd_Array1OfReal.hxx>
0029 #include <GeomAbs_Shape.hxx>
0030 #include <TColStd_Array1OfInteger.hxx>
0031 #include <TColgp_Array1OfPnt2d.hxx>
0032 #include <TColgp_Array1OfVec2d.hxx>
0033 
0034 class math_Matrix;
0035 class Blend_Point;
0036 class gp_Ax1;
0037 
0038 class BlendFunc_Ruled : public Blend_Function
0039 {
0040 public:
0041   DEFINE_STANDARD_ALLOC
0042 
0043   Standard_EXPORT BlendFunc_Ruled(const Handle(Adaptor3d_Surface)& S1,
0044                                   const Handle(Adaptor3d_Surface)& S2,
0045                                   const Handle(Adaptor3d_Curve)&   C);
0046 
0047   //! returns the number of equations of the function.
0048   Standard_EXPORT Standard_Integer NbEquations() const Standard_OVERRIDE;
0049 
0050   //! computes the values <F> of the Functions for the
0051   //! variable <X>.
0052   //! Returns True if the computation was done successfully,
0053   //! False otherwise.
0054   Standard_EXPORT Standard_Boolean Value(const math_Vector& X, math_Vector& F) Standard_OVERRIDE;
0055 
0056   //! returns the values <D> of the derivatives for the
0057   //! variable <X>.
0058   //! Returns True if the computation was done successfully,
0059   //! False otherwise.
0060   Standard_EXPORT Standard_Boolean Derivatives(const math_Vector& X,
0061                                                math_Matrix&       D) Standard_OVERRIDE;
0062 
0063   //! returns the values <F> of the functions and the derivatives
0064   //! <D> for the variable <X>.
0065   //! Returns True if the computation was done successfully,
0066   //! False otherwise.
0067   Standard_EXPORT Standard_Boolean Values(const math_Vector& X,
0068                                           math_Vector&       F,
0069                                           math_Matrix&       D) Standard_OVERRIDE;
0070 
0071   Standard_EXPORT void Set(const Standard_Real Param) Standard_OVERRIDE;
0072 
0073   Standard_EXPORT void Set(const Standard_Real First, const Standard_Real Last) Standard_OVERRIDE;
0074 
0075   Standard_EXPORT void GetTolerance(math_Vector&        Tolerance,
0076                                     const Standard_Real Tol) const Standard_OVERRIDE;
0077 
0078   Standard_EXPORT void GetBounds(math_Vector& InfBound,
0079                                  math_Vector& SupBound) const Standard_OVERRIDE;
0080 
0081   Standard_EXPORT Standard_Boolean IsSolution(const math_Vector&  Sol,
0082                                               const Standard_Real Tol) Standard_OVERRIDE;
0083 
0084   //! Returns   the    minimal  Distance  between   two
0085   //! extremities of calculated sections.
0086   Standard_EXPORT Standard_Real GetMinimalDistance() const Standard_OVERRIDE;
0087 
0088   Standard_EXPORT const gp_Pnt& PointOnS1() const Standard_OVERRIDE;
0089 
0090   Standard_EXPORT const gp_Pnt& PointOnS2() const Standard_OVERRIDE;
0091 
0092   Standard_EXPORT Standard_Boolean IsTangencyPoint() const Standard_OVERRIDE;
0093 
0094   Standard_EXPORT const gp_Vec& TangentOnS1() const Standard_OVERRIDE;
0095 
0096   Standard_EXPORT const gp_Vec2d& Tangent2dOnS1() const Standard_OVERRIDE;
0097 
0098   Standard_EXPORT const gp_Vec& TangentOnS2() const Standard_OVERRIDE;
0099 
0100   Standard_EXPORT const gp_Vec2d& Tangent2dOnS2() const Standard_OVERRIDE;
0101 
0102   //! Returns the tangent vector at the section,
0103   //! at the beginning and the end of the section, and
0104   //! returns the normal (of the surfaces) at
0105   //! these points.
0106   Standard_EXPORT void Tangent(const Standard_Real U1,
0107                                const Standard_Real V1,
0108                                const Standard_Real U2,
0109                                const Standard_Real V2,
0110                                gp_Vec&             TgFirst,
0111                                gp_Vec&             TgLast,
0112                                gp_Vec&             NormFirst,
0113                                gp_Vec&             NormLast) const Standard_OVERRIDE;
0114 
0115   Standard_EXPORT Standard_Boolean GetSection(const Standard_Real Param,
0116                                               const Standard_Real U1,
0117                                               const Standard_Real V1,
0118                                               const Standard_Real U2,
0119                                               const Standard_Real V2,
0120                                               TColgp_Array1OfPnt& tabP,
0121                                               TColgp_Array1OfVec& tabV);
0122 
0123   //! Returns False
0124   Standard_EXPORT Standard_Boolean IsRational() const Standard_OVERRIDE;
0125 
0126   //! Returns the length of the maximum section
0127   Standard_EXPORT Standard_Real GetSectionSize() const Standard_OVERRIDE;
0128 
0129   //! Compute the minimal value of weight for each poles
0130   //! of all sections.
0131   Standard_EXPORT void GetMinimalWeight(TColStd_Array1OfReal& Weigths) const Standard_OVERRIDE;
0132 
0133   //! Returns  the number  of  intervals for  continuity
0134   //! <S>. May be one if Continuity(me) >= <S>
0135   Standard_EXPORT Standard_Integer NbIntervals(const GeomAbs_Shape S) const Standard_OVERRIDE;
0136 
0137   //! Stores in <T> the  parameters bounding the intervals
0138   //! of continuity <S>.
0139   //!
0140   //! The array must provide  enough room to  accommodate
0141   //! for the parameters. i.e. T.Length() > NbIntervals()
0142   //! raises
0143   //! OutOfRange from Standard
0144   Standard_EXPORT void Intervals(TColStd_Array1OfReal& T,
0145                                  const GeomAbs_Shape   S) const Standard_OVERRIDE;
0146 
0147   Standard_EXPORT void GetShape(Standard_Integer& NbPoles,
0148                                 Standard_Integer& NbKnots,
0149                                 Standard_Integer& Degree,
0150                                 Standard_Integer& NbPoles2d) Standard_OVERRIDE;
0151 
0152   //! Returns the tolerance to reach in approximation
0153   //! to respect
0154   //! BoundTol error at the Boundary
0155   //! AngleTol tangent error at the Boundary
0156   //! SurfTol error inside the surface.
0157   Standard_EXPORT void GetTolerance(const Standard_Real BoundTol,
0158                                     const Standard_Real SurfTol,
0159                                     const Standard_Real AngleTol,
0160                                     math_Vector&        Tol3d,
0161                                     math_Vector&        Tol1D) const Standard_OVERRIDE;
0162 
0163   Standard_EXPORT void Knots(TColStd_Array1OfReal& TKnots) Standard_OVERRIDE;
0164 
0165   Standard_EXPORT void Mults(TColStd_Array1OfInteger& TMults) Standard_OVERRIDE;
0166 
0167   //! Used for the first and last section
0168   Standard_EXPORT Standard_Boolean Section(const Blend_Point&    P,
0169                                            TColgp_Array1OfPnt&   Poles,
0170                                            TColgp_Array1OfVec&   DPoles,
0171                                            TColgp_Array1OfVec&   D2Poles,
0172                                            TColgp_Array1OfPnt2d& Poles2d,
0173                                            TColgp_Array1OfVec2d& DPoles2d,
0174                                            TColgp_Array1OfVec2d& D2Poles2d,
0175                                            TColStd_Array1OfReal& Weigths,
0176                                            TColStd_Array1OfReal& DWeigths,
0177                                            TColStd_Array1OfReal& D2Weigths) Standard_OVERRIDE;
0178 
0179   //! Used for the first and last section
0180   Standard_EXPORT Standard_Boolean Section(const Blend_Point&    P,
0181                                            TColgp_Array1OfPnt&   Poles,
0182                                            TColgp_Array1OfVec&   DPoles,
0183                                            TColgp_Array1OfPnt2d& Poles2d,
0184                                            TColgp_Array1OfVec2d& DPoles2d,
0185                                            TColStd_Array1OfReal& Weigths,
0186                                            TColStd_Array1OfReal& DWeigths) Standard_OVERRIDE;
0187 
0188   Standard_EXPORT void Section(const Blend_Point&    P,
0189                                TColgp_Array1OfPnt&   Poles,
0190                                TColgp_Array1OfPnt2d& Poles2d,
0191                                TColStd_Array1OfReal& Weigths) Standard_OVERRIDE;
0192 
0193   Standard_EXPORT gp_Ax1 AxeRot(const Standard_Real Prm);
0194 
0195   Standard_EXPORT void Resolution(const Standard_Integer IC2d,
0196                                   const Standard_Real    Tol,
0197                                   Standard_Real&         TolU,
0198                                   Standard_Real&         TolV) const Standard_OVERRIDE;
0199 
0200 protected:
0201 private:
0202   Handle(Adaptor3d_Surface) surf1;
0203   Handle(Adaptor3d_Surface) surf2;
0204   Handle(Adaptor3d_Curve)   curv;
0205   gp_Pnt                    pts1;
0206   gp_Pnt                    pts2;
0207   Standard_Boolean          istangent;
0208   gp_Vec                    tg1;
0209   gp_Vec2d                  tg12d;
0210   gp_Vec                    tg2;
0211   gp_Vec2d                  tg22d;
0212   gp_Pnt                    ptgui;
0213   gp_Vec                    d1gui;
0214   gp_Vec                    d2gui;
0215   gp_Vec                    nplan;
0216   Standard_Real             normtg;
0217   Standard_Real             theD;
0218   Standard_Real             distmin;
0219 };
0220 
0221 #endif // _BlendFunc_Ruled_HeaderFile