EgtGeomKernel 2.2i2 :
- in VolZmap possibilità di modifica dinamica del rapporto VoxToDex con la funzione ChangeResolution - in VolZmap calcolo triangoli superficie corretta gestione soluzioni duali - in VolZmap corretti problemi quando non c'è alcun dexel.
This commit is contained in:
+18
-103
@@ -46,16 +46,8 @@ VolZmap::Create( const Point3d& ptO, double dLengthX, double dLengthY, double dL
|
||||
m_MapFrame.Set( ptO, X_AX, Y_AX, Z_AX) ;
|
||||
|
||||
// Definisco i vettori dei limiti su indici
|
||||
m_nNx[0] = int( ( dLengthX + EPS_SMALL) / m_dStep + 0.5) ;
|
||||
m_nNy[0] = int( ( dLengthY + EPS_SMALL) / m_dStep + 0.5) ;
|
||||
|
||||
// Calcolo il numero di voxel lungo X e Y
|
||||
int nVoxNumX = m_nNx[0] / N_DEXVOXRATIO + ( m_nNx[0] % N_DEXVOXRATIO == 0 ? 1 : 2) ;
|
||||
int nVoxNumY = m_nNy[0] / N_DEXVOXRATIO + ( m_nNy[0] % N_DEXVOXRATIO == 0 ? 1 : 2) ;
|
||||
|
||||
// Definisco il numero di blocchi lungo x e y
|
||||
m_nFracLin[0] = max( 1, int( nVoxNumX * 1.0 / m_nVoxNumPerBlock + 0.7)) ;
|
||||
m_nFracLin[1] = max( 1, int( nVoxNumY * 1.0 / m_nVoxNumPerBlock + 0.7)) ;
|
||||
m_nNx[0] = max( int( ( dLengthX + EPS_SMALL) / m_dStep + 0.5), 1) ;
|
||||
m_nNy[0] = max( int( ( dLengthY + EPS_SMALL) / m_dStep + 0.5), 1) ;
|
||||
|
||||
// Numero di componenti connesse
|
||||
m_nConnectedCompoCount = 1 ;
|
||||
@@ -63,13 +55,9 @@ VolZmap::Create( const Point3d& ptO, double dLengthX, double dLengthY, double dL
|
||||
// Se tridexel
|
||||
if ( bTriDex) {
|
||||
m_nNx[1] = m_nNy[0] ;
|
||||
m_nNy[1] = int( ( dLengthZ + EPS_SMALL) / m_dStep + 0.5) ;
|
||||
m_nNy[1] = max( int( ( dLengthZ + EPS_SMALL) / m_dStep + 0.5), 1) ;
|
||||
m_nNx[2] = m_nNy[1] ;
|
||||
m_nNy[2] = m_nNx[0] ;
|
||||
// Calcolo il numero di voxel lungo Z
|
||||
int nVoxNumZ = m_nNy[1] / N_DEXVOXRATIO + ( m_nNy[1] % N_DEXVOXRATIO == 0 ? 1 : 2) ;
|
||||
// Definisco il numero di blocchi lungo z
|
||||
m_nFracLin[2] = max( 1, int( nVoxNumZ * 1.0 / m_nVoxNumPerBlock + 0.7)) ;
|
||||
}
|
||||
|
||||
// altrimenti mono dexel
|
||||
@@ -78,10 +66,12 @@ VolZmap::Create( const Point3d& ptO, double dLengthX, double dLengthY, double dL
|
||||
m_nNy[1] = 0 ;
|
||||
m_nNx[2] = 0 ;
|
||||
m_nNy[2] = 0 ;
|
||||
// Definisco il numero di blocchi lungo z
|
||||
m_nFracLin[2] = 1 ;
|
||||
}
|
||||
|
||||
// Definisco il numero di blocchi lungo x,y e z
|
||||
if ( ! CalcBlockNum())
|
||||
return false ;
|
||||
|
||||
// Definizione della mappa
|
||||
|
||||
// Creazione delle mappe
|
||||
@@ -133,28 +123,9 @@ VolZmap::Create( const Point3d& ptO, double dLengthX, double dLengthY, double dL
|
||||
m_dMinZ[2] = 0 ;
|
||||
m_dMaxZ[2] = ( bTriDex ? dLengthY : 0) ;
|
||||
|
||||
// Dimensiono e setto il vettore dei blocchi a da ricalcolare e il vettore di contatori di aggiornamenti della grafica
|
||||
m_nNumBlock = m_nFracLin[0] * m_nFracLin[1] * m_nFracLin[2] ;
|
||||
m_BlockToUpdate.clear() ;
|
||||
m_BlockToUpdate.resize( m_nNumBlock, true) ;
|
||||
m_BlockUpdatingCounter.clear() ;
|
||||
m_BlockUpdatingCounter.resize( m_nNumBlock + ( m_nMapNum == 1 ? 0 : 1), 0) ;
|
||||
|
||||
// Tipologia
|
||||
// Tipologia
|
||||
m_nShape = BOX ;
|
||||
|
||||
// Dimensiono raccolta di voxel, triangoli di feature tra blocchi e di segnalatori di materiale fra voxel
|
||||
m_InterBlockVox.resize( m_nNumBlock) ;
|
||||
m_InterBlockOriginalSharpTria.resize( m_nNumBlock) ;
|
||||
m_InterBlockSharpTria.resize( m_nNumBlock) ;
|
||||
m_BlockSharpTria.resize( m_nNumBlock) ;
|
||||
m_BlockSmoothTria.resize( m_nNumBlock) ;
|
||||
m_BlockBigTria.resize( m_nNumBlock) ;
|
||||
m_SingleMapTria.resize( m_nNumBlock) ;
|
||||
m_SliceXY.resize( m_nNumBlock) ;
|
||||
m_SliceXZ.resize( m_nNumBlock) ;
|
||||
m_SliceYZ.resize( m_nNumBlock) ;
|
||||
|
||||
|
||||
// Aggiornamento dello stato
|
||||
m_nStatus = OK ;
|
||||
|
||||
@@ -195,14 +166,6 @@ VolZmap::CreateFromFlatRegion( const ISurfFlatRegion& Surf, double dDimZ, double
|
||||
// Ridimensiono il vettore di dexel e creo lo Zmap
|
||||
m_Values[0].resize( m_nDim[0]) ;
|
||||
|
||||
// Calcolo il numero di voxel lungo X e Y
|
||||
int nVoxNumX = m_nNx[0] / N_DEXVOXRATIO + ( m_nNx[0] % N_DEXVOXRATIO == 0 ? 1 : 2) ;
|
||||
int nVoxNumY = m_nNy[0] / N_DEXVOXRATIO + ( m_nNy[0] % N_DEXVOXRATIO == 0 ? 1 : 2) ;
|
||||
|
||||
// Definisco il numero di blocchi lungo x e y
|
||||
m_nFracLin[0] = max( 1, int( nVoxNumX * 1.0 / m_nVoxNumPerBlock + 0.7)) ;
|
||||
m_nFracLin[1] = max( 1, int( nVoxNumY * 1.0 / m_nVoxNumPerBlock + 0.7)) ;
|
||||
|
||||
// Numero di componenti connesse
|
||||
m_nConnectedCompoCount = Surf.GetChunkCount() ;
|
||||
|
||||
@@ -216,10 +179,6 @@ VolZmap::CreateFromFlatRegion( const ISurfFlatRegion& Surf, double dDimZ, double
|
||||
m_nNy[2] = m_nNx[0] ;
|
||||
m_nDim[2] = m_nNx[2] * m_nNy[2] ;
|
||||
m_Values[2].resize( m_nDim[2]) ;
|
||||
// Calcolo il numero di voxel lungo Z
|
||||
int nVoxNumZ = m_nNy[1] / N_DEXVOXRATIO + ( m_nNy[1] % N_DEXVOXRATIO == 0 ? 1 : 2) ;
|
||||
// Definisco il numero di blocchi lungo z
|
||||
m_nFracLin[2] = max( 1, int( nVoxNumZ * 1.0 / m_nVoxNumPerBlock + 0.7)) ;
|
||||
}
|
||||
|
||||
else {
|
||||
@@ -229,10 +188,12 @@ VolZmap::CreateFromFlatRegion( const ISurfFlatRegion& Surf, double dDimZ, double
|
||||
m_nNx[2] = 0 ;
|
||||
m_nNy[2] = 0 ;
|
||||
m_nDim[2] = 0 ;
|
||||
// Definisco il numero di blocchi lungo z
|
||||
m_nFracLin[2] = 1 ;
|
||||
}
|
||||
|
||||
// Definisco il numero di blocchi lungo x,y e z
|
||||
if ( ! CalcBlockNum())
|
||||
return false ;
|
||||
|
||||
// Metto in cache le curve di contorno della regione
|
||||
ICURVEPOVECTOR vpCrvs ;
|
||||
INTVECTOR vnCompo ;
|
||||
@@ -447,25 +408,6 @@ VolZmap::CreateFromFlatRegion( const ISurfFlatRegion& Surf, double dDimZ, double
|
||||
m_dMinZ[2] = 0 ;
|
||||
m_dMaxZ[2] = ( bTriDex ? dLengthY : 0) ;
|
||||
|
||||
// Dimensiono e setto il vettore dei blocchi a da ricalcolare e il vettore di contatori di aggiornamenti della grafica
|
||||
m_nNumBlock = m_nFracLin[0] * m_nFracLin[1] * m_nFracLin[2] ;
|
||||
m_BlockToUpdate.clear() ;
|
||||
m_BlockToUpdate.resize( m_nNumBlock, true) ;
|
||||
m_BlockUpdatingCounter.clear() ;
|
||||
m_BlockUpdatingCounter.resize( m_nNumBlock + ( m_nMapNum == 1 ? 0 : 1), 0) ;
|
||||
|
||||
// Dimensiono raccolta di voxel, triangoli di feature tra blocchi e di segnalatori di materiale fra voxel
|
||||
m_InterBlockVox.resize( m_nNumBlock) ;
|
||||
m_InterBlockOriginalSharpTria.resize( m_nNumBlock) ;
|
||||
m_InterBlockSharpTria.resize( m_nNumBlock) ;
|
||||
m_BlockSharpTria.resize( m_nNumBlock) ;
|
||||
m_BlockSmoothTria.resize( m_nNumBlock) ;
|
||||
m_BlockBigTria.resize( m_nNumBlock) ;
|
||||
m_SingleMapTria.resize( m_nNumBlock) ;
|
||||
m_SliceXY.resize( m_nNumBlock) ;
|
||||
m_SliceXZ.resize( m_nNumBlock) ;
|
||||
m_SliceYZ.resize( m_nNumBlock) ;
|
||||
|
||||
// Tipologia
|
||||
m_nShape = ( IsBox() ? BOX : EXTRUSION) ;
|
||||
|
||||
@@ -515,13 +457,7 @@ VolZmap::CreateFromTriMesh( const ISurfTriMesh& Surf, double dStep, bool bTriDex
|
||||
m_nDim[0] = m_nNx[0] * m_nNy[0] ;
|
||||
// Ridimensiono il vettore di dexel e creo lo Zmap
|
||||
m_Values[0].resize( m_nDim[0]) ;
|
||||
// Calcolo il numero di voxel lungo X e Y
|
||||
int nVoxNumX = m_nNx[0] / N_DEXVOXRATIO + ( m_nNx[0] % N_DEXVOXRATIO == 0 ? 1 : 2) ;
|
||||
int nVoxNumY = m_nNy[0] / N_DEXVOXRATIO + ( m_nNy[0] % N_DEXVOXRATIO == 0 ? 1 : 2) ;
|
||||
// Definisco il numero di blocchi lungo x e y
|
||||
m_nFracLin[0] = max( 1, int( nVoxNumX * 1.0 / m_nVoxNumPerBlock + 0.7)) ;
|
||||
m_nFracLin[1] = max( 1, int( nVoxNumY * 1.0 / m_nVoxNumPerBlock + 0.7)) ;
|
||||
|
||||
|
||||
// Numero di componenti connesse da calcolare
|
||||
m_nConnectedCompoCount = - 1 ;
|
||||
|
||||
@@ -535,10 +471,6 @@ VolZmap::CreateFromTriMesh( const ISurfTriMesh& Surf, double dStep, bool bTriDex
|
||||
m_nNy[2] = m_nNx[0] ;
|
||||
m_nDim[2] = m_nNx[2] * m_nNy[2] ;
|
||||
m_Values[2].resize( m_nDim[2]) ;
|
||||
// Calcolo il numero di voxel lungo Z
|
||||
int nVoxNumZ = m_nNy[1] / N_DEXVOXRATIO + ( m_nNy[1] % N_DEXVOXRATIO == 0 ? 1 : 2) ;
|
||||
// Definisco il numero di blocchi lungo z
|
||||
m_nFracLin[2] = max( 1, int( nVoxNumZ * 1.0 / m_nVoxNumPerBlock + 0.7)) ;
|
||||
}
|
||||
|
||||
else {
|
||||
@@ -548,10 +480,12 @@ VolZmap::CreateFromTriMesh( const ISurfTriMesh& Surf, double dStep, bool bTriDex
|
||||
m_nNx[2] = 0 ;
|
||||
m_nNy[2] = 0 ;
|
||||
m_nDim[2] = 0 ;
|
||||
// Definisco il numero di blocchi lungo z
|
||||
m_nFracLin[2] = 1 ;
|
||||
}
|
||||
|
||||
// Definisco il numero di blocchi lungo x,y e z
|
||||
if ( ! CalcBlockNum())
|
||||
return false ;
|
||||
|
||||
// ciclo sulle griglie
|
||||
for ( int g = 0 ; g < m_nMapNum ; ++ g) {
|
||||
|
||||
@@ -667,25 +601,6 @@ VolZmap::CreateFromTriMesh( const ISurfTriMesh& Surf, double dStep, bool bTriDex
|
||||
m_dMinZ[2] = 0 ;
|
||||
m_dMaxZ[2] = ( bTriDex ? vtLen.y : 0) ;
|
||||
|
||||
// Dimensiono e setto il vettore dei blocchi a da ricalcolare e il vettore di contatori di aggiornamenti della grafica
|
||||
m_nNumBlock = m_nFracLin[0] * m_nFracLin[1] * m_nFracLin[2] ;
|
||||
m_BlockToUpdate.clear() ;
|
||||
m_BlockToUpdate.resize( m_nNumBlock, true) ;
|
||||
m_BlockUpdatingCounter.clear() ;
|
||||
m_BlockUpdatingCounter.resize( m_nNumBlock + ( m_nMapNum == 1 ? 0 : 1), 0) ;
|
||||
|
||||
// Dimensiono raccolta di voxel, triangoli di feature tra blocchi e di segnalatori di materiale fra voxel
|
||||
m_InterBlockVox.resize( m_nNumBlock) ;
|
||||
m_InterBlockOriginalSharpTria.resize( m_nNumBlock) ;
|
||||
m_InterBlockSharpTria.resize( m_nNumBlock) ;
|
||||
m_BlockSharpTria.resize( m_nNumBlock) ;
|
||||
m_BlockSmoothTria.resize( m_nNumBlock) ;
|
||||
m_BlockBigTria.resize( m_nNumBlock) ;
|
||||
m_SingleMapTria.resize( m_nNumBlock) ;
|
||||
m_SliceXY.resize( m_nNumBlock) ;
|
||||
m_SliceXZ.resize( m_nNumBlock) ;
|
||||
m_SliceYZ.resize( m_nNumBlock) ;
|
||||
|
||||
// Tipologia
|
||||
m_nShape = ( IsBox() ? BOX : GENERIC) ;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user