Files
EgtGeomKernel/PolyArc.cpp
T
Dario Sassi 77e74ccf4e EgtGeomKernel 1.5h3 :
- aggiunta IsFlat a tutte le Curve 
- aggiunta ApproxWithArcs a tutte le Curve 
- aggiunto oggetto PolyArc (raccolta ordinata di linee e archi con bulge)
- aggiunto oggetto PointsPCA per stima componenti principali di un insieme di punti
- FromSpheriical e FromPolar di Vector3d sono diventati funzioni e aggiunto FromUprightOrtho
- aggiunte Invert e a Vector3d.
2014-08-15 17:36:08 +00:00

177 lines
4.4 KiB
C++

//----------------------------------------------------------------------------
// EgalTech 2014-2014
//----------------------------------------------------------------------------
// File : PolyArc.cpp Data : 14.08.14 Versione : 1.5h3
// Contenuto : Implementazione della classe PolyArc.
//
//
//
// Modifiche : 14.08.14 DS Creazione modulo.
//
//
//----------------------------------------------------------------------------
//--------------------------- Include ----------------------------------------
#include "stdafx.h"
#include "\EgtDev\Include\EGkPolyArc.h"
//----------------------------------------------------------------------------
PolyArc::PolyArc( void)
{
m_nCount = 0 ;
m_iter = m_lUPointBs.end() ;
}
//----------------------------------------------------------------------------
PolyArc::~PolyArc( void)
{
}
//----------------------------------------------------------------------------
bool
PolyArc::Clear( void)
{
m_nCount = 0 ;
m_lUPointBs.clear() ;
m_iter = m_lUPointBs.end() ;
return true ;
}
//----------------------------------------------------------------------------
bool
PolyArc::AddUPoint( double dPar, const Point3d& ptP, double dBulge)
{
try {
m_lUPointBs.push_back( UPointB( dPar, ptP, dBulge)) ;
}
catch (...) {
return false ;
}
m_nCount ++ ;
return true ;
}
//----------------------------------------------------------------------------
bool
PolyArc::EraseFirstUPoint( void)
{
if ( m_lUPointBs.empty())
return false ;
m_lUPointBs.pop_front() ;
m_nCount -- ;
return true ;
}
//----------------------------------------------------------------------------
bool
PolyArc::EraseLastUPoint( void)
{
if ( m_lUPointBs.empty())
return false ;
m_lUPointBs.pop_back() ;
m_nCount -- ;
return true ;
}
//----------------------------------------------------------------------------
bool
PolyArc::AddOffsetToU( double dOffset)
{
UPNTBLIST::iterator iter ;
for ( iter = m_lUPointBs.begin() ; iter != m_lUPointBs.end() ; ++ iter)
iter->dU += dOffset ;
return true ;
}
//----------------------------------------------------------------------------
bool
PolyArc::ToGlob( const Frame3d& frRef)
{
UPNTBLIST::iterator iter ;
for ( iter = m_lUPointBs.begin() ; iter != m_lUPointBs.end() ; ++ iter)
iter->ptP.ToGlob( frRef) ;
return true ;
}
//----------------------------------------------------------------------------
bool
PolyArc::ToLoc( const Frame3d& frRef)
{
UPNTBLIST::iterator iter ;
for ( iter = m_lUPointBs.begin() ; iter != m_lUPointBs.end() ; ++ iter)
iter->ptP.ToLoc( frRef) ;
return true ;
}
//----------------------------------------------------------------------------
bool
PolyArc::LocToLoc( const Frame3d& frOri, const Frame3d& frDest)
{
UPNTBLIST::iterator iter ;
for ( iter = m_lUPointBs.begin() ; iter != m_lUPointBs.end() ; ++ iter)
iter->ptP.LocToLoc( frOri, frDest) ;
return true ;
}
//----------------------------------------------------------------------------
bool
PolyArc::Splice( PolyArc& PA)
{
m_lUPointBs.splice( m_lUPointBs.end(), PA.m_lUPointBs) ;
m_nCount += PA.GetPointNbr() ;
PA.m_nCount = 0 ;
return true ;
}
//----------------------------------------------------------------------------
bool
PolyArc::GetFirstUPoint( double* pdPar, Point3d* pptP, double* pdBulge) const
{
m_iter = m_lUPointBs.begin() ;
if ( m_iter == m_lUPointBs.end())
return false ;
if ( pdPar != nullptr)
*pdPar = m_iter->dU ;
if ( pptP != nullptr)
*pptP = m_iter->ptP ;
if ( pdBulge != nullptr)
*pdBulge = m_iter->dB ;
return true ;
}
//----------------------------------------------------------------------------
bool
PolyArc::GetNextUPoint( double* pdPar, Point3d* pptP, double* pdBulge, bool bNotLast) const
{
if ( m_iter == m_lUPointBs.end())
return false ;
++ m_iter ;
if ( m_iter == m_lUPointBs.end())
return false ;
if ( bNotLast && m_iter == -- ( m_lUPointBs.end()))
return false ;
if ( pdPar != nullptr)
*pdPar = m_iter->dU ;
if ( pptP != nullptr)
*pptP = m_iter->ptP ;
if ( pdBulge != nullptr)
*pdBulge = m_iter->dB ;
return true ;
}