EgtGeomKernel 1.8h3 :
- migliorie e correzioni su Zmap - aggiunta a PointGrid3d nuova FindNearest - migliorie a TriMesh.
This commit is contained in:
@@ -354,6 +354,36 @@ PointGrid3d::FindNearest( const Point3d& ptTest, INTVECTOR& vnIds)
|
||||
}
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
PointGrid3d::FindNearest( const Point3d& ptTest, double dTol, int& nId)
|
||||
{
|
||||
// determino il range di celle sui tre assi
|
||||
IBox iBox ;
|
||||
if ( ! Get3dRangeNbr( ptTest, dTol, iBox))
|
||||
return false ;
|
||||
// ciclo su tutte le celle del range
|
||||
bool bFound = false ;
|
||||
double dMinSqDist = dTol * dTol ;
|
||||
for ( int i = iBox.nXmin ; i <= iBox.nXmax ; ++ i) {
|
||||
for ( int j = iBox.nYmin ; j <= iBox.nYmax ; ++ j) {
|
||||
for ( int k = iBox.nZmin ; k <= iBox.nZmax ; ++ k) {
|
||||
IPNTI_UMMAP_CRANGE MMrange = m_MMap.equal_range( PointHash( i, j, k)) ;
|
||||
for ( ; MMrange.first != MMrange.second ; ++ MMrange.first) {
|
||||
double dSqDist = SqDist( (*MMrange.first).second.first, ptTest) ;
|
||||
if ( dSqDist < dMinSqDist) {
|
||||
bFound = true ;
|
||||
dMinSqDist = dSqDist ;
|
||||
nId = (*MMrange.first).second.second ;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return bFound ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
PointGrid3d::First( int& nId)
|
||||
|
||||
Reference in New Issue
Block a user