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:
Dario Sassi
2014-06-24 07:05:43 +00:00
parent 4097bcd178
commit f119a5a1be
21 changed files with 1347 additions and 129 deletions
+85
View File
@@ -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)