EgtGeomKernel 1.5f6 :
- agg. intersezione linee-linee - agg. alle curve metodi per passare da lunghezza a parametro e viceversa - agg. metodi per creare curve composite come poligoni regolari - corr. errore in triangulate con contorni CW - agg. opportune funzioni a TSC.
This commit is contained in:
@@ -328,6 +328,76 @@ CurveLine::GetLength( double& dLen) const
|
||||
return ( dLen > EPS_SMALL) ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
CurveLine::GetLengthAtParam( double dU, double& dLen) const
|
||||
{
|
||||
// verifico lo stato
|
||||
if ( m_nStatus != OK)
|
||||
return false ;
|
||||
|
||||
// fuori dominio del parametro -> errore
|
||||
if ( dU < 0 - EPS_PARAM)
|
||||
return false ;
|
||||
if ( dU > ( 1 + EPS_PARAM))
|
||||
return false ;
|
||||
|
||||
// inizio
|
||||
if ( dU < 0 + EPS_PARAM) {
|
||||
dLen = 0 ;
|
||||
return true ;
|
||||
}
|
||||
|
||||
// la lunghezza totale è la distanza tra gli estremi
|
||||
double dTotLen = Dist( m_PtStart, m_PtEnd) ;
|
||||
|
||||
// fine
|
||||
if ( dU > 1 - EPS_PARAM) {
|
||||
dLen = dTotLen ;
|
||||
return true ;
|
||||
}
|
||||
|
||||
// posizione intermedia
|
||||
dLen = dU * dTotLen ;
|
||||
return true ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
CurveLine::GetParamAtLength( double dLen, double& dU) const
|
||||
{
|
||||
// verifico lo stato
|
||||
if ( m_nStatus != OK)
|
||||
return false ;
|
||||
|
||||
// se prima di inizio, errore
|
||||
if ( dLen < - EPS_SMALL)
|
||||
return false ;
|
||||
|
||||
// inizio
|
||||
if ( dLen < EPS_SMALL) {
|
||||
dU = 0 ;
|
||||
return true ;
|
||||
}
|
||||
|
||||
// la lunghezza totale è la distanza tra gli estremi
|
||||
double dTotLen = Dist( m_PtStart, m_PtEnd) ;
|
||||
|
||||
// se dopo fine, errore
|
||||
if ( dLen > dTotLen + EPS_SMALL)
|
||||
return false ;
|
||||
|
||||
// fine
|
||||
if ( dLen < dTotLen - EPS_SMALL) {
|
||||
dU = 1 ;
|
||||
return true ;
|
||||
}
|
||||
|
||||
// posizione intermedia
|
||||
dU = dLen / dTotLen ;
|
||||
return true ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
CurveLine::IsPointOn( const Point3d& ptP, double dTol) const
|
||||
@@ -433,6 +503,21 @@ CurveLine::TrimEndAtParam( double dUTrim)
|
||||
return TrimEndAtLen( dUTrim * dLen) ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
CurveLine::TrimStartEndAtParam( double dUStartTrim, double dUEndTrim)
|
||||
{
|
||||
// verifico che i trim non cancellino interamente la curva
|
||||
if ( dUStartTrim > dUEndTrim - EPS_PARAM)
|
||||
return false ;
|
||||
// trim finale
|
||||
if ( ! TrimEndAtParam( dUEndTrim))
|
||||
return false ;
|
||||
// trim iniziale con il parametro opportunamente ricalcolato
|
||||
double dNewUStartTrim = dUStartTrim / dUEndTrim ;
|
||||
return TrimStartAtParam( dNewUStartTrim) ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
CurveLine::TrimStartAtLen( double dLenTrim)
|
||||
|
||||
Reference in New Issue
Block a user