diff --git a/EgtGeomKernel.rc b/EgtGeomKernel.rc index d4cbd13..b9a1174 100644 Binary files a/EgtGeomKernel.rc and b/EgtGeomKernel.rc differ diff --git a/VolZmapGraphics.cpp b/VolZmapGraphics.cpp index aad7abd..5bdcabc 100644 --- a/VolZmapGraphics.cpp +++ b/VolZmapGraphics.cpp @@ -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-