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:
Dario Sassi
2015-01-26 07:49:18 +00:00
parent 339988c139
commit 0b8a267b7b
16 changed files with 410 additions and 15 deletions
+45
View File
@@ -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 ;
}