EgtGeomKernel 1.9i4 :

- migliorie a calcoli grafica Zmap per box.
This commit is contained in:
Dario Sassi
2018-09-21 09:51:07 +00:00
parent c809b8e6bc
commit d6eef57a44
2 changed files with 51 additions and 72 deletions
+51 -72
View File
@@ -2104,30 +2104,23 @@ VolZmap::ExtMarchingCubes( int nBlock, TRIA3DEXLIST& lstTria, VoxelContainer& vV
int nLastVoxI, nLastVoxJ, nLastVoxK ;
GetLastVoxIJK( nLastVoxI, nLastVoxJ, nLastVoxK) ;
// Costruisco i triangoli paralleli al piano YZ
if ( nBlockIJK[0] == 0 || nBlockIJK[0] + 1 == m_nFracLin[0]) {
// Determino coordinate minime dei punti dei triangoli
double dYMin, dZMin ;
if ( nBlockIJK[1] > 0)
dYMin = ( nBlockIJK[1] * m_nVoxNumPerBlock * N_DEXVOXRATIO + 0.5) * m_dStep ;
else
dYMin = ( ( nFirstVoxJ + 1) * N_DEXVOXRATIO + 0.5) * m_dStep ;
if ( nBlockIJK[2] > 0)
dZMin = ( nBlockIJK[2] * m_nVoxNumPerBlock * N_DEXVOXRATIO + 0.5) * m_dStep ;
else
dZMin = ( ( nFirstVoxK + 1) * N_DEXVOXRATIO + 0.5) * m_dStep ; ;
// Determino le coordinate massime dei punti dei triangoli
double dYMax, dZMax ;
if ( nBlockIJK[1] + 1 < int( m_nFracLin[1]))
dYMax = ( ( nBlockIJK[1] + 1) * m_nVoxNumPerBlock * N_DEXVOXRATIO + 0.5) * m_dStep ;
else
dYMax = ( nLastVoxJ * N_DEXVOXRATIO + 0.5) * m_dStep ;
if ( nBlockIJK[2] + 1 < int( m_nFracLin[2]))
dZMax = ( ( nBlockIJK[2] + 1) * m_nVoxNumPerBlock * N_DEXVOXRATIO + 0.5) * m_dStep ;
else
dZMax = ( nLastVoxK * N_DEXVOXRATIO + 0.5) * m_dStep ;
// Determino colore dei triangoli
int nDexMinJ = N_DEXVOXRATIO * ( nFirstVoxJ + 1) ;
int nDexMinK = N_DEXVOXRATIO * ( nFirstVoxK + 1) ;
if ( nBlockIJK[0] == 0 || nBlockIJK[0] + 1 == m_nFracLin[0]) {
// Indici dei dexel corrispondenti al confine inferiore fra voxel piatti e feature
int nDexMinJ = ( nBlockIJK[1] == 0 ? N_DEXVOXRATIO * ( nFirstVoxJ + 1) :
N_DEXVOXRATIO * nBlockIJK[1] * m_nVoxNumPerBlock) ;
int nDexMinK = ( nBlockIJK[2] == 0 ? N_DEXVOXRATIO * ( nFirstVoxK + 1) :
N_DEXVOXRATIO * nBlockIJK[2] * m_nVoxNumPerBlock) ;
// Indici dei dexel corrispondenti al confine superiore fra voxel piatti e feature
int nDexMaxJ = ( nBlockIJK[1] + 1 < int( m_nFracLin[1]) ? N_DEXVOXRATIO * ( nBlockIJK[1] + 1) * m_nVoxNumPerBlock :
N_DEXVOXRATIO * nLastVoxJ) ;
int nDexMaxK = ( nBlockIJK[2] + 1 < int( m_nFracLin[2]) ? N_DEXVOXRATIO * ( nBlockIJK[2] + 1) * m_nVoxNumPerBlock :
N_DEXVOXRATIO * nLastVoxK) ;
// Determino coordinate minime e massime dei punti dei triangoli
double dYMin = ( nDexMinJ + 0.5) * m_dStep ;
double dZMin = ( nDexMinK + 0.5) * m_dStep ;
double dYMax = ( nDexMaxJ + 0.5) * m_dStep ;
double dZMax = ( nDexMaxK + 0.5) * m_dStep ;
// Determino colore dei triangoli
int nFaceInfGrade = m_Values[1][nDexMinK * m_nNx[1] + nDexMinJ][0].nToolMin ;
int nFaceSupGrade = m_Values[1][nDexMinK * m_nNx[1] + nDexMinJ][0].nToolMax ;
// Piano di coordinata x inferiore: versore normale rivolto come X-
@@ -2150,30 +2143,23 @@ VolZmap::ExtMarchingCubes( int nBlock, TRIA3DEXLIST& lstTria, VoxelContainer& vV
}
}
// Costruisco i triangoli paralleli al piano XZ
if ( nBlockIJK[1] == 0 || nBlockIJK[1] + 1 == m_nFracLin[1]) {
// Determino coordinate minime dei punti dei triangoli
double dXMin, dZMin ;
if ( nBlockIJK[0] > 0)
dXMin = ( nBlockIJK[0] * m_nVoxNumPerBlock * N_DEXVOXRATIO + 0.5) * m_dStep ;
else
dXMin = ( ( nFirstVoxI + 1) * N_DEXVOXRATIO + 0.5) * m_dStep ;
if ( nBlockIJK[2] > 0)
dZMin = ( nBlockIJK[2] * m_nVoxNumPerBlock * N_DEXVOXRATIO + 0.5) * m_dStep ;
else
dZMin = ( ( nFirstVoxK + 1) * N_DEXVOXRATIO + 0.5) * m_dStep ; ;
// Determino le coordinate massime dei punti dei triangoli
double dXMax, dZMax ;
if ( nBlockIJK[0] + 1 < int( m_nFracLin[0]))
dXMax = ( ( nBlockIJK[0] + 1) * m_nVoxNumPerBlock * N_DEXVOXRATIO + 0.5) * m_dStep ;
else
dXMax = ( nLastVoxI * N_DEXVOXRATIO + 0.5) * m_dStep ;
if ( nBlockIJK[2] + 1 < int( m_nFracLin[2]))
dZMax = ( ( nBlockIJK[2] + 1) * m_nVoxNumPerBlock * N_DEXVOXRATIO + 0.5) * m_dStep ;
else
dZMax = ( nLastVoxK * N_DEXVOXRATIO + 0.5) * m_dStep ;
// Determino colore dei triangoli
int nDexMinI = N_DEXVOXRATIO * ( nFirstVoxI + 1) ;
int nDexMinK = N_DEXVOXRATIO * ( nFirstVoxK + 1) ;
if ( nBlockIJK[1] == 0 || nBlockIJK[1] + 1 == m_nFracLin[1]) {
// Indici dei dexel corrispondenti al confine inferiore fra voxel piatti e feature
int nDexMinI = ( nBlockIJK[0] == 0 ? N_DEXVOXRATIO * ( nFirstVoxI + 1) :
N_DEXVOXRATIO * nBlockIJK[0] * m_nVoxNumPerBlock) ;
int nDexMinK = ( nBlockIJK[2] == 0 ? N_DEXVOXRATIO * ( nFirstVoxK + 1) :
N_DEXVOXRATIO * nBlockIJK[2] * m_nVoxNumPerBlock) ;
// Indici dei dexel corrispondenti al confine superiore fra voxel piatti e feature
int nDexMaxI = ( nBlockIJK[0] + 1 < int( m_nFracLin[0]) ? N_DEXVOXRATIO * ( nBlockIJK[0] + 1) * m_nVoxNumPerBlock :
N_DEXVOXRATIO * nLastVoxI) ;
int nDexMaxK = ( nBlockIJK[2] + 1 < int( m_nFracLin[2]) ? N_DEXVOXRATIO * ( nBlockIJK[2] + 1) * m_nVoxNumPerBlock :
N_DEXVOXRATIO * nLastVoxK) ;
// Determino coordinate minime e massime dei punti dei triangoli
double dXMin = ( nDexMinI + 0.5) * m_dStep ;
double dZMin = ( nDexMinK + 0.5) * m_dStep ;
double dXMax = ( nDexMaxI + 0.5) * m_dStep ;
double dZMax = ( nDexMaxK + 0.5) * m_dStep ;
// Determino colore dei triangoli
int nFaceInfGrade = m_Values[2][nDexMinI * m_nNx[2] + nDexMinK][0].nToolMin ;
int nFaceSupGrade = m_Values[2][nDexMinI * m_nNx[2] + nDexMinK][0].nToolMax ;
// Piano di coordinata y inferiore: versore normale rivolto come Y-
@@ -2196,30 +2182,23 @@ VolZmap::ExtMarchingCubes( int nBlock, TRIA3DEXLIST& lstTria, VoxelContainer& vV
}
}
// Costruisco i triangoli paralleli al piano XY
if ( nBlockIJK[2] == 0 || nBlockIJK[2] + 1 == m_nFracLin[2]) {
// Determino coordinate minime dei punti dei triangoli
double dXMin, dYMin ;
if ( nBlockIJK[0] > 0)
dXMin = ( nBlockIJK[0] * m_nVoxNumPerBlock * N_DEXVOXRATIO + 0.5) * m_dStep ;
else
dXMin = ( ( nFirstVoxI + 1) * N_DEXVOXRATIO + 0.5) * m_dStep ;
if ( nBlockIJK[1] > 0)
dYMin = ( nBlockIJK[1] * m_nVoxNumPerBlock * N_DEXVOXRATIO + 0.5) * m_dStep ;
else
dYMin = ( ( nFirstVoxJ + 1) * N_DEXVOXRATIO + 0.5) * m_dStep ;
// Determino le coordinate massime dei punti dei triangoli
double dXMax, dYMax ;
if ( nBlockIJK[0] + 1 < int( m_nFracLin[0]))
dXMax = ( ( nBlockIJK[0] + 1) * m_nVoxNumPerBlock * N_DEXVOXRATIO + 0.5) * m_dStep ;
else
dXMax = ( nLastVoxI * N_DEXVOXRATIO + 0.5) * m_dStep ;
if ( nBlockIJK[1] + 1 < int( m_nFracLin[1]))
dYMax = ( ( nBlockIJK[1] + 1) * m_nVoxNumPerBlock * N_DEXVOXRATIO + 0.5) * m_dStep ;
else
dYMax = ( nLastVoxJ * N_DEXVOXRATIO + 0.5) * m_dStep ;
// Determino colore dei triangoli
int nDexMinI = N_DEXVOXRATIO * ( nFirstVoxI + 1) ;
int nDexMinJ = N_DEXVOXRATIO * ( nFirstVoxJ + 1) ;
if ( nBlockIJK[2] == 0 || nBlockIJK[2] + 1 == m_nFracLin[2]) {
// Indici dei dexel corrispondenti al confine inferiore fra voxel piatti e feature
int nDexMinI = ( nBlockIJK[0] == 0 ? N_DEXVOXRATIO * ( nFirstVoxI + 1) :
N_DEXVOXRATIO * nBlockIJK[0] * m_nVoxNumPerBlock) ;
int nDexMinJ = ( nBlockIJK[1] == 0 ? N_DEXVOXRATIO * ( nFirstVoxJ + 1) :
N_DEXVOXRATIO * nBlockIJK[1] * m_nVoxNumPerBlock) ;
// Indici dei dexel corrispondenti al confine superiore fra voxel piatti e feature
int nDexMaxI = ( nBlockIJK[0] + 1 < int( m_nFracLin[0]) ? N_DEXVOXRATIO * ( nBlockIJK[0] + 1) * m_nVoxNumPerBlock :
N_DEXVOXRATIO * nLastVoxI) ;
int nDexMaxJ = ( nBlockIJK[1] + 1 < int( m_nFracLin[1]) ? N_DEXVOXRATIO * ( nBlockIJK[1] + 1) * m_nVoxNumPerBlock :
N_DEXVOXRATIO * nLastVoxJ) ;
// Determino coordinate minime e massime dei punti dei triangoli
double dXMin = ( nDexMinI + 0.5) * m_dStep ;
double dYMin = ( nDexMinJ + 0.5) * m_dStep ;
double dXMax = ( nDexMaxI + 0.5) * m_dStep ;
double dYMax = ( nDexMaxJ + 0.5) * m_dStep ;
// Determino colore dei triangoli
int nFaceInfGrade = m_Values[0][nDexMinJ * m_nNx[0] + nDexMinI][0].nToolMin ;
int nFaceSupGrade = m_Values[0][nDexMinJ * m_nNx[0] + nDexMinI][0].nToolMax ;
// Piano di coordinata Z inferiore: versore normale rivolto come Z-