EgtGeomKernel 1.6a4 :
- DistPointLine correnta per versore non normalizzato - aggiunta GetGeoType a GeomDB e a GdbIterator - in lettura NGE binari aggiunta protezione da contemporanea scrittura - in PolyLine aggiunta funzione per inserimento punti onde raggiungere massima distanza - aggiunto oggetto VolZmap per virtual milling (per ora vuoto) - nuova versione file NGE 1009.
This commit is contained in:
@@ -610,3 +610,48 @@ PolyLine::GetMaxDistanceFromLine( double& dMaxDist, const Point3d& ptAx,
|
||||
|
||||
return true ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
PolyLine::AdjustForMaxSegmentLen( double& dMaxLen)
|
||||
{
|
||||
PNTULIST::iterator iter = m_lUPoints.begin() ;
|
||||
// se non ci sono punti, esco subito
|
||||
if ( iter == m_lUPoints.end())
|
||||
return false ;
|
||||
// imposto il primo punto come precedente
|
||||
double dUprec = iter->second ;
|
||||
Point3d ptPprec = iter->first ;
|
||||
// passo al secondo
|
||||
++ iter ;
|
||||
// ciclo sui punti
|
||||
try {
|
||||
while ( iter != m_lUPoints.end()) {
|
||||
// recupero dati correnti
|
||||
double dUcurr = iter->second ;
|
||||
Point3d ptPcurr = iter->first ;
|
||||
// verifico lunghezza segmento dal precedente
|
||||
double dSqLen = SqDist( ptPprec, ptPcurr) ;
|
||||
if ( dSqLen > dMaxLen * dMaxLen) {
|
||||
double dLen = sqrt( dSqLen) ;
|
||||
// determino il numero di divisioni
|
||||
int nStep = int( dLen / dMaxLen + 0.999) ;
|
||||
// inserisco i punti necessari
|
||||
for ( int i = 1 ; i < nStep ; ++ i) {
|
||||
double dCoeff = double( i) / nStep ;
|
||||
m_lUPoints.insert( iter, POINTU( Media( ptPprec, ptPcurr, dCoeff),
|
||||
(( 1 - dCoeff) * dUprec + dCoeff * dUcurr))) ;
|
||||
}
|
||||
}
|
||||
// passo al successivo
|
||||
dUprec = dUcurr ;
|
||||
ptPprec = ptPcurr ;
|
||||
++ iter ;
|
||||
}
|
||||
}
|
||||
catch (...) {
|
||||
return false ;
|
||||
}
|
||||
|
||||
return true ;
|
||||
}
|
||||
Reference in New Issue
Block a user