EgtGeomKernel 2.2g1 :
- corrette booleane di trimesh per facce che si intersecano solo su edge di triangoli - a VolZmap aggiunta funzione GetPartMinDistFromPoint.
This commit is contained in:
+55
@@ -14,6 +14,7 @@
|
||||
//--------------------------- Include ----------------------------------------
|
||||
#include "stdafx.h"
|
||||
#include "VolZmap.h"
|
||||
#include "DistPointLine.h"
|
||||
#include "GeoObjFactory.h"
|
||||
#include "NgeWriter.h"
|
||||
#include "NgeReader.h"
|
||||
@@ -1359,6 +1360,60 @@ VolZmap::RemovePart( int nPart)
|
||||
return true ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
int
|
||||
VolZmap::GetPartMinDistFromPoint( const Point3d& ptP) const
|
||||
{
|
||||
// Verifico lo stato e che siano definibili le componenti connesse
|
||||
if ( m_nStatus != OK || m_nMapNum == 1)
|
||||
return - 1 ;
|
||||
// Se il numero di componenti è indefinito, lo ricalcolo
|
||||
if ( m_nConnectedCompoCount == -1)
|
||||
const_cast<VolZmap*>( this)->CheckMapConnection() ;
|
||||
// Se non vi sono componenti, abbiamo finito
|
||||
if ( m_nConnectedCompoCount == 0)
|
||||
return - 1 ;
|
||||
// Porto il punto nel riferimento intrinseco
|
||||
Point3d ptPL = ptP ;
|
||||
ptPL.ToLoc( m_MapFrame) ;
|
||||
// Trovo la componente connessa di minima distanza dal punto
|
||||
double dMinDist = DBL_MAX ;
|
||||
int nMinDistPart = - 1 ;
|
||||
for ( int nMap = 0 ; nMap < m_nMapNum ; ++ nMap) {
|
||||
for ( int nDex = 0 ; nDex < m_nDim[nMap] ; ++ nDex) {
|
||||
double dX = ( ( nDex % m_nNx[nMap]) + 0.5) * m_dStep ;
|
||||
double dY = ( ( nDex / m_nNx[nMap]) + 0.5) * m_dStep ;
|
||||
int nIntervalNum = int( m_Values[nMap][nDex].size()) ;
|
||||
for ( int nInt = 0 ; nInt < nIntervalNum ; ++ nInt) {
|
||||
Point3d ptSt( dX, dY, m_Values[nMap][nDex][nInt].dMin) ;
|
||||
Point3d ptEn( dX, dY, m_Values[nMap][nDex][nInt].dMax) ;
|
||||
// Riporto le coordinate cicliche delle normali nell'ordine di partenza (da griglia a sistema intrinseco)
|
||||
if ( nMap == 1) {
|
||||
swap( ptSt.x, ptSt.z) ;
|
||||
swap( ptSt.y, ptSt.z) ;
|
||||
swap( ptEn.x, ptEn.z) ;
|
||||
swap( ptEn.y, ptEn.z) ;
|
||||
}
|
||||
else if ( nMap == 2) {
|
||||
swap( ptSt.y, ptSt.z) ;
|
||||
swap( ptSt.x, ptSt.z) ;
|
||||
swap( ptEn.y, ptEn.z) ;
|
||||
swap( ptEn.x, ptEn.z) ;
|
||||
}
|
||||
// Calcolo la distanza del punto dal segmento corrente. Se è minore della minima distanza aggiorno quest'ultima
|
||||
// e la corrispondente componente connessa di minima distanza con la distanza e la componente connessa correnti.
|
||||
double dDist ;
|
||||
DistPointLine DistCalc( ptPL, ptSt, ptEn) ;
|
||||
if ( DistCalc.GetDist( dDist) && dDist < dMinDist) {
|
||||
dMinDist = dDist ;
|
||||
nMinDistPart = m_Values[nMap][nDex][nInt].nCompo ;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return nMinDistPart ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
VolZmap::SetToModifyDexelBlocks( int nGrid, int nDex, int nInt)
|
||||
|
||||
Reference in New Issue
Block a user