1 // Created on: 1991-12-02 2 // Created by: Laurent PAINNOT 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 _AppDef_TheResol_HeaderFile 18 #define _AppDef_TheResol_HeaderFile 19 20 #include <Standard.hxx> 21 #include <Standard_DefineAlloc.hxx> 22 #include <Standard_Handle.hxx> 23 24 #include <Standard_Boolean.hxx> 25 #include <Standard_Real.hxx> 26 #include <math_Matrix.hxx> 27 #include <math_Vector.hxx> 28 #include <Standard_Integer.hxx> 29 #include <TColStd_Array1OfInteger.hxx> 30 #include <AppParCurves_HArray1OfConstraintCouple.hxx> 31 class Standard_OutOfRange; 32 class AppDef_MultiLine; 33 class AppDef_MyLineTool; 34 class AppParCurves_MultiCurve; 35 class math_Matrix; 36 37 38 39 class AppDef_TheResol 40 { 41 public: 42 43 DEFINE_STANDARD_ALLOC 44 45 46 //! Given a MultiLine SSP with constraints points, this 47 //! algorithm finds the best curve solution to approximate it. 48 //! The poles from SCurv issued for example from the least 49 //! squares are used as a guess solution for the uzawa 50 //! algorithm. The tolerance used in the Uzawa algorithms 51 //! is Tolerance. 52 //! A is the Bernstein matrix associated to the MultiLine 53 //! and DA is the derivative bernstein matrix.(They can come 54 //! from an approximation with ParLeastSquare.) 55 //! The MultiCurve is modified. New MultiPoles are given. 56 Standard_EXPORT AppDef_TheResol(const AppDef_MultiLine& SSP, AppParCurves_MultiCurve& SCurv, const Standard_Integer FirstPoint, const Standard_Integer LastPoint, const Handle(AppParCurves_HArray1OfConstraintCouple)& Constraints, const math_Matrix& Bern, const math_Matrix& DerivativeBern, const Standard_Real Tolerance = 1.0e-10); 57 58 //! returns True if all has been correctly done. 59 Standard_EXPORT Standard_Boolean IsDone() const; 60 61 //! returns the maximum difference value between the curve 62 //! and the given points. 63 Standard_EXPORT Standard_Real Error() const; 64 65 Standard_EXPORT const math_Matrix& ConstraintMatrix() const; 66 67 //! returns the duale variables of the system. 68 Standard_EXPORT const math_Vector& Duale() const; 69 70 //! Returns the derivative of the constraint matrix. 71 Standard_EXPORT const math_Matrix& ConstraintDerivative (const AppDef_MultiLine& SSP, const math_Vector& Parameters, const Standard_Integer Deg, const math_Matrix& DA); 72 73 //! returns the Inverse of Cont*Transposed(Cont), where 74 //! Cont is the constraint matrix for the algorithm. 75 Standard_EXPORT const math_Matrix& InverseMatrix() const; 76 77 78 79 80 protected: 81 82 83 //! is used internally to create the fields. 84 Standard_EXPORT Standard_Integer NbConstraints (const AppDef_MultiLine& SSP, const Standard_Integer FirstPoint, const Standard_Integer LastPoint, const Handle(AppParCurves_HArray1OfConstraintCouple)& TheConstraints) const; 85 86 //! is internally used for the fields creation. 87 Standard_EXPORT Standard_Integer NbColumns (const AppDef_MultiLine& SSP, const Standard_Integer Deg) const; 88 89 90 91 92 private: 93 94 95 96 Standard_Boolean Done; 97 Standard_Real Err; 98 math_Matrix Cont; 99 math_Matrix DeCont; 100 math_Vector Secont; 101 math_Matrix CTCinv; 102 math_Vector Vardua; 103 Standard_Integer IncPass; 104 Standard_Integer IncTan; 105 Standard_Integer IncCurv; 106 TColStd_Array1OfInteger IPas; 107 TColStd_Array1OfInteger ITan; 108 TColStd_Array1OfInteger ICurv; 109 110 111 }; 112 113 114 115 116 117 118 119 #endif // _AppDef_TheResol_HeaderFile 120