#pragma once
//------------------------------------------------------------------------------
/// \file
/// \ingroup stamping
/// \copyright (C) Copyright Aquaveo 2018. Distributed under FreeBSD License
/// (See accompanying file LICENSE or https://aqaveo.com/bsd/license.txt)
//------------------------------------------------------------------------------

//----- Included files ---------------------------------------------------------

// 3. Standard library headers

// 4. External library headers
#include <xmscore/stl/vector.h>

// 5. Shared code headers

//----- Forward declarations ---------------------------------------------------

//----- Namespace declaration --------------------------------------------------

namespace xms
{
//----- Constants / Enumerations -----------------------------------------------

//----- Structs / Classes ------------------------------------------------------

////////////////////////////////////////////////////////////////////////////////
/// \class stXs3dPts
/// \brief class to hold 3d points for a cross section
class stXs3dPts
{
public:
  stXs3dPts()
  : m_left()
  , m_right()
  , m_centerLine()
  {
  }

  VecPt3d2d m_left;     ///< 3d locations of cross section points
  VecPt3d2d m_right;    ///< 3d locations of cross section points
  VecPt3d m_centerLine; ///< only used by guidebank
};

////////////////////////////////////////////////////////////////////////////////
/// \class XmStamper3dPts
/// \brief class to hold 3d points generated by the stamping operation
class XmStamper3dPts
{
public:
  XmStamper3dPts()
  : m_xsPts()
  , m_first_endcap()
  , m_last_endcap()
  {
  }

  stXs3dPts m_xsPts;        ///< 3d locations of cross section points
  stXs3dPts m_first_endcap; ///< 3d locations of first end cap
  stXs3dPts m_last_endcap;  ///< 3d locations of the last end cap
};
/// helper struct to store point indexes
struct csPtIdx
{
  VecInt2d m_left;     ///< indexes of cross section points
  VecInt2d m_right;    ///< indexes of cross section points
  VecInt m_centerLine; ///< used by guidebank
};
/// helper struct to store point indexes
struct cs3dPtIdx
{
  VecInt m_centerLine;     ///< indexes of cross section points
  csPtIdx m_xsPts;         ///< helper struct to store point indexes
  csPtIdx m_first_end_cap; ///< helper struct to store point indexes
  csPtIdx m_last_end_cap;  ///< helper struct to store point indexes
};

//----- Function prototypes ----------------------------------------------------

} // namespace xms
