diff --git a/EgtGraphics.rc b/EgtGraphics.rc index db43769..9463bb6 100644 Binary files a/EgtGraphics.rc and b/EgtGraphics.rc differ diff --git a/SceneGeom.cpp b/SceneGeom.cpp index 39b09f3..1e56415 100644 --- a/SceneGeom.cpp +++ b/SceneGeom.cpp @@ -178,10 +178,10 @@ Scene::DrawGeoObj( const IGdbIterator& iIter, int nPass, const MdStMkCol& siObj) if ( nGeoType == VOL_ZMAP) { const IVolZmap* pZmap = GetVolZmap( pGeoObj) ; if ( pZmap != nullptr) { - switch ( m_nShowZmap) { - case ZSM_SURF : nCount = pZmap->GetBlockCount() ; break ; - case ZSM_BOTH : nCount = pZmap->GetBlockCount() + 1 ; break ; - } + if ( ( m_nShowZmap & ZSM_SURF) != 0) + nCount += pZmap->GetBlockCount() ; + if ( ( m_nShowZmap & ZSM_LINES) != 0 || ( m_nShowZmap & ZSM_NORMALS) != 0) + nCount += 1 ; } } // nuova modalità grafica solo per superfici con molti triangoli o solidi Zmap @@ -381,15 +381,17 @@ Scene::DrawGeoObj( const IGdbIterator& iIter, int nPass, const MdStMkCol& siObj) pGraphics->EndTriangles() ; } } - // visualizzazione spilloni (sempre nell'ultimo blocco) - if ( m_nShowZmap == ZSM_LINES || m_nShowZmap == ZSM_BOTH) { + // visualizzazione spilloni e normali (sempre nell'ultimo blocco) + if ( ( m_nShowZmap & ZSM_LINES) != 0 || ( m_nShowZmap & ZSM_NORMALS) != 0) { // imposto indice blocco corrente pGraphics->SetCurrent( nCount) ; // lo pulisco pGraphics->Clear() ; // ciclo sui tre gruppi di spilloni - Color vCol[3] = {BLUE, RED, GREEN} ; - for ( int k = 0 ; k < 3 ; ++ k) { + int nKmin = ( m_nShowZmap & ZSM_LINES) != 0 ? 0 : 3 ; + int nKmax = ( m_nShowZmap & ZSM_NORMALS) != 0 ? 6 : 3 ; + Color vCol[6] = {BLUE, RED, GREEN, BLUE, RED, GREEN} ; + for ( int k = nKmin ; k < nKmax ; ++ k) { pGraphics->AddColor( vCol[k]) ; pGraphics->AddMaterial( vCol[k], vCol[k], vCol[k], 10) ; pGraphics->AddBackMaterial( vCol[k]) ;