// Reconstruction - A tool for building cad models from meshes
// Copyright (C) 2010-2026 Eric Bechet, Borhen Louhichi
//
// See the LICENSE file for license information and contributions.
// Please report all bugs and problems to <bechet@cadxfem.org>.

#ifndef CONVERT_GRIDPOLYNOMES_TOPOLES_H
#define CONVERT_GRIDPOLYNOMES_TOPOLES_H

//#ifndef _Convert_GridPolynomialToPoles_HeaderFile
//#define _Convert_GridPolynomialToPoles_HeaderFile

#ifndef _Handle_TColStd_HArray1OfReal_HeaderFile
#include <Handle_TColStd_HArray1OfReal.hxx>
#endif
#ifndef _Handle_TColStd_HArray1OfInteger_HeaderFile
#include <Handle_TColStd_HArray1OfInteger.hxx>
#endif
#ifndef _Handle_TColgp_HArray2OfPnt_HeaderFile
#include <Handle_TColgp_HArray2OfPnt.hxx>
#endif
#ifndef _Standard_Integer_HeaderFile
#include <Standard_Integer.hxx>
#endif
#ifndef _Standard_Boolean_HeaderFile
#include <Standard_Boolean.hxx>
#endif
#ifndef _Handle_TColStd_HArray2OfInteger_HeaderFile
#include <Handle_TColStd_HArray2OfInteger.hxx>
#endif

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

#include <StdFail_NotDone.hxx>
#include <Standard_DomainError.hxx>
#include <PLib.hxx>
#include <BSplSLib.hxx>
#include <BSplCLib.hxx>

/// B le 01-10-2010
#include "TColStd_HArray1OfInteger.hxx"
#include "TColStd_HArray1OfReal.hxx"
#include "TColStd_HArray2OfInteger.hxx"
#include "TColgp_HArray2OfPnt.hxx"




class TColStd_HArray1OfReal;
class TColStd_HArray1OfInteger;
class TColgp_HArray2OfPnt;
class Standard_DomainError;
class StdFail_NotDone;
class TColStd_HArray2OfInteger;




class Convert_GridPolynomes_ToPoles
{

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
//

  Standard_EXPORT Convert_GridPolynomes_ToPoles(const Standard_Integer MaxUDegree,const Standard_Integer MaxVDegree,const Handle(TColStd_HArray1OfInteger) & NumCoeff,const Handle(TColStd_HArray1OfReal) & Coefficients,const Handle(TColStd_HArray1OfReal) & PolynomialUIntervals,const Handle(TColStd_HArray1OfReal) & PolynomialVIntervals);

  Standard_EXPORT Convert_GridPolynomes_ToPoles(const Standard_Integer NbUSurfaces,const Standard_Integer NBVSurfaces,const Standard_Integer UContinuity,const Standard_Integer VContinuity,const Standard_Integer MaxUDegree,const Standard_Integer MaxVDegree,const Handle(TColStd_HArray2OfInteger) & NumCoeffPerSurface,const Handle(TColStd_HArray1OfReal) & Coefficients,const Handle(TColStd_HArray1OfReal) & PolynomialUIntervals,const Handle(TColStd_HArray1OfReal) & PolynomialVIntervals,const Handle(TColStd_HArray1OfReal) & TrueUIntervals,const Handle(TColStd_HArray1OfReal) & TrueVIntervals);


  Standard_EXPORT   void Perform(const Standard_Integer UContinuity,const Standard_Integer VContinuity,const Standard_Integer MaxUDegree,const Standard_Integer MaxVDegree,const Handle(TColStd_HArray2OfInteger) & NumCoeffPerSurface,const Handle(TColStd_HArray1OfReal) & Coefficients,const Handle(TColStd_HArray1OfReal) & PolynomialUIntervals,const Handle(TColStd_HArray1OfReal) & PolynomialVIntervals,const Handle(TColStd_HArray1OfReal) & TrueUIntervals,const Handle(TColStd_HArray1OfReal) & TrueVIntervals) ;
  Standard_EXPORT   Standard_Integer NbUPoles() const;
  Standard_EXPORT   Standard_Integer NbVPoles() const;
//! returns the poles of the BSpline Surface <br>
  Standard_EXPORT  const Handle_TColgp_HArray2OfPnt& Poles() const;
  Standard_EXPORT   Standard_Integer UDegree() const;
  Standard_EXPORT   Standard_Integer VDegree() const;
  Standard_EXPORT   Standard_Integer NbUKnots() const;
  Standard_EXPORT   Standard_Integer NbVKnots() const;
//! Knots in the U direction <br>
  Standard_EXPORT  const Handle_TColStd_HArray1OfReal& UKnots() const;
//!  Knots in the V direction <br>
  Standard_EXPORT  const Handle_TColStd_HArray1OfReal& VKnots() const;
//! Multiplicities of the knots in the U direction <br>
  Standard_EXPORT  const Handle_TColStd_HArray1OfInteger& UMultiplicities() const;
//! Multiplicities of the knots in the V direction <br>
  Standard_EXPORT  const Handle_TColStd_HArray1OfInteger& VMultiplicities() const;
  Standard_EXPORT   Standard_Boolean IsDone() const;

protected:

// Methods PROTECTED
//
// Fields PROTECTED
//
private:
// Methods PRIVATE
//
  Standard_EXPORT   void BuildArray(const Standard_Integer Degree,const Handle(TColStd_HArray1OfReal) & Knots,const Standard_Integer Continuty,Handle(TColStd_HArray1OfReal) & FlatKnots,Handle(TColStd_HArray1OfInteger) & Mults,Handle(TColStd_HArray1OfReal) & Parameters) const;


// Fields PRIVATE
//
  Handle_TColStd_HArray1OfReal myUFlatKnots;
  Handle_TColStd_HArray1OfReal myVFlatKnots;
  Handle_TColStd_HArray1OfReal myUKnots;
  Handle_TColStd_HArray1OfReal myVKnots;
  Handle_TColStd_HArray1OfInteger myUMults;
  Handle_TColStd_HArray1OfInteger myVMults;
  Handle_TColgp_HArray2OfPnt myPoles;
  Standard_Integer myUDegree;
  Standard_Integer myVDegree;
  Standard_Boolean myDone;







};





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


#endif

