EgtGeomKernel 1.4l1 : Aggiunto Trim di curve a lunghezza e parametro.
This commit is contained in:
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user