1 // Created on: 1991-02-26 2 // Created by: Isabelle GRIGNON 3 // Copyright (c) 1991-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 _Extrema_PCFOfEPCOfELPCOfLocateExtPC2d_HeaderFile 18 #define _Extrema_PCFOfEPCOfELPCOfLocateExtPC2d_HeaderFile 19 20 #include <Standard.hxx> 21 #include <Standard_DefineAlloc.hxx> 22 #include <Standard_Handle.hxx> 23 24 #include <gp_Pnt2d.hxx> 25 #include <Standard_Address.hxx> 26 #include <Standard_Real.hxx> 27 #include <TColStd_SequenceOfReal.hxx> 28 #include <TColStd_SequenceOfInteger.hxx> 29 #include <Extrema_SequenceOfPOnCurv2d.hxx> 30 #include <Standard_Boolean.hxx> 31 #include <Standard_Integer.hxx> 32 #include <math_FunctionWithDerivative.hxx> 33 class Standard_OutOfRange; 34 class Standard_TypeMismatch; 35 class Adaptor2d_Curve2d; 36 class Extrema_Curve2dTool; 37 class Extrema_POnCurv2d; 38 class gp_Pnt2d; 39 class gp_Vec2d; 40 41 class Extrema_PCFOfEPCOfELPCOfLocateExtPC2d : public math_FunctionWithDerivative 42 { 43 public: 44 45 DEFINE_STANDARD_ALLOC 46 47 48 Standard_EXPORT Extrema_PCFOfEPCOfELPCOfLocateExtPC2d(); 49 50 Standard_EXPORT Extrema_PCFOfEPCOfELPCOfLocateExtPC2d(const gp_Pnt2d& P, const Adaptor2d_Curve2d& C); 51 52 //! sets the field mycurve of the function. 53 Standard_EXPORT void Initialize (const Adaptor2d_Curve2d& C); 54 55 //! sets the field P of the function. 56 Standard_EXPORT void SetPoint (const gp_Pnt2d& P); 57 58 //! Calculation of F(U). 59 Standard_EXPORT Standard_Boolean Value (const Standard_Real U, Standard_Real& F) Standard_OVERRIDE; 60 61 //! Calculation of F'(U). 62 Standard_EXPORT Standard_Boolean Derivative (const Standard_Real U, Standard_Real& DF) Standard_OVERRIDE; 63 64 //! Calculation of F(U) and F'(U). 65 Standard_EXPORT Standard_Boolean Values (const Standard_Real U, Standard_Real& F, Standard_Real& DF) Standard_OVERRIDE; 66 67 //! Save the found extremum. 68 Standard_EXPORT virtual Standard_Integer GetStateNumber() Standard_OVERRIDE; 69 70 //! Return the number of found extrema. 71 Standard_EXPORT Standard_Integer NbExt() const; 72 73 //! Returns the Nth distance. 74 Standard_EXPORT Standard_Real SquareDistance (const Standard_Integer N) const; 75 76 //! Shows if the Nth distance is a minimum. 77 Standard_EXPORT Standard_Boolean IsMin (const Standard_Integer N) const; 78 79 //! Returns the Nth extremum. 80 Standard_EXPORT const Extrema_POnCurv2d& Point (const Standard_Integer N) const; 81 82 //! Determines boundaries of subinterval for find of root. 83 Standard_EXPORT void SubIntervalInitialize (const Standard_Real theUfirst, const Standard_Real theUlast); 84 85 //! Computes a Tol value. If 1st derivative of curve 86 //! |D1|<Tol, it is considered D1=0. 87 Standard_EXPORT Standard_Real SearchOfTolerance(); 88 89 90 91 92 protected: 93 94 95 96 97 98 private: 99 100 101 102 gp_Pnt2d myP; 103 Standard_Address myC; 104 Standard_Real myU; 105 gp_Pnt2d myPc; 106 Standard_Real myD1f; 107 TColStd_SequenceOfReal mySqDist; 108 TColStd_SequenceOfInteger myIsMin; 109 Extrema_SequenceOfPOnCurv2d myPoint; 110 Standard_Boolean myPinit; 111 Standard_Boolean myCinit; 112 Standard_Boolean myD1Init; 113 Standard_Real myTol; 114 Standard_Integer myMaxDerivOrder; 115 Standard_Real myUinfium; 116 Standard_Real myUsupremum; 117 118 119 }; 120 121 122 123 124 125 126 127 #endif // _Extrema_PCFOfEPCOfELPCOfLocateExtPC2d_HeaderFile 128