Back to home page

EIC code displayed by LXR

 
 

    


Warning, /include/opencascade/Extrema_GenExtPC.gxx is written in an unsupported language. File is not indexed.

0001 // Created on: 1995-07-18
0002 // Created by: Modelistation
0003 // Copyright (c) 1995-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 #include <StdFail_NotDone.hxx>
0018 #include <math_DirectPolynomialRoots.hxx>
0019 #include <math_FunctionRoots.hxx>
0020 #include <Standard_OutOfRange.hxx>
0021 #include <Standard_NotImplemented.hxx>
0022 
0023 
0024 //=======================================================================
0025 //function : Extrema_GenExtPC
0026 //purpose  : 
0027 //=======================================================================
0028 
0029 Extrema_GenExtPC::Extrema_GenExtPC ()
0030 : myDone(Standard_False),
0031   myInit(Standard_False),
0032   mynbsample(0),
0033   myumin(0.0),
0034   myusup(0.0),
0035   mytolu(0.0),
0036   mytolF(0.0)
0037 { 
0038 }
0039 
0040 
0041 
0042 //=======================================================================
0043 //function : Extrema_GenExtPC
0044 //purpose  : 
0045 //=======================================================================
0046 
0047 Extrema_GenExtPC::Extrema_GenExtPC (const Pnt&             P, 
0048                                     const Curve&           C,
0049                                     const Standard_Integer NbSample, 
0050                                     const Standard_Real    TolU,
0051                                     const Standard_Real    TolF) : myF (P,C)
0052 {
0053   Initialize(C, NbSample, TolU, TolF);
0054   Perform(P);
0055 }
0056 
0057 
0058 //=======================================================================
0059 //function : Extrema_GenExtPC
0060 //purpose  : 
0061 //=======================================================================
0062 
0063 Extrema_GenExtPC::Extrema_GenExtPC (const Pnt&             P, 
0064                                     const Curve&           C,
0065                                     const Standard_Integer NbSample, 
0066                                     const Standard_Real    Umin, 
0067                                     const Standard_Real    Usup,
0068                                     const Standard_Real    TolU,
0069                                     const Standard_Real    TolF) : myF (P,C)
0070 {
0071   Initialize(C, NbSample, Umin, Usup, TolU, TolF);
0072   Perform(P);
0073 }
0074 
0075 
0076 //=======================================================================
0077 //function : Initialize
0078 //purpose  : 
0079 //=======================================================================
0080 
0081 void Extrema_GenExtPC::Initialize(const Curve&           C,
0082                                   const Standard_Integer NbU,
0083                                   const Standard_Real    TolU,
0084                                   const Standard_Real    TolF)
0085 {
0086   myInit = Standard_True;
0087   mynbsample = NbU;
0088   mytolu = TolU;
0089   mytolF = TolF;
0090   myF.Initialize(C);
0091   myumin = Tool::FirstParameter(C);
0092   myusup = Tool::LastParameter(C);
0093 }
0094 
0095 //=======================================================================
0096 //function : Initialize
0097 //purpose  : 
0098 //=======================================================================
0099 
0100 void Extrema_GenExtPC::Initialize(const Curve&           C,
0101                                   const Standard_Integer NbU,
0102                                   const Standard_Real    Umin,
0103                                   const Standard_Real    Usup,
0104                                   const Standard_Real    TolU,
0105                                   const Standard_Real    TolF)
0106 {
0107   myInit = Standard_True;
0108   mynbsample = NbU;
0109   mytolu = TolU;
0110   mytolF = TolF;
0111   myF.Initialize(C);
0112   myumin = Umin;
0113   myusup = Usup;
0114 }
0115 
0116 
0117 //=======================================================================
0118 //function : Initialize
0119 //purpose  : 
0120 //=======================================================================
0121 
0122 void Extrema_GenExtPC::Initialize(const Standard_Integer NbU,
0123                                   const Standard_Real    Umin,
0124                                   const Standard_Real    Usup,
0125                                   const Standard_Real    TolU,
0126                                   const Standard_Real    TolF)
0127 {
0128   mynbsample = NbU;
0129   mytolu = TolU;
0130   mytolF = TolF;
0131   myumin = Umin;
0132   myusup = Usup;
0133 }
0134 
0135 //=======================================================================
0136 //function : Initialize
0137 //purpose  : 
0138 //=======================================================================
0139 
0140 void Extrema_GenExtPC::Initialize(const Curve& C)
0141 {
0142   myF.Initialize(C);
0143 }
0144 
0145 
0146 
0147 //=======================================================================
0148 //function : Perform
0149 //purpose  : 
0150 //=======================================================================
0151 
0152 void Extrema_GenExtPC::Perform(const Pnt& P)
0153 /*-----------------------------------------------------------------------------
0154 Fonction:
0155   Recherche des valeurs de parametre u telle que dist(P,C(u)) passe
0156   par un extremum.
0157 
0158 Methode:
0159   Si U est solution, alors (C(U)-P).C'(U) = 0.
0160   Le probleme consiste a rechercher les racines de cette fonction
0161   dans l'intervalle de definition de la courbe.
0162   On utilise la classe math_FunctionRoots avec les arguments de
0163   construction suivant:
0164   - F: Extrema_FuncExtPC cree a partir de P et C,
0165   - Uinf: borne inferieure de l'intervalle de definition,
0166   - Usup: borne superieure de l'intervalle de definition,
0167   - NbSample,
0168   - TolU,
0169   - TolF,
0170   - TolF.
0171 -----------------------------------------------------------------------------*/
0172 {
0173   myF.SetPoint(P);
0174   myF.SubIntervalInitialize(myumin,myusup);
0175   myDone = Standard_False;
0176 
0177   math_FunctionRoots S (myF, myumin, myusup, mynbsample, mytolu, mytolF, mytolF);
0178   if (!S.IsDone() ||
0179       S.IsAllNull()) { return; }
0180 
0181   myDone = Standard_True;
0182 }
0183 
0184 
0185 
0186 //=======================================================================
0187 //function : IsDone
0188 //purpose  : 
0189 //=======================================================================
0190 
0191 Standard_Boolean Extrema_GenExtPC::IsDone () const {
0192 
0193   return myDone;
0194 }
0195 
0196 
0197 //=======================================================================
0198 //function : NbExt
0199 //purpose  : 
0200 //=======================================================================
0201 
0202 Standard_Integer Extrema_GenExtPC::NbExt () const {
0203 
0204   if (!IsDone()) { throw StdFail_NotDone(); }
0205   return myF.NbExt();
0206 }
0207 
0208 
0209 //=======================================================================
0210 //function : Value
0211 //purpose  : 
0212 //=======================================================================
0213 
0214 Standard_Real Extrema_GenExtPC::SquareDistance (const Standard_Integer N) const
0215 {
0216   if ((N < 1) || (N > NbExt()))
0217   {
0218     throw Standard_OutOfRange();
0219   }
0220 
0221   return myF.SquareDistance(N);
0222 }
0223 
0224 
0225 //=======================================================================
0226 //function : IsMin
0227 //purpose  : 
0228 //=======================================================================
0229 
0230 Standard_Boolean Extrema_GenExtPC::IsMin (const Standard_Integer N) const {
0231 
0232   if ((N < 1) || (N > NbExt()))
0233   {
0234     throw Standard_OutOfRange();
0235   }
0236 
0237   return myF.IsMin(N);
0238 }
0239 
0240 
0241 //=======================================================================
0242 //function : Point
0243 //purpose  : 
0244 //=======================================================================
0245 
0246 const POnC & Extrema_GenExtPC::Point (const Standard_Integer N) const 
0247 {
0248   if ((N < 1) || (N > NbExt()))
0249   {
0250     throw Standard_OutOfRange();
0251   }
0252 
0253   return myF.Point(N);
0254 }
0255 //=============================================================================