// Created on: 1995-07-18
// Created by: Modelistation
// Copyright (c) 1995-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 <gp_Vec.hxx>
#include <gp_Pnt.hxx>
#include <gp_Parab.hxx>
#include <gp_Lin.hxx>
#include <gp_Elips.hxx>
#include <gp_Hypr.hxx>
#include <gp_Circ.hxx>
#include <Geom_BezierCurve.hxx>
#include <Geom_BSplineCurve.hxx>
#include <Adaptor3d_Curve.hxx>


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

inline Standard_Real Extrema_CurveTool::FirstParameter(const Adaptor3d_Curve& C)
{
  return C.FirstParameter();
}

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

inline Standard_Real Extrema_CurveTool::LastParameter(const Adaptor3d_Curve& C)
{
  return C.LastParameter();
}

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

inline gp_Pnt Extrema_CurveTool::Value(const Adaptor3d_Curve& C,
				       const Standard_Real U)
{
  return C.Value(U);
}

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

inline void Extrema_CurveTool::D0(const Adaptor3d_Curve& C, 
					const Standard_Real U, 
					gp_Pnt& P)
{
  C.D0(U, P);
}

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

inline void Extrema_CurveTool::D1(const Adaptor3d_Curve& C,
				  const Standard_Real U,
				  gp_Pnt& P,
				  gp_Vec& V)
{
  C.D1(U, P, V);
}

//=======================================================================
//function : D2
//purpose  : 
//=======================================================================

inline void Extrema_CurveTool::D2(const Adaptor3d_Curve& C,
				  const Standard_Real U,
				  gp_Pnt& P,
				  gp_Vec& V1,
				  gp_Vec& V2)
{
  C.D2(U, P, V1, V2);
}

//=======================================================================
//function : D3
//purpose  : 
//=======================================================================

 inline void Extrema_CurveTool::D3(const Adaptor3d_Curve& C, 
					 const Standard_Real U, 
					 gp_Pnt& P, 
					 gp_Vec& V1, 
					 gp_Vec& V2, 
					 gp_Vec& V3)
{
  C.D3(U, P, V1, V2, V3);
}

//=======================================================================
//function : DN
//purpose  : 
//=======================================================================
inline gp_Vec Extrema_CurveTool::DN(const Adaptor3d_Curve& C, 
					     const Standard_Real U, 
					     const Standard_Integer N)
{
  return C.DN(U, N);
}


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

inline GeomAbs_Shape Extrema_CurveTool::Continuity(const Adaptor3d_Curve& C)
{
  return C.Continuity();
}

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

inline Standard_Integer Extrema_CurveTool::NbIntervals(Adaptor3d_Curve& C,
						       const GeomAbs_Shape S)
{
  return C.NbIntervals(S);
}


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

inline void Extrema_CurveTool::Intervals(Adaptor3d_Curve& C,
					 TColStd_Array1OfReal& T,
					 const GeomAbs_Shape   S)
{
  C.Intervals(T, S);
}

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

inline Standard_Real Extrema_CurveTool::Period(const Adaptor3d_Curve& C)
{
  return C.Period();
}


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

inline GeomAbs_CurveType Extrema_CurveTool::GetType(const Adaptor3d_Curve& C)
{
  return C.GetType();
}

//=======================================================================
//function : Line
//purpose  : 
//=======================================================================

inline gp_Lin Extrema_CurveTool::Line(const Adaptor3d_Curve& C)
{
  return C.Line();
}

//=======================================================================
//function : Circle
//purpose  : 
//=======================================================================

inline gp_Circ Extrema_CurveTool::Circle(const Adaptor3d_Curve& C)
{
  return C.Circle();
}

//=======================================================================
//function : Ellipse
//purpose  : 
//=======================================================================

inline gp_Elips Extrema_CurveTool::Ellipse(const Adaptor3d_Curve& C)
{
  return C.Ellipse();
}

//=======================================================================
//function : Hyperbola
//purpose  : 
//=======================================================================

inline gp_Hypr Extrema_CurveTool::Hyperbola(const Adaptor3d_Curve& C)
{
  return C.Hyperbola();
}

//=======================================================================
//function : Parabola
//purpose  : 
//=======================================================================

inline gp_Parab Extrema_CurveTool::Parabola(const Adaptor3d_Curve& C)
{
  return C.Parabola();
}
//=======================================================================
//function : NbPoles
//purpose  : 
//=======================================================================

 inline Standard_Integer Extrema_CurveTool::NbPoles(const Adaptor3d_Curve& C)
{
  return C.NbPoles();
}

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

 inline Standard_Integer Extrema_CurveTool::Degree(const Adaptor3d_Curve& C)
{
  return C.Degree();
}

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

 inline Standard_Boolean Extrema_CurveTool::IsRational(const Adaptor3d_Curve& C)
{
  return C.IsRational();
}

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

 inline Standard_Integer Extrema_CurveTool::NbKnots(const Adaptor3d_Curve& C)
{
  return C.NbKnots();
}


//=======================================================================
//function : Bezier
//purpose  : 
//=======================================================================

inline Handle(Geom_BezierCurve) Extrema_CurveTool::Bezier(const Adaptor3d_Curve& C)
{
  return C.Bezier();
}

//=======================================================================
//function : BSpline
//purpose  : 
//=======================================================================

inline Handle(Geom_BSplineCurve) Extrema_CurveTool::BSpline(const Adaptor3d_Curve& C)
{
  return C.BSpline();
}

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

inline Standard_Real Extrema_CurveTool::Resolution(const Adaptor3d_Curve& C,
						   const Standard_Real R3d) 
{
  return C.Resolution(R3d);
}
