1 // Created on: 1993-12-02 2 // Created by: Jacques GOUSSARD 3 // Copyright (c) 1993-1999 Matra Datavision 4 // Copyright (c) 1999-2014 OPEN CASCADE SAS 5 // 6 // This file is part of Open CASCADE Technology software library. 7 // 8 // This library is free software; you can redistribute it and/or modify it under 9 // the terms of the GNU Lesser General Public License version 2.1 as published 10 // by the Free Software Foundation, with special exception defined in the file 11 // OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT 12 // distribution for complete text of the license and disclaimer of any warranty. 13 // 14 // Alternatively, this file may be used under the terms of Open CASCADE 15 // commercial license or contractual agreement. 16 17 #ifndef _BlendFunc_Ruled_HeaderFile 18 #define _BlendFunc_Ruled_HeaderFile 19 20 #include <Adaptor3d_Surface.hxx> 21 #include <gp_Pnt.hxx> 22 #include <gp_Vec.hxx> 23 #include <gp_Vec2d.hxx> 24 #include <Blend_Function.hxx> 25 #include <math_Vector.hxx> 26 #include <TColgp_Array1OfPnt.hxx> 27 #include <TColgp_Array1OfVec.hxx> 28 #include <TColStd_Array1OfReal.hxx> 29 #include <GeomAbs_Shape.hxx> 30 #include <TColStd_Array1OfInteger.hxx> 31 #include <TColgp_Array1OfPnt2d.hxx> 32 #include <TColgp_Array1OfVec2d.hxx> 33 34 class math_Matrix; 35 class Blend_Point; 36 class gp_Ax1; 37 38 class BlendFunc_Ruled : public Blend_Function 39 { 40 public: 41 42 DEFINE_STANDARD_ALLOC 43 44 45 Standard_EXPORT BlendFunc_Ruled(const Handle(Adaptor3d_Surface)& S1, const Handle(Adaptor3d_Surface)& S2, const Handle(Adaptor3d_Curve)& C); 46 47 //! returns the number of equations of the function. 48 Standard_EXPORT Standard_Integer NbEquations() const Standard_OVERRIDE; 49 50 //! computes the values <F> of the Functions for the 51 //! variable <X>. 52 //! Returns True if the computation was done successfully, 53 //! False otherwise. 54 Standard_EXPORT Standard_Boolean Value (const math_Vector& X, math_Vector& F) Standard_OVERRIDE; 55 56 //! returns the values <D> of the derivatives for the 57 //! variable <X>. 58 //! Returns True if the computation was done successfully, 59 //! False otherwise. 60 Standard_EXPORT Standard_Boolean Derivatives (const math_Vector& X, math_Matrix& D) Standard_OVERRIDE; 61 62 //! returns the values <F> of the functions and the derivatives 63 //! <D> for the variable <X>. 64 //! Returns True if the computation was done successfully, 65 //! False otherwise. 66 Standard_EXPORT Standard_Boolean Values (const math_Vector& X, math_Vector& F, math_Matrix& D) Standard_OVERRIDE; 67 68 Standard_EXPORT void Set (const Standard_Real Param) Standard_OVERRIDE; 69 70 Standard_EXPORT void Set (const Standard_Real First, const Standard_Real Last) Standard_OVERRIDE; 71 72 Standard_EXPORT void GetTolerance (math_Vector& Tolerance, const Standard_Real Tol) const Standard_OVERRIDE; 73 74 Standard_EXPORT void GetBounds (math_Vector& InfBound, math_Vector& SupBound) const Standard_OVERRIDE; 75 76 Standard_EXPORT Standard_Boolean IsSolution (const math_Vector& Sol, const Standard_Real Tol) Standard_OVERRIDE; 77 78 //! Returns the minimal Distance between two 79 //! extremities of calculated sections. 80 Standard_EXPORT Standard_Real GetMinimalDistance() const Standard_OVERRIDE; 81 82 Standard_EXPORT const gp_Pnt& PointOnS1() const Standard_OVERRIDE; 83 84 Standard_EXPORT const gp_Pnt& PointOnS2() const Standard_OVERRIDE; 85 86 Standard_EXPORT Standard_Boolean IsTangencyPoint() const Standard_OVERRIDE; 87 88 Standard_EXPORT const gp_Vec& TangentOnS1() const Standard_OVERRIDE; 89 90 Standard_EXPORT const gp_Vec2d& Tangent2dOnS1() const Standard_OVERRIDE; 91 92 Standard_EXPORT const gp_Vec& TangentOnS2() const Standard_OVERRIDE; 93 94 Standard_EXPORT const gp_Vec2d& Tangent2dOnS2() const Standard_OVERRIDE; 95 96 //! Returns the tangent vector at the section, 97 //! at the beginning and the end of the section, and 98 //! returns the normal (of the surfaces) at 99 //! these points. 100 Standard_EXPORT void Tangent (const Standard_Real U1, const Standard_Real V1, const Standard_Real U2, const Standard_Real V2, gp_Vec& TgFirst, gp_Vec& TgLast, gp_Vec& NormFirst, gp_Vec& NormLast) const Standard_OVERRIDE; 101 102 Standard_EXPORT Standard_Boolean GetSection (const Standard_Real Param, const Standard_Real U1, const Standard_Real V1, const Standard_Real U2, const Standard_Real V2, TColgp_Array1OfPnt& tabP, TColgp_Array1OfVec& tabV); 103 104 //! Returns False 105 Standard_EXPORT Standard_Boolean IsRational() const Standard_OVERRIDE; 106 107 //! Returns the length of the maximum section 108 Standard_EXPORT Standard_Real GetSectionSize() const Standard_OVERRIDE; 109 110 //! Compute the minimal value of weight for each poles 111 //! of all sections. 112 Standard_EXPORT void GetMinimalWeight (TColStd_Array1OfReal& Weigths) const Standard_OVERRIDE; 113 114 //! Returns the number of intervals for continuity 115 //! <S>. May be one if Continuity(me) >= <S> 116 Standard_EXPORT Standard_Integer NbIntervals (const GeomAbs_Shape S) const Standard_OVERRIDE; 117 118 //! Stores in <T> the parameters bounding the intervals 119 //! of continuity <S>. 120 //! 121 //! The array must provide enough room to accommodate 122 //! for the parameters. i.e. T.Length() > NbIntervals() 123 //! raises 124 //! OutOfRange from Standard 125 Standard_EXPORT void Intervals (TColStd_Array1OfReal& T, const GeomAbs_Shape S) const Standard_OVERRIDE; 126 127 Standard_EXPORT void GetShape (Standard_Integer& NbPoles, Standard_Integer& NbKnots, Standard_Integer& Degree, Standard_Integer& NbPoles2d) Standard_OVERRIDE; 128 129 //! Returns the tolerance to reach in approximation 130 //! to respecte 131 //! BoundTol error at the Boundary 132 //! AngleTol tangent error at the Boundary 133 //! SurfTol error inside the surface. 134 Standard_EXPORT void GetTolerance (const Standard_Real BoundTol, const Standard_Real SurfTol, const Standard_Real AngleTol, math_Vector& Tol3d, math_Vector& Tol1D) const Standard_OVERRIDE; 135 136 Standard_EXPORT void Knots (TColStd_Array1OfReal& TKnots) Standard_OVERRIDE; 137 138 Standard_EXPORT void Mults (TColStd_Array1OfInteger& TMults) Standard_OVERRIDE; 139 140 //! Used for the first and last section 141 Standard_EXPORT Standard_Boolean Section (const Blend_Point& P, TColgp_Array1OfPnt& Poles, TColgp_Array1OfVec& DPoles, TColgp_Array1OfVec& D2Poles, TColgp_Array1OfPnt2d& Poles2d, TColgp_Array1OfVec2d& DPoles2d, TColgp_Array1OfVec2d& D2Poles2d, TColStd_Array1OfReal& Weigths, TColStd_Array1OfReal& DWeigths, TColStd_Array1OfReal& D2Weigths) Standard_OVERRIDE; 142 143 //! Used for the first and last section 144 Standard_EXPORT Standard_Boolean Section (const Blend_Point& P, TColgp_Array1OfPnt& Poles, TColgp_Array1OfVec& DPoles, TColgp_Array1OfPnt2d& Poles2d, TColgp_Array1OfVec2d& DPoles2d, TColStd_Array1OfReal& Weigths, TColStd_Array1OfReal& DWeigths) Standard_OVERRIDE; 145 146 Standard_EXPORT void Section (const Blend_Point& P, TColgp_Array1OfPnt& Poles, TColgp_Array1OfPnt2d& Poles2d, TColStd_Array1OfReal& Weigths) Standard_OVERRIDE; 147 148 Standard_EXPORT gp_Ax1 AxeRot (const Standard_Real Prm); 149 150 Standard_EXPORT void Resolution (const Standard_Integer IC2d, const Standard_Real Tol, Standard_Real& TolU, Standard_Real& TolV) const Standard_OVERRIDE; 151 152 153 154 155 protected: 156 157 158 159 160 161 private: 162 163 164 165 Handle(Adaptor3d_Surface) surf1; 166 Handle(Adaptor3d_Surface) surf2; 167 Handle(Adaptor3d_Curve) curv; 168 gp_Pnt pts1; 169 gp_Pnt pts2; 170 Standard_Boolean istangent; 171 gp_Vec tg1; 172 gp_Vec2d tg12d; 173 gp_Vec tg2; 174 gp_Vec2d tg22d; 175 gp_Pnt ptgui; 176 gp_Vec d1gui; 177 gp_Vec d2gui; 178 gp_Vec nplan; 179 Standard_Real normtg; 180 Standard_Real theD; 181 Standard_Real distmin; 182 183 184 }; 185 186 187 188 189 190 191 192 #endif // _BlendFunc_Ruled_HeaderFile 193