EgtGraphics :

- aggiunta gestione flag ShowZmap (solo surf, solo linee, entrambe).
This commit is contained in:
Dario Sassi
2016-06-14 06:31:11 +00:00
parent deeb1eb5e7
commit d35475a6c8
3 changed files with 49 additions and 38 deletions
+43 -38
View File
@@ -335,45 +335,50 @@ Scene::DrawGeoObj( const IGdbIterator& iIter, int nPass, const MdStMkCol& siObj)
mMat.Set( m_colDef) ;
// impostazioni iniziali
pGraphics->Clear() ;
pGraphics->AddColor( siObj.colObj) ; // per wireframe
pGraphics->AddMaterial( mMat.GetAmbient(), mMat.GetDiffuse(),
mMat.GetSpecular(), mMat.GetShininess()) ;
pGraphics->AddBackMaterial( GetSurfBackColor( mMat.GetDiffuse())) ;
// recupero la geometria
TRIA3DLIST lstTria ;
pZmap->GetAllTriangles( lstTria) ;
// passo i triangoli alla grafica
pGraphics->StartTriangles( int( lstTria.size())) ;
for ( const auto& Tria : lstTria) {
TriFlags3d TFlags ;
TriNormals3d TNrms ;
for ( int i = 0 ; i < 3 ; ++i) {
// i triangoli sono sempre parte di un quadrilatero -> terzo lato da non visualizzare
TFlags.bFlag[i] = ( i != 2 ? true : false) ;
TNrms.vtN[i] = Tria.GetN() ;
}
pGraphics->AddTriangle( Tria, TFlags, TNrms) ;
}
pGraphics->EndTriangles() ;
// visualizzazione superficie
if ( m_nShowZmap != ZSM_LINES) {
pGraphics->AddColor( siObj.colObj) ; // per wireframe
pGraphics->AddMaterial( mMat.GetAmbient(), mMat.GetDiffuse(),
mMat.GetSpecular(), mMat.GetShininess()) ;
pGraphics->AddBackMaterial( GetSurfBackColor( mMat.GetDiffuse())) ;
// recupero la geometria
TRIA3DLIST lstTria ;
pZmap->GetAllTriangles( lstTria) ;
// passo i triangoli alla grafica
pGraphics->StartTriangles( int( lstTria.size())) ;
for ( const auto& Tria : lstTria) {
TriFlags3d TFlags ;
TriNormals3d TNrms ;
for ( int i = 0 ; i < 3 ; ++i) {
// i triangoli sono sempre parte di un quadrilatero -> terzo lato da non visualizzare
TFlags.bFlag[i] = ( i != 2 ? true : false) ;
TNrms.vtN[i] = Tria.GetN() ;
}
pGraphics->AddTriangle( Tria, TFlags, TNrms) ;
}
pGraphics->EndTriangles() ;
}
// visualizzazione spilloni
pGraphics->AddColor( BLUE) ;
POLYLINELIST lstPL ;
for ( int i = 0 ; ; ++ i) {
bool bOutBreak = false ;
for ( int j = 0 ; ; ++ j) {
lstPL.clear() ;
if ( pZmap->GetDexelLines( 1, j, i, lstPL)) {
for ( const auto& PL : lstPL)
pGraphics->AddPolyLine( PL) ;
}
else {
if ( j == 0)
bOutBreak = true ;
break ;
}
}
if ( bOutBreak)
break ;
if ( m_nShowZmap == ZSM_LINES || m_nShowZmap == ZSM_BOTH) {
pGraphics->AddColor( BLUE) ;
POLYLINELIST lstPL ;
for ( int i = 0 ; ; ++ i) {
bool bOutBreak = false ;
for ( int j = 0 ; ; ++ j) {
lstPL.clear() ;
if ( pZmap->GetDexelLines( 1, j, i, lstPL)) {
for ( const auto& PL : lstPL)
pGraphics->AddPolyLine( PL) ;
}
else {
if ( j == 0)
bOutBreak = true ;
break ;
}
}
if ( bOutBreak)
break ;
}
}
}
// se testo