// Created on: 1991-12-02 // Created by: Laurent PAINNOT // Copyright (c) 1991-1999 Matra Datavision // Copyright (c) 1999-2014 OPEN CASCADE SAS // // This file is part of Open CASCADE Technology software library. // // This library is free software; you can redistribute it and/or modify it under // the terms of the GNU Lesser General Public License version 2.1 as published // by the Free Software Foundation, with special exception defined in the file // OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT // distribution for complete text of the license and disclaimer of any warranty. // // Alternatively, this file may be used under the terms of Open CASCADE // commercial license or contractual agreement. #ifndef _AppDef_BSpParFunctionOfMyBSplGradientOfBSplineCompute_HeaderFile #define _AppDef_BSpParFunctionOfMyBSplGradientOfBSplineCompute_HeaderFile #include "Standard.hxx" #include "Standard_DefineAlloc.hxx" #include "Standard_Handle.hxx" #include "AppDef_MultiLine.hxx" #include "Standard_Integer.hxx" #include "Standard_Real.hxx" #include "AppDef_BSpParLeastSquareOfMyBSplGradientOfBSplineCompute.hxx" #include "NCollection_Array1.hxx" #include "NCollection_HArray1.hxx" #include "AppParCurves_ConstraintCouple.hxx" #include "math_MultipleVarFunctionWithGradient.hxx" #include "math_IntegerVector.hxx" #include "AppParCurves_Constraint.hxx" class AppDef_MultiLine; class AppDef_MyLineTool; class AppDef_BSpParLeastSquareOfMyBSplGradientOfBSplineCompute; class AppParCurves_MultiBSpCurve; class math_Matrix; class AppDef_BSpParFunctionOfMyBSplGradientOfBSplineCompute : public math_MultipleVarFunctionWithGradient { public: DEFINE_STANDARD_ALLOC //! initializes the fields of the function. The approximating //! curve has control points. Standard_EXPORT AppDef_BSpParFunctionOfMyBSplGradientOfBSplineCompute( const AppDef_MultiLine& SSP, const int FirstPoint, const int LastPoint, const occ::handle>& TheConstraints, const math_Vector& Parameters, const NCollection_Array1& Knots, const NCollection_Array1& Mults, const int NbPol); //! returns the number of variables of the function. It //! corresponds to the number of MultiPoints. Standard_EXPORT int NbVariables() const override; //! this method computes the new approximation of the //! MultiLine //! SSP and calculates F = sum (||Pui - Bi*Pi||2) for each //! point of the MultiLine. Standard_EXPORT bool Value(const math_Vector& X, double& F) override; //! returns the gradient G of the sum above for the //! parameters Xi. Standard_EXPORT bool Gradient(const math_Vector& X, math_Vector& G) override; //! returns the value F=sum(||Pui - Bi*Pi||)2. //! returns the value G = grad(F) for the parameters Xi. Standard_EXPORT bool Values(const math_Vector& X, double& F, math_Vector& G) override; //! returns the new parameters of the MultiLine. Standard_EXPORT const math_Vector& NewParameters() const; //! returns the MultiBSpCurve approximating the set after //! computing the value F or Grad(F). Standard_EXPORT AppParCurves_MultiBSpCurve CurveValue(); //! returns the distance between the MultiPoint of range //! IPoint and the curve CurveIndex. Standard_EXPORT double Error(const int IPoint, const int CurveIndex); //! returns the maximum distance between the points //! and the MultiBSpCurve. Standard_EXPORT double MaxError3d() const; //! returns the maximum distance between the points //! and the MultiBSpCurve. Standard_EXPORT double MaxError2d() const; //! returns the function matrix used to approximate the //! multiline. Standard_EXPORT const math_Matrix& FunctionMatrix() const; //! returns the derivative function matrix used to approximate the //! multiline. Standard_EXPORT const math_Matrix& DerivativeFunctionMatrix() const; //! Returns the indexes of the first non null values of //! A and DA. //! The values are non null from Index(ieme point) +1 //! to Index(ieme point) + degree +1. Standard_EXPORT const math_IntegerVector& Index() const; Standard_EXPORT AppParCurves_Constraint FirstConstraint( const occ::handle>& TheConstraints, const int FirstPoint) const; Standard_EXPORT AppParCurves_Constraint LastConstraint( const occ::handle>& TheConstraints, const int LastPoint) const; Standard_EXPORT void SetFirstLambda(const double l1); Standard_EXPORT void SetLastLambda(const double l2); protected: //! this method is used each time Value or Gradient is //! needed. Standard_EXPORT void Perform(const math_Vector& X); private: bool Done; AppDef_MultiLine MyMultiLine; AppParCurves_MultiBSpCurve MyMultiBSpCurve; int nbpoles; math_Vector myParameters; double FVal; math_Vector ValGrad_F; math_Matrix MyF; math_Matrix PTLX; math_Matrix PTLY; math_Matrix PTLZ; math_Matrix A; math_Matrix DA; AppDef_BSpParLeastSquareOfMyBSplGradientOfBSplineCompute MyLeastSquare; bool Contraintes; int NbP; int NbCu; int Adeb; int Afin; occ::handle> tabdim; double ERR3d; double ERR2d; int FirstP; int LastP; occ::handle> myConstraints; double mylambda1; double mylambda2; }; #endif // _AppDef_BSpParFunctionOfMyBSplGradientOfBSplineCompute_HeaderFile