From d6eef57a44bd584df94210fb5f295b6f3c247a29 Mon Sep 17 00:00:00 2001 From: Dario Sassi Date: Fri, 21 Sep 2018 09:51:07 +0000 Subject: [PATCH] EgtGeomKernel 1.9i4 : - migliorie a calcoli grafica Zmap per box. --- EgtGeomKernel.rc | Bin 11710 -> 11710 bytes VolZmapGraphics.cpp | 123 ++++++++++++++++++-------------------------- 2 files changed, 51 insertions(+), 72 deletions(-) diff --git a/EgtGeomKernel.rc b/EgtGeomKernel.rc index d4cbd1367eee8128596556d6902da677fbaa7f20..b9a11740e38cf3f3f71bf8c998d6afa4750500ee 100644 GIT binary patch delta 94 zcmdlNy)SyhFE&P#&A-_cnHfzcD{|{@_Trkr0u;H;XNwSVW8B;$>;>dw2zN+>g;Df- LFmBFL4&ed-WjGrO delta 94 zcmdlNy)SyhFE&Qw&A-_cnHh~ID{|{@_Trkr0u;H;XNwSVW8B;$>;>dw2zN+>g;Df- LFmBFL4&ed-W11TR 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-