EgtGeomKernel 1.5g3 :

- aggiunto concatenamento di Curve
- aggiunta modifica di punto iniziale e finale di Curve
- aggiunta Add a curva composita con tolleranza
- aggiunto calcolo distanza approssimativa tra due punti (senza radice quadrata)
- riordinate funzioni per modifica e copia curve.
This commit is contained in:
Dario Sassi
2014-07-28 16:17:03 +00:00
parent 56d6307a1c
commit 5d17eb9617
23 changed files with 1321 additions and 187 deletions
+80 -2
View File
@@ -251,9 +251,9 @@ PolyLine::GetLastUPoint( double* pdPar, Point3d* pptP) const
return false ;
if ( pdPar != nullptr)
*pdPar = m_lUPoints.back().first ;
*pdPar = m_iter->first ;
if ( pptP != nullptr)
*pptP = m_lUPoints.back().second ;
*pptP = m_iter->second ;
return true ;
}
@@ -325,6 +325,58 @@ PolyLine::GetNextULine( double* pdIni, Point3d* pptIni, double* pdFin, Point3d*
return true ;
}
//----------------------------------------------------------------------------
bool
PolyLine::GetLastULine( double* pdIni, Point3d* pptIni, double* pdFin, Point3d* pptFin) const
{
// parametro e punto finali
m_iter = m_lUPoints.end() ;
if ( m_iter == m_lUPoints.begin())
return false ;
-- m_iter ;
if ( m_iter == m_lUPoints.end())
return false ;
if ( pdFin != nullptr)
*pdFin = m_iter->first ;
if ( pptFin != nullptr)
*pptFin = m_iter->second ;
// parametro e punto iniziali
if ( m_iter == m_lUPoints.begin())
return false ;
-- m_iter ;
if ( pdIni != nullptr)
*pdIni = m_iter->first ;
if ( pptIni != nullptr)
*pptIni = m_iter->second ;
return true ;
}
//----------------------------------------------------------------------------
bool
PolyLine::GetPrevULine( double* pdIni, Point3d* pptIni, double* pdFin, Point3d* pptFin) const
{
// parametro e punto finali
if ( m_iter == m_lUPoints.end())
return false ;
if ( pdFin != nullptr)
*pdFin = m_iter->first ;
if ( pptFin != nullptr)
*pptFin = m_iter->second ;
// parametro e punto iniziali
if ( m_iter == m_lUPoints.begin())
return false ;
-- m_iter ;
if ( pdIni != nullptr)
*pdIni = m_iter->first ;
if ( pptIni != nullptr)
*pptIni = m_iter->second ;
return true ;
}
//----------------------------------------------------------------------------
bool
PolyLine::NewellPlane( Plane3d& plPlane, double& dArea) const
@@ -387,6 +439,32 @@ PolyLine::IsPlanar( Plane3d& plPlane, double& dArea, double dToler) const
return true ;
}
//----------------------------------------------------------------------------
bool
PolyLine::GetApproxLength( double& dLen) const
{
// calcolo la lunghezza approssimata come somma di ogni singolo tratto lineare
dLen = 0 ;
Point3d ptIni, ptFin ;
for ( bool bFound = GetFirstLine( ptIni, ptFin) ; bFound ; bFound = GetNextLine( ptIni, ptFin)) {
dLen += ApproxDist( ptIni, ptFin) ;
}
return ( dLen > EPS_ZERO) ;
}
//----------------------------------------------------------------------------
bool
PolyLine::GetLength( double& dLen) const
{
// calcolo la lunghezza come somma di ogni singolo tratto lineare
dLen = 0 ;
Point3d ptIni, ptFin ;
for ( bool bFound = GetFirstLine( ptIni, ptFin) ; bFound ; bFound = GetNextLine( ptIni, ptFin)) {
dLen += Dist( ptIni, ptFin) ;
}
return ( dLen > EPS_ZERO) ;
}
//----------------------------------------------------------------------------
bool
PolyLine::GetAreaXY( double& dArea) const