// Created on: 1993-03-30
// Created by: Laurent BUCHARD
// Copyright (c) 1993-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 TheMultiLine_hxx

#include "gp_Pnt.hxx"
#include "NCollection_Array1.hxx"
#include "gp_Pnt2d.hxx"
#include "gp_Vec.hxx"
#include "gp_Vec2d.hxx"

#include "Approx_Status.hxx"

//=================================================================================================

inline int ApproxInt_MultiLineTool::NbP2d(const TheMultiLine& ML)
{
  return (ML.NbP2d());
}

//=================================================================================================

inline int ApproxInt_MultiLineTool::NbP3d(const TheMultiLine& ML)
{
  return (ML.NbP3d());
}

//=================================================================================================

inline int ApproxInt_MultiLineTool::FirstPoint(const TheMultiLine& ML)
{
  return (ML.FirstPoint());
}

//=================================================================================================

inline int ApproxInt_MultiLineTool::LastPoint(const TheMultiLine& ML)
{
  return (ML.LastPoint());
}

//=================================================================================================

inline void ApproxInt_MultiLineTool::Value(const TheMultiLine&         ML,
                                           const int                   Index,
                                           NCollection_Array1<gp_Pnt>& TabPnt)
{
  ML.Value(Index, TabPnt);
}

//=================================================================================================

inline void ApproxInt_MultiLineTool::Value(const TheMultiLine&           ML,
                                           const int                     Index,
                                           NCollection_Array1<gp_Pnt2d>& TabPnt2d)
{
  ML.Value(Index, TabPnt2d);
}

//=================================================================================================

inline void ApproxInt_MultiLineTool::Value(const TheMultiLine&           ML,
                                           const int                     Index,
                                           NCollection_Array1<gp_Pnt>&   TabPnt,
                                           NCollection_Array1<gp_Pnt2d>& TabPnt2d)
{
  ML.Value(Index, TabPnt, TabPnt2d);
}

//=================================================================================================

inline bool ApproxInt_MultiLineTool::Tangency(const TheMultiLine&         ML,
                                              const int                   Index,
                                              NCollection_Array1<gp_Vec>& TabVec)
{
  return (ML.Tangency(Index, TabVec));
}

//=================================================================================================

inline bool ApproxInt_MultiLineTool::Tangency(const TheMultiLine&           ML,
                                              const int                     Index,
                                              NCollection_Array1<gp_Vec2d>& TabVec2d)
{
  return (ML.Tangency(Index, TabVec2d));
}

//=================================================================================================

inline bool ApproxInt_MultiLineTool::Tangency(const TheMultiLine&           ML,
                                              const int                     Index,
                                              NCollection_Array1<gp_Vec>&   TabVec,
                                              NCollection_Array1<gp_Vec2d>& TabVec2d)
{
  return (ML.Tangency(Index, TabVec, TabVec2d));
}

//=================================================================================================

inline bool ApproxInt_MultiLineTool::Curvature(const TheMultiLine& // ML
                                               ,
                                               const int // Index
                                               ,
                                               NCollection_Array1<gp_Vec>&)
{ // TabVec
  return false;
}

//=================================================================================================

inline bool ApproxInt_MultiLineTool::Curvature(const TheMultiLine& // ML
                                               ,
                                               const int // Index
                                               ,
                                               NCollection_Array1<gp_Vec2d>&)
{ // TabVec2d
  return false;
}

//=================================================================================================

inline bool ApproxInt_MultiLineTool::Curvature(const TheMultiLine& // ML
                                               ,
                                               const int // Index
                                               ,
                                               NCollection_Array1<gp_Vec>& // TabVec
                                               ,
                                               NCollection_Array1<gp_Vec2d>&)
{ // TabVec2d
  return false;
}

//=================================================================================================

inline Approx_Status ApproxInt_MultiLineTool::WhatStatus(const TheMultiLine& ML,
                                                         const int,
                                                         const int)
{
  //--  PointsAdded,
  //--  NoPointsAdded,
  //--  NoApproximation
  //--  Approx_PointsAdded
  return (ML.WhatStatus());
}

//=================================================================================================

inline TheMultiLine ApproxInt_MultiLineTool::MakeMLBetween(const TheMultiLine& ML,
                                                           const int           I1,
                                                           const int           I2,
                                                           const int           NbPMin)
{

  return (ML.MakeMLBetween(I1, I2, NbPMin));
}

//=================================================================================================

inline bool ApproxInt_MultiLineTool::MakeMLOneMorePoint(const TheMultiLine& ML,
                                                        const int           I1,
                                                        const int           I2,
                                                        const int           indbad,
                                                        TheMultiLine&       OtherLine)
{
  return (ML.MakeMLOneMorePoint(I1, I2, indbad, OtherLine));
}

inline void ApproxInt_MultiLineTool::Dump(const TheMultiLine& ML)
{
  ML.Dump();
}

//=================================================================================================
