From 12ee38faad132d9758043c5ec2951222c92ea5f4 Mon Sep 17 00:00:00 2001 From: Dario Sassi Date: Mon, 23 Nov 2020 11:45:13 +0000 Subject: [PATCH] EgtGraphics : - migliorie alle precedenti modifiche. --- ObjEGrGraphics.h | 2 +- ObjMultiGraphics.cpp | 4 ++-- ObjMultiGraphics.h | 2 +- ObjNewGraphics.cpp | 4 ++-- ObjNewGraphics.h | 4 ++-- ObjOldGraphics.cpp | 4 ++-- ObjOldGraphics.h | 2 +- Scene.h | 5 +++-- SceneGeom.cpp | 18 +++++++++--------- 9 files changed, 23 insertions(+), 22 deletions(-) diff --git a/ObjEGrGraphics.h b/ObjEGrGraphics.h index 8b31555..96c13ea 100644 --- a/ObjEGrGraphics.h +++ b/ObjEGrGraphics.h @@ -43,7 +43,7 @@ class ObjEGrGraphics : public IObjGraphics virtual bool StartTriangles( int nNum, bool bAux = false) = 0 ; virtual bool AddTriangle( const Triangle3d& Tria, const TriFlags3d& TFlags, const TriNormals3d& TNrms) = 0 ; virtual bool EndTriangles( void) = 0 ; - virtual bool Draw( int nStat, int nMark, bool bSurfSha, int nAlpha, bool ShowAux) = 0 ; + virtual bool Draw( int nStat, int nMark, bool bSurfSha, bool bSurf, int nAlpha, bool ShowAux) = 0 ; virtual bool GetLocalBBox( BBox3d& b3Loc) const = 0 ; virtual bool SetCounter( int nCnt) { return false ; } virtual int GetCounter( void) const { return -1 ; } diff --git a/ObjMultiGraphics.cpp b/ObjMultiGraphics.cpp index 7c32a34..a8a7556 100644 --- a/ObjMultiGraphics.cpp +++ b/ObjMultiGraphics.cpp @@ -165,13 +165,13 @@ ObjMultiGraphics::EndTriangles( void) //---------------------------------------------------------------------------- bool -ObjMultiGraphics::Draw( int nStat, int nMark, bool bSurfSha, int nAlpha, bool bShowAux) +ObjMultiGraphics::Draw( int nStat, int nMark, bool bSurfSha, bool bSurf, int nAlpha, bool bShowAux) { bool bOk = true ; for ( size_t i = 0 ; i < m_vOEGR.size() ; ++ i) { if ( m_vOEGR[i] != nullptr && m_vOEGR[i]->IsValid() && - ! m_vOEGR[i]->Draw( nStat, nMark, bSurfSha, nAlpha, bShowAux)) + ! m_vOEGR[i]->Draw( nStat, nMark, bSurfSha, bSurf, nAlpha, bShowAux)) bOk = false ; } return bOk ; diff --git a/ObjMultiGraphics.h b/ObjMultiGraphics.h index 7cadaad..6c0375d 100644 --- a/ObjMultiGraphics.h +++ b/ObjMultiGraphics.h @@ -42,7 +42,7 @@ class ObjMultiGraphics : public ObjEGrGraphics bool StartTriangles( int nNum, bool bAux = false) override ; bool AddTriangle( const Triangle3d& Tria, const TriFlags3d& TFlags, const TriNormals3d& TNrms) override ; bool EndTriangles( void) override ; - bool Draw( int nStat, int nMark, bool bSurfSha, int nAlpha, bool bShowAux) override ; + bool Draw( int nStat, int nMark, bool bSurfSha, bool bSurf, int nAlpha, bool bShowAux) override ; bool GetLocalBBox( BBox3d& b3Loc) const override ; bool SetCounter( int nCnt) override ; int GetCounter( void) const override ; diff --git a/ObjNewGraphics.cpp b/ObjNewGraphics.cpp index 14b3fe9..62b89b7 100644 --- a/ObjNewGraphics.cpp +++ b/ObjNewGraphics.cpp @@ -308,7 +308,7 @@ AdjustColor( float fCol[4], bool bDark) //---------------------------------------------------------------------------- bool -ObjNewGraphics::Draw( int nStat, int nMark, bool bSurfSha, int nAlpha, bool bShowAux) +ObjNewGraphics::Draw( int nStat, int nMark, bool bSurfSha, bool bSurf, int nAlpha, bool bShowAux) { if ( ! m_bValid || m_pScene == nullptr || ! m_pScene->MakeCurrent()) return false ; @@ -352,7 +352,7 @@ ObjNewGraphics::Draw( int nStat, int nMark, bool bSurfSha, int nAlpha, bool bSho // determino se devo scurire il colore wireframe bool bDark = false ; - if ( bStdCol && ! bSurfSha) { + if ( bStdCol && bSurf && ! bSurfSha) { Color colBT, colBB ; m_pScene->GetBackground( colBT, colBB) ; int nColMid = ( colBT.GetIntIntensity() + colBB.GetIntIntensity()) / 2 ; diff --git a/ObjNewGraphics.h b/ObjNewGraphics.h index 2c1fed6..7ec7727 100644 --- a/ObjNewGraphics.h +++ b/ObjNewGraphics.h @@ -76,12 +76,12 @@ class ObjNewGraphics : public ObjEGrGraphics bool StartTriangles( int nNum, bool bAux = false) override ; bool AddTriangle( const Triangle3d& Tria, const TriFlags3d& TFlags, const TriNormals3d& TNrms) override ; bool EndTriangles( void) override ; - bool Draw( int nStat, int nMark, bool bSurfSha, int nAlpha, bool bShowAux) override ; + bool Draw( int nStat, int nMark, bool bSurfSha, bool bSurf, int nAlpha, bool bShowAux) override ; bool GetLocalBBox( BBox3d& b3Loc) const override { b3Loc = m_b3Loc ; return ! m_b3Loc.IsEmpty() ; } public : - ObjNewGraphics( void) : m_pScene( nullptr), m_bValid( false) {} + ObjNewGraphics( void) : m_pScene( nullptr), m_bValid( false) {} private : bool DeleteVaoVbo( void) ; diff --git a/ObjOldGraphics.cpp b/ObjOldGraphics.cpp index 8cf85c7..b26e8e0 100644 --- a/ObjOldGraphics.cpp +++ b/ObjOldGraphics.cpp @@ -213,7 +213,7 @@ AdjustColor( float fCol[4], bool bDark) //---------------------------------------------------------------------------- bool -ObjOldGraphics::Draw( int nStat, int nMark, bool bSurfSha, int nAlpha, bool bShowAux) +ObjOldGraphics::Draw( int nStat, int nMark, bool bSurfSha, bool bSurf, int nAlpha, bool bShowAux) { // se vuoto non faccio alcunché if ( m_ogaVect.size() == 0) @@ -254,7 +254,7 @@ ObjOldGraphics::Draw( int nStat, int nMark, bool bSurfSha, int nAlpha, bool bSho // determino se devo scurire il colore wireframe bool bDark = false ; - if ( bStdCol && ! bSurfSha) { + if ( bStdCol && bSurf && ! bSurfSha) { Color colBT, colBB ; m_pScene->GetBackground( colBT, colBB) ; int nColMid = ( colBT.GetIntIntensity() + colBB.GetIntIntensity()) / 2 ; diff --git a/ObjOldGraphics.h b/ObjOldGraphics.h index 6b72ceb..63de58f 100644 --- a/ObjOldGraphics.h +++ b/ObjOldGraphics.h @@ -81,7 +81,7 @@ class ObjOldGraphics : public ObjEGrGraphics bool StartTriangles( int nNum, bool bAux = false) override ; bool AddTriangle( const Triangle3d& Tria, const TriFlags3d& TFlags, const TriNormals3d& TNrms) override ; bool EndTriangles( void) override ; - bool Draw( int nStat, int nMark, bool bSurfSha, int nAlpha, bool bShowAux) override ; + bool Draw( int nStat, int nMark, bool bSurfSha, bool bSurf, int nAlpha, bool bShowAux) override ; bool GetLocalBBox( BBox3d& b3Loc) const override { b3Loc = m_b3Loc ; return ! m_b3Loc.IsEmpty() ; } diff --git a/Scene.h b/Scene.h index 76629b4..c5e2a04 100644 --- a/Scene.h +++ b/Scene.h @@ -54,12 +54,13 @@ struct AlphaSurf { ObjEGrGraphics* pGraph ; int nStat ; int nMark ; + bool bSurf ; int nAlpha ; bool bShowAux ; double dZmin ; double dZmax ; - AlphaSurf( const Frame3d& frMV, ObjEGrGraphics* pG, int nS, int nM, int nA, bool bSA, double dZm, double dZM) - : frModView( frMV), pGraph( pG), nStat( nS), nMark( nM), nAlpha( nA), bShowAux( bSA), dZmin( dZm), dZmax( dZM) {} + AlphaSurf( const Frame3d& frMV, ObjEGrGraphics* pG, int nS, int nM, bool bS, int nA, bool bSA, double dZm, double dZM) + : frModView( frMV), pGraph( pG), nStat( nS), nMark( nM), bSurf( bS), nAlpha( nA), bShowAux( bSA), dZmin( dZm), dZmax( dZM) {} } ; typedef std::vector ASURFVECTOR ; diff --git a/SceneGeom.cpp b/SceneGeom.cpp index 11c0750..ea6959b 100644 --- a/SceneGeom.cpp +++ b/SceneGeom.cpp @@ -628,20 +628,20 @@ Scene::DrawGeoObj( const IGdbIterator& iIter, int nPass, const MdStMkCol& siObj) bShowAux = true ; // verifico se oggetto con superficie - bool bSurf = ( nGeoType & ( GEO_SURF | GEO_VOLUME)) != 0 || - ( nGeoType == EXT_TEXT && m_nShowText == TXT_FILL && GetExtText( pGeoObj)->GetAuxSurf() != nullptr) ; + bool bSurf = (( nGeoType & ( GEO_SURF | GEO_VOLUME)) != 0) ; + bool bGenSurf = ( bSurf || ( nGeoType == EXT_TEXT && m_nShowText == TXT_FILL && GetExtText( pGeoObj)->GetAuxSurf() != nullptr)) ; // recupero il valore di opacità (solo per le superfici e i solidi può esserci trasparenza) int nAlpha = siObj.colObj.GetIntAlpha() ; // salto in ogni caso le superfici e i solidi completamente trasparenti - if ( nAlpha == 0 && bSurf) + if ( nAlpha == 0 && bGenSurf) return true ; // se hiddenline e non selezione if ( m_nShowMode == SM_HIDDENLINE && ! m_bSelect) { // in prima passata disegno solo le superfici opache - if ( nPass == 1 && ( ! bSurf || nAlpha <= ALPHA_LIM)) + if ( nPass == 1 && ( ! bGenSurf || nAlpha <= ALPHA_LIM)) return true ; } @@ -650,7 +650,7 @@ Scene::DrawGeoObj( const IGdbIterator& iIter, int nPass, const MdStMkCol& siObj) if ( m_nShowMode == SM_SHADING && ! m_bSelect) { // in prima passata disegno solo le superfici opache e metto in un vettore quelle semitrasparenti if ( nPass == 1) { - if ( ! bSurf) + if ( ! bGenSurf) return true ; else { if ( nAlpha > ALPHA_LIM) @@ -667,13 +667,13 @@ Scene::DrawGeoObj( const IGdbIterator& iIter, int nPass, const MdStMkCol& siObj) b3Box.ToGlob( frModView) ; // inserisco i dati nel vettore m_vAlphaSurf.emplace_back( frModView, pGraphics, siObj.nStat, siObj.nMark, - nAlpha, bShowAux, b3Box.GetMin().z, b3Box.GetMax().z) ; + bSurf, nAlpha, bShowAux, b3Box.GetMin().z, b3Box.GetMax().z) ; return true ; } } } // in seconda passata disegno solo dimensioni 0 e curve - if ( nPass == 2 && bSurf) + if ( nPass == 2 && bGenSurf) return true ; } @@ -726,7 +726,7 @@ Scene::DrawGeoObj( const IGdbIterator& iIter, int nPass, const MdStMkCol& siObj) } // eseguo visualizzazione - bool bOk = pGraphics->Draw( siObj.nStat, siObj.nMark, bSurfSha, nAlpha, bShowAux) ; + bool bOk = pGraphics->Draw( siObj.nStat, siObj.nMark, bSurfSha, bSurf, nAlpha, bShowAux) ; // disabilito textures glDisable( GL_TEXTURE_GEN_S) ; @@ -753,7 +753,7 @@ Scene::DrawAlphaSurfVector( void) glLoadMatrixd( Matrix) ; // eseguo visualizzazione bool bOk = AlphaSurf.pGraph->Draw( AlphaSurf.nStat, AlphaSurf.nMark, true, - AlphaSurf.nAlpha, AlphaSurf.bShowAux) ; + AlphaSurf.bSurf, AlphaSurf.nAlpha, AlphaSurf.bShowAux) ; // ripristino matrice glPopMatrix() ; // in caso di errore, esco