// Created on: 1992-03-13
// Created by: Christophe MARION
// Copyright (c) 1992-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.

#include <Standard_NotImplemented.hxx>
#include <gp_Pnt2d.hxx>
#include <gp_Vec2d.hxx>
#include <gp_Lin2d.hxx>
#include <gp_Circ2d.hxx>
#include <gp_Elips2d.hxx>
#include <gp_Hypr2d.hxx>
#include <gp_Parab2d.hxx>
#include <HLRBRep_BCurveTool.hxx>

//=======================================================================
//function : Curve
//purpose  : 
//=======================================================================

inline BRepAdaptor_Curve& HLRBRep_Curve::Curve()
{ return myCurve; }

//=======================================================================
//function : GetCurve
//purpose  : 
//=======================================================================

inline const BRepAdaptor_Curve& HLRBRep_Curve::GetCurve() const
{ return myCurve; }

//=======================================================================
//function : Value3D
//purpose  : 
//=======================================================================

inline gp_Pnt HLRBRep_Curve::Value3D(const Standard_Real U) const 
{
  gp_Pnt P;
  D0(U,P);
  return P;
}

//=======================================================================
//function : D0
//purpose  : 
//=======================================================================

inline void HLRBRep_Curve::D0(const Standard_Real U, gp_Pnt& P) const
{ HLRBRep_BCurveTool::D0(myCurve,U,P); }

//=======================================================================
//function : D1
//purpose  : 
//=======================================================================

inline void HLRBRep_Curve::D1(const Standard_Real U,
			      gp_Pnt& P,
			      gp_Vec& V) const
{ HLRBRep_BCurveTool::D1(myCurve,U,P,V); }

//=======================================================================
//function : FirstParameter
//purpose  : 
//=======================================================================

inline Standard_Real  HLRBRep_Curve::FirstParameter() const
{ return Parameter2d(HLRBRep_BCurveTool::FirstParameter(myCurve)); }

//=======================================================================
//function : LastParameter
//purpose  : 
//=======================================================================

inline Standard_Real  HLRBRep_Curve::LastParameter() const
{ return Parameter2d(HLRBRep_BCurveTool::LastParameter(myCurve)); }

//=======================================================================
//function : Continuity
//purpose  : 
//=======================================================================

inline GeomAbs_Shape  HLRBRep_Curve::Continuity() const
{ return HLRBRep_BCurveTool::Continuity(myCurve); }

//=======================================================================
//function : NbIntervals
//purpose  : 
//=======================================================================

inline Standard_Integer  HLRBRep_Curve::NbIntervals (const GeomAbs_Shape S) const
{ return HLRBRep_BCurveTool::NbIntervals(myCurve,S); }

//=======================================================================
//function : Intervals
//purpose  : 
//=======================================================================

inline void HLRBRep_Curve::Intervals(TColStd_Array1OfReal& Tab,
                                     const GeomAbs_Shape Sh) const
{ HLRBRep_BCurveTool::Intervals(myCurve,Tab,Sh); }


//=======================================================================
//function : IsClosed
//purpose  : 
//=======================================================================

inline Standard_Boolean  HLRBRep_Curve::IsClosed()const 
{ return HLRBRep_BCurveTool::IsClosed(myCurve); }

//=======================================================================
//function : IsPeriodic
//purpose  : 
//=======================================================================

inline Standard_Boolean  HLRBRep_Curve::IsPeriodic()const 
{ return HLRBRep_BCurveTool::IsPeriodic(myCurve); }

//=======================================================================
//function : Period
//purpose  : 
//=======================================================================

inline Standard_Real  HLRBRep_Curve::Period()const 
{ return HLRBRep_BCurveTool::Period(myCurve); }

//=======================================================================
//function : Value
//purpose  : 
//=======================================================================

inline gp_Pnt2d HLRBRep_Curve::Value
  (const Standard_Real U) const 
{
  gp_Pnt2d P;
  D0(U,P);
  return P;
}

//=======================================================================
//function : Resolution
//purpose  : 
//=======================================================================

inline Standard_Real HLRBRep_Curve::Resolution
  (const Standard_Real R3d) const
{ return HLRBRep_BCurveTool::Resolution(myCurve,R3d); }

//=======================================================================
//function : GetType
//purpose  : 
//=======================================================================

inline GeomAbs_CurveType HLRBRep_Curve::GetType() const 
{ return myType; }

//=======================================================================
//function : Degree
//purpose  : 
//=======================================================================

inline Standard_Integer  HLRBRep_Curve::Degree() const
{ return HLRBRep_BCurveTool::Degree(myCurve); }


//=======================================================================
//function : NbPoles
//purpose  : 
//=======================================================================

inline Standard_Integer  HLRBRep_Curve::NbPoles() const
{ return HLRBRep_BCurveTool::NbPoles(myCurve); }

//=======================================================================
//function : NbKnots
//purpose  : 
//=======================================================================

inline Standard_Integer  HLRBRep_Curve::NbKnots() const
{ return HLRBRep_BCurveTool::NbKnots(myCurve); }


//=======================================================================
//function : IsRational
//purpose  : 
//=======================================================================

inline Standard_Boolean HLRBRep_Curve::IsRational() const
{
  return HLRBRep_BCurveTool::IsRational(myCurve);
}
