// This file is generated by WOK (CPPExt).
// Please do not edit this file; modify original file instead.
// The copyright and license terms as defined for the original file apply to 
// this header file considered to be the "object code" form of the original source.

#ifndef _AppDef_LinearCriteria_HeaderFile
#define _AppDef_LinearCriteria_HeaderFile

#include <Standard.hxx>
#include <Standard_DefineHandle.hxx>
#include <Handle_AppDef_LinearCriteria.hxx>

#include <AppDef_MultiLine.hxx>
#include <Handle_TColStd_HArray1OfReal.hxx>
#include <Handle_FEmTool_ElementaryCriterion.hxx>
#include <Standard_Real.hxx>
#include <TColStd_Array1OfReal.hxx>
#include <Handle_FEmTool_Curve.hxx>
#include <Standard_Integer.hxx>
#include <AppDef_SmoothCriterion.hxx>
#include <Handle_FEmTool_HAssemblyTable.hxx>
#include <Handle_TColStd_HArray2OfInteger.hxx>
#include <math_Vector.hxx>
class TColStd_HArray1OfReal;
class FEmTool_ElementaryCriterion;
class FEmTool_Curve;
class Standard_NotImplemented;
class Standard_DomainError;
class AppDef_MultiLine;
class FEmTool_HAssemblyTable;
class TColStd_HArray2OfInteger;
class math_Matrix;
class TColStd_Array1OfReal;


//! defined an Linear Criteria to used in variational
//! Smoothing of points.
class AppDef_LinearCriteria : public AppDef_SmoothCriterion
{

public:

  
  Standard_EXPORT AppDef_LinearCriteria(const AppDef_MultiLine& SSP, const Standard_Integer FirstPoint, const Standard_Integer LastPoint);
  
  Standard_EXPORT   void SetParameters (const Handle(TColStd_HArray1OfReal)& Parameters) ;
  
  Standard_EXPORT   void SetCurve (const Handle(FEmTool_Curve)& C) ;
  
  Standard_EXPORT   void GetCurve (Handle(FEmTool_Curve)& C)  const;
  
  Standard_EXPORT   void SetEstimation (const Standard_Real E1, const Standard_Real E2, const Standard_Real E3) ;
  
  Standard_EXPORT   Standard_Real& EstLength() ;
  
  Standard_EXPORT   void GetEstimation (Standard_Real& E1, Standard_Real& E2, Standard_Real& E3)  const;
  
  Standard_EXPORT   Handle(FEmTool_HAssemblyTable) AssemblyTable()  const;
  
  Standard_EXPORT   Handle(TColStd_HArray2OfInteger) DependenceTable()  const;
  
  Standard_EXPORT   Standard_Integer QualityValues (const Standard_Real J1min, const Standard_Real J2min, const Standard_Real J3min, Standard_Real& J1, Standard_Real& J2, Standard_Real& J3) ;
  
  Standard_EXPORT   void ErrorValues (Standard_Real& MaxError, Standard_Real& QuadraticError, Standard_Real& AverageError) ;
  
  Standard_EXPORT   void Hessian (const Standard_Integer Element, const Standard_Integer Dimension1, const Standard_Integer Dimension2, math_Matrix& H) ;
  
  Standard_EXPORT   void Gradient (const Standard_Integer Element, const Standard_Integer Dimension, math_Vector& G) ;
  
  //! Convert the assembly Vector in an Curve;
  Standard_EXPORT   void InputVector (const math_Vector& X, const Handle(FEmTool_HAssemblyTable)& AssTable) ;
  
  Standard_EXPORT   void SetWeight (const Standard_Real QuadraticWeight, const Standard_Real QualityWeight, const Standard_Real percentJ1, const Standard_Real percentJ2, const Standard_Real percentJ3) ;
  
  Standard_EXPORT   void GetWeight (Standard_Real& QuadraticWeight, Standard_Real& QualityWeight)  const;
  
  Standard_EXPORT   void SetWeight (const TColStd_Array1OfReal& Weight) ;




  DEFINE_STANDARD_RTTI(AppDef_LinearCriteria)

protected:




private: 

  
  Standard_EXPORT   void BuildCache (const Standard_Integer E) ;

  AppDef_MultiLine mySSP;
  Handle(TColStd_HArray1OfReal) myParameters;
  Handle(TColStd_HArray1OfReal) myCache;
  Handle(FEmTool_ElementaryCriterion) myCriteria[3];
  Standard_Real myEstimation[3];
  Standard_Real myQuadraticWeight;
  Standard_Real myQualityWeight;
  Standard_Real myPercent[3];
  TColStd_Array1OfReal myPntWeight;
  Handle(FEmTool_Curve) myCurve;
  Standard_Real myLength;
  Standard_Integer myE;
  Standard_Integer IF;
  Standard_Integer IL;


};







#endif // _AppDef_LinearCriteria_HeaderFile
