Back to home page

EIC code displayed by LXR

 
 

    


Warning, /include/opencascade/Extrema_GenLocateExtPC.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 <Standard_DomainError.hxx>
0019 #include <math_FunctionRoot.hxx>
0020 
0021 //=======================================================================
0022 //function : Extrema_GenLocateExtPC
0023 //purpose  : 
0024 //=======================================================================
0025 
0026 Extrema_GenLocateExtPC::Extrema_GenLocateExtPC()
0027 : myDone(Standard_False),
0028   mytolU(0.0),
0029   myumin(0.0),
0030   myusup(0.0)
0031 {
0032 }
0033 
0034 
0035 //=======================================================================
0036 //function : Extrema_GenLocateExtPC
0037 //purpose  : 
0038 //=======================================================================
0039 
0040 Extrema_GenLocateExtPC::Extrema_GenLocateExtPC (const Pnt&          P,
0041                                                 const Curve&        C,
0042                                                 const Standard_Real U0, 
0043                                                 const Standard_Real TolU)
0044 {
0045   Initialize(C, Tool::FirstParameter(C), Tool::LastParameter(C), TolU);
0046   Perform(P, U0);
0047 }
0048 
0049 
0050 //=======================================================================
0051 //function : Extrema_GenLocateExtPC
0052 //purpose  : 
0053 //=======================================================================
0054 
0055 Extrema_GenLocateExtPC::Extrema_GenLocateExtPC (const Pnt&          P,
0056                                                 const Curve&        C,
0057                                                 const Standard_Real U0, 
0058                                                 const Standard_Real Umin,
0059                                                 const Standard_Real Usup,
0060                                                 const Standard_Real TolU)
0061 {
0062   Initialize(C, Umin, Usup, TolU);
0063   Perform(P, U0);
0064 }
0065 
0066 
0067 //=======================================================================
0068 //function : Initialize
0069 //purpose  : 
0070 //=======================================================================
0071 
0072 void Extrema_GenLocateExtPC::Initialize(const Curve&        C,
0073                                         const Standard_Real Umin,
0074                                         const Standard_Real Usup,
0075                                         const Standard_Real TolU)
0076 {
0077   myDone = Standard_False;
0078   myF.Initialize(C);
0079   myumin = Umin;
0080   myusup = Usup;
0081   mytolU = TolU;
0082 }
0083 
0084 
0085 //=======================================================================
0086 //function : Perform
0087 //purpose  : 
0088 //=======================================================================
0089 
0090 void Extrema_GenLocateExtPC::Perform(const Pnt&          P,
0091                                      const Standard_Real U0)
0092 
0093 /*-----------------------------------------------------------------------------
0094 Fonction:
0095   Recherche de la valeur de parametre U telle que:
0096   - dist(P,C(u)) passe par un extremum,
0097   - U soit la solution la plus proche de U0.
0098 
0099 Methode:
0100   Si U est solution, alors F(U)=(C(U)-P).C'(U) = 0.
0101   Le probleme consiste a rechercher, dans l'intervalle de definition
0102   de la courbe, la racine de F la plus proche de U0.
0103   On utilise la classe math_FunctionRoot avec les arguments de
0104   construction suivants:
0105   - F: Extrema_FuncExtPC cree a partir de P et C,
0106   - U0,
0107   - TolU,
0108   - Uinf: borne inferieure de l'intervalle de definition,
0109   - Ulast: borne superieure de l'intervalle de definition,
0110   - 100. .
0111 -----------------------------------------------------------------------------*/
0112 {
0113   myF.SetPoint(P);
0114   math_FunctionRoot S (myF, U0, mytolU, myumin, myusup);
0115   myDone = S.IsDone();
0116   if (myDone) {
0117     Standard_Real uu, ff;
0118     POnC PP = Point();
0119     uu = PP.Parameter();
0120     if(myF.Value(uu, ff)) {
0121       if (Abs(ff) >= 1.e-07) myDone = Standard_False;
0122     }
0123     else myDone = Standard_False;
0124   }
0125 }
0126 
0127 //=======================================================================
0128 //function : IsDone
0129 //purpose  : 
0130 //=======================================================================
0131 
0132 Standard_Boolean Extrema_GenLocateExtPC::IsDone () const 
0133 {
0134   return myDone;
0135 }
0136 
0137 
0138 //=======================================================================
0139 //function : Value
0140 //purpose  : 
0141 //=======================================================================
0142 
0143 Standard_Real Extrema_GenLocateExtPC::SquareDistance() const 
0144 {
0145   if (!IsDone())
0146   {
0147     throw StdFail_NotDone();
0148   }
0149   return myF.SquareDistance(1);
0150 }
0151 
0152 
0153 //=======================================================================
0154 //function : IsMin
0155 //purpose  : 
0156 //=======================================================================
0157 
0158 Standard_Boolean Extrema_GenLocateExtPC::IsMin () const 
0159 {
0160   if (!IsDone())
0161   {
0162     throw StdFail_NotDone();
0163   }
0164   return myF.IsMin(1);
0165 }
0166 
0167 
0168 //=======================================================================
0169 //function : Point
0170 //purpose  : 
0171 //=======================================================================
0172 
0173 const POnC & Extrema_GenLocateExtPC::Point () const 
0174 {
0175   if (!IsDone())
0176   {
0177     throw StdFail_NotDone();
0178   }
0179   return myF.Point(1);
0180 }
0181