// File generated by CPPExt (Value)
//
//                     Copyright (C) 1991 - 2000 by  
//                      Matra Datavision SA.  All rights reserved.
//  
//                     Copyright (C) 2001 - 2004 by
//                     Open CASCADE SA.  All rights reserved.
// 
// This file is part of the Open CASCADE Technology software.
//
// This software may be distributed and/or modified under the terms and
// conditions of the Open CASCADE Public License as defined by Open CASCADE SA
// and appearing in the file LICENSE included in the packaging of this file.
//  
// This software is distributed on an "AS IS" basis, without warranty of any
// kind, and Open CASCADE SA hereby disclaims all such warranties,
// including without limitation, any warranties of merchantability, fitness
// for a particular purpose or non-infringement. Please see the License for
// the specific terms and conditions governing rights and limitations under the
// License.

#ifndef _AdvApprox_ApproxAFunction_HeaderFile
#define _AdvApprox_ApproxAFunction_HeaderFile

#ifndef _Standard_Integer_HeaderFile
#include <Standard_Integer.hxx>
#endif
#ifndef _Handle_TColStd_HArray1OfReal_HeaderFile
#include <Handle_TColStd_HArray1OfReal.hxx>
#endif
#ifndef _Standard_Real_HeaderFile
#include <Standard_Real.hxx>
#endif
#ifndef _GeomAbs_Shape_HeaderFile
#include <GeomAbs_Shape.hxx>
#endif
#ifndef _Standard_Boolean_HeaderFile
#include <Standard_Boolean.hxx>
#endif
#ifndef _Handle_TColStd_HArray2OfReal_HeaderFile
#include <Handle_TColStd_HArray2OfReal.hxx>
#endif
#ifndef _Handle_TColgp_HArray2OfPnt2d_HeaderFile
#include <Handle_TColgp_HArray2OfPnt2d.hxx>
#endif
#ifndef _Handle_TColgp_HArray2OfPnt_HeaderFile
#include <Handle_TColgp_HArray2OfPnt.hxx>
#endif
#ifndef _Handle_TColStd_HArray1OfInteger_HeaderFile
#include <Handle_TColStd_HArray1OfInteger.hxx>
#endif
#ifndef _AdvApprox_EvaluatorFunction_HeaderFile
#include <AdvApprox_EvaluatorFunction.hxx>
#endif
#ifndef _Standard_OStream_HeaderFile
#include <Standard_OStream.hxx>
#endif
class TColStd_HArray1OfReal;
class TColStd_HArray2OfReal;
class TColgp_HArray2OfPnt2d;
class TColgp_HArray2OfPnt;
class TColStd_HArray1OfInteger;
class Standard_OutOfRange;
class Standard_ConstructionError;
class AdvApprox_Cutting;
class TColStd_Array1OfInteger;
class TColStd_Array1OfReal;
class TColgp_Array1OfPnt2d;
class TColgp_Array1OfPnt;


#ifndef _Standard_HeaderFile
#include <Standard.hxx>
#endif
#ifndef _Standard_Macro_HeaderFile
#include <Standard_Macro.hxx>
#endif


class AdvApprox_ApproxAFunction  {

public:

    void* operator new(size_t,void* anAddress) 
      {
        return anAddress;
      }
    void* operator new(size_t size) 
      { 
        return Standard::Allocate(size); 
      }
    void  operator delete(void *anAddress) 
      { 
        if (anAddress) Standard::Free((Standard_Address&)anAddress); 
      }
 // Methods PUBLIC
 // 


//!  Warning: <br>
//!     the Function of type <br>
//!     EvaluatorFunction from Approx <br>
//!     must be an extern "C" function otherwise <br>
//!     this will NOT WORK <br>
Standard_EXPORT AdvApprox_ApproxAFunction(const Standard_Integer Num1DSS,const Standard_Integer Num2DSS,const Standard_Integer Num3DSS,const Handle(TColStd_HArray1OfReal)& OneDTol,const Handle(TColStd_HArray1OfReal)& TwoDTol,const Handle(TColStd_HArray1OfReal)& ThreeDTol,const Standard_Real First,const Standard_Real Last,const GeomAbs_Shape Continuity,const Standard_Integer MaxDeg,const Standard_Integer MaxSeg,const AdvApprox_EvaluatorFunction& Func);

//! Approximation with user methode of cutting <br>
Standard_EXPORT AdvApprox_ApproxAFunction(const Standard_Integer Num1DSS,const Standard_Integer Num2DSS,const Standard_Integer Num3DSS,const Handle(TColStd_HArray1OfReal)& OneDTol,const Handle(TColStd_HArray1OfReal)& TwoDTol,const Handle(TColStd_HArray1OfReal)& ThreeDTol,const Standard_Real First,const Standard_Real Last,const GeomAbs_Shape Continuity,const Standard_Integer MaxDeg,const Standard_Integer MaxSeg,const AdvApprox_EvaluatorFunction& Func,const AdvApprox_Cutting& CutTool);


Standard_EXPORT static  void Approximation(const Standard_Integer TotalDimension,const Standard_Integer TotalNumSS,const TColStd_Array1OfInteger& LocalDimension,const Standard_Real First,const Standard_Real Last,const AdvApprox_EvaluatorFunction& Evaluator,const AdvApprox_Cutting& CutTool,const Standard_Integer ContinuityOrder,const Standard_Integer NumMaxCoeffs,const Standard_Integer MaxSegments,const TColStd_Array1OfReal& TolerancesArray,const Standard_Integer code_precis,Standard_Integer& NumCurves,TColStd_Array1OfInteger& NumCoeffPerCurveArray,TColStd_Array1OfReal& LocalCoefficientArray,TColStd_Array1OfReal& IntervalsArray,TColStd_Array1OfReal& ErrorMaxArray,TColStd_Array1OfReal& AverageErrorArray,Standard_Integer& ErrorCode) ;

  Standard_Boolean IsDone() const;

  Standard_Boolean HasResult() const;
//! returns the poles from the algorithms as is <br>
  Handle_TColStd_HArray2OfReal Poles1d() const;
//! returns the poles from the algorithms as is <br>
  Handle_TColgp_HArray2OfPnt2d Poles2d() const;
//! -- returns the poles from the algorithms as is <br>
  Handle_TColgp_HArray2OfPnt Poles() const;

//!  as the name says <br>
Standard_EXPORT   Standard_Integer NbPoles() const;

//! returns the poles at Index from the 1d subspace <br>
Standard_EXPORT   void Poles1d(const Standard_Integer Index,TColStd_Array1OfReal& P) const;

//!  returns the poles at Index from the 2d subspace <br>
Standard_EXPORT   void Poles2d(const Standard_Integer Index,TColgp_Array1OfPnt2d& P) const;

//!  returns the poles at Index from the 3d subspace <br>
Standard_EXPORT   void Poles(const Standard_Integer Index,TColgp_Array1OfPnt& P) const;

  Standard_Integer Degree() const;

  Standard_Integer NbKnots() const;

  Standard_Integer NumSubSpaces(const Standard_Integer Dimension) const;

  Handle_TColStd_HArray1OfReal Knots() const;

  Handle_TColStd_HArray1OfInteger Multiplicities() const;

//!  returns the error as is in the algorithms <br>
Standard_EXPORT   Handle_TColStd_HArray1OfReal MaxError(const Standard_Integer Dimension) const;

//! returns the error as is in the algorithms <br>
Standard_EXPORT   Handle_TColStd_HArray1OfReal AverageError(const Standard_Integer Dimension) const;


Standard_EXPORT   Standard_Real MaxError(const Standard_Integer Dimension,const Standard_Integer Index) const;


Standard_EXPORT   Standard_Real AverageError(const Standard_Integer Dimension,const Standard_Integer Index) const;

//! diplay information on approximation. <br>
Standard_EXPORT   void Dump(Standard_OStream& o) const;





protected:

 // Methods PROTECTED
 // 


 // Fields PROTECTED
 //


private: 

 // Methods PRIVATE
 // 


Standard_EXPORT   void Perform(const Standard_Integer Num1DSS,const Standard_Integer Num2DSS,const Standard_Integer Num3DSS,const AdvApprox_Cutting& CutTool) ;


 // Fields PRIVATE
 //
Standard_Integer myNumSubSpaces[3];
Handle_TColStd_HArray1OfReal my1DTolerances;
Handle_TColStd_HArray1OfReal my2DTolerances;
Handle_TColStd_HArray1OfReal my3DTolerances;
Standard_Real myFirst;
Standard_Real myLast;
GeomAbs_Shape myContinuity;
Standard_Integer myMaxDegree;
Standard_Integer myMaxSegments;
Standard_Boolean myDone;
Standard_Boolean myHasResult;
Handle_TColStd_HArray2OfReal my1DPoles;
Handle_TColgp_HArray2OfPnt2d my2DPoles;
Handle_TColgp_HArray2OfPnt my3DPoles;
Handle_TColStd_HArray1OfReal myKnots;
Handle_TColStd_HArray1OfInteger myMults;
Standard_Integer myDegree;
AdvApprox_EvaluatorFunction myEvaluator;
Handle_TColStd_HArray1OfReal my1DMaxError;
Handle_TColStd_HArray1OfReal my1DAverageError;
Handle_TColStd_HArray1OfReal my2DMaxError;
Handle_TColStd_HArray1OfReal my2DAverageError;
Handle_TColStd_HArray1OfReal my3DMaxError;
Handle_TColStd_HArray1OfReal my3DAverageError;


};


#include <AdvApprox_ApproxAFunction.lxx>



// other Inline functions and methods (like "C++: function call" methods)
//


#endif
