EgtGeomKernel 1.4l1 : Aggiunto Trim di curve a lunghezza e parametro.

This commit is contained in:
Dario Sassi
2013-12-16 09:37:57 +00:00
parent fb0ca2906f
commit 7de56883b3
15 changed files with 814 additions and 29 deletions
+99
View File
@@ -23,6 +23,10 @@ using namespace std ;
//----------------------------------------------------------------------------
GEOOBJ_REGISTER( CRV_LINE, "C_LIN", CurveLine) ;
//----------------------------------------------------------------------------
const double CurveLine::PAR_START = 0 ;
const double CurveLine::PAR_END = 1 ;
//----------------------------------------------------------------------------
CurveLine::CurveLine( void)
{
@@ -188,6 +192,11 @@ CurveLine::GetPointD1D2( double dU, Point3d& ptPos, Vector3d& vtDer1, Vector3d&
bool
CurveLine::GetLength( double& dLen) const
{
// verifico lo stato
if ( m_nStatus != OK)
return false ;
// la lunghezza è la distanza tra gli estremi
dLen = Dist( m_PtStart, m_PtEnd) ;
return ( dLen > EPS_SMALL) ;
@@ -197,12 +206,102 @@ CurveLine::GetLength( double& dLen) const
bool
CurveLine::Reverse( void)
{
// verifico lo stato
if ( m_nStatus != OK)
return false ;
// inverto i punti estremi
swap( m_PtStart, m_PtEnd) ;
return true ;
}
//----------------------------------------------------------------------------
bool
CurveLine::TrimStartAtParam( double dUTrim)
{
double dLen ;
// riporto i parametri nel loro range
dUTrim = ( ( dUTrim < PAR_START) ? PAR_START : (( dUTrim > PAR_END) ? PAR_END : dUTrim)) ;
// recupero lunghezza
if ( ! GetLength( dLen))
return false ;
// utilizzo il trim sulle lunghezze
return TrimStartAtLen( dUTrim * dLen) ;
}
//----------------------------------------------------------------------------
bool
CurveLine::TrimEndAtParam( double dUTrim)
{
double dLen ;
// riporto i parametri nel loro range
dUTrim = ( ( dUTrim < PAR_START) ? PAR_START : (( dUTrim > PAR_END) ? PAR_END : dUTrim)) ;
// recupero lunghezza
if ( ! GetLength( dLen))
return false ;
// utilizzo il trim sulle lunghezze
return TrimEndAtLen( dUTrim * dLen) ;
}
//----------------------------------------------------------------------------
bool
CurveLine::TrimStartAtLen( double dLenTrim)
{
double dLen ;
// lunghezze negative vengono considerate nulle
dLenTrim = __max( dLenTrim, 0) ;
// verifico che sia abbastanza lunga
if ( ! GetLength( dLen))
return false ;
if ( ( dLen - dLenTrim) < EPS_SMALL)
return false ;
// eseguo il trim
if ( dLenTrim > EPS_ZERO)
m_PtStart = Media( m_PtStart, m_PtEnd, ( dLenTrim / dLen)) ;
// con i controlli sopra fatti rimane validata
return true ;
}
//----------------------------------------------------------------------------
bool
CurveLine::TrimEndAtLen( double dLenTrim)
{
double dLen ;
// lunghezze negative vengono considerate nulle
dLenTrim = __max( dLenTrim, 0) ;
// verifico che sia abbastanza lunga
if ( ! GetLength( dLen))
return false ;
if ( dLenTrim < EPS_SMALL)
return false ;
// eseguo il trim
if ( ( dLen - dLenTrim) > EPS_ZERO)
m_PtEnd = Media( m_PtStart, m_PtEnd, ( dLenTrim / dLen)) ;
// con i controlli sopra fatti rimane validata
return true ;
}
//----------------------------------------------------------------------------
bool
CurveLine::Translate( const Vector3d& vtMove)