From accc39b26a9afed565ff29a6307fbfa22363ecde Mon Sep 17 00:00:00 2001 From: Dario Sassi Date: Tue, 16 Jun 2015 07:37:45 +0000 Subject: [PATCH] =?UTF-8?q?EgtGraphics=201.6f2=20:=20-=20aggiunta=20possib?= =?UTF-8?q?ilit=C3=A0=20di=20visualizzazione=20di=20UserObj=20associati=20?= =?UTF-8?q?ad=20oggetti=20geometrici.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- EgtGraphics.rc | Bin 11604 -> 11604 bytes SceneGeom.cpp | 26 ++++++++++++++++++-------- 2 files changed, 18 insertions(+), 8 deletions(-) diff --git a/EgtGraphics.rc b/EgtGraphics.rc index e60fd053998a4de9cb36958ffb2ca8b5c0d0da61..bbc3e2b7fa054956ddd674e05e4974afb508c1c8 100644 GIT binary patch delta 105 zcmcZ-btP)UH#SDI&GmA^%*<&FMw1Up>u&xd>BG3WjoXYFEOD4=a)V$FTvA4;fd!lR PAIT<&IJ!Z6%5Gc$b}J%f delta 105 zcmcZ-btP)UH#SDo&GmA^%*?3_Mw1Up>u&xd>BG3WjoXYFEOD4=a)V$FTvA4;fd!lR PAIT<&IJ!Z6%5Gc$bZsJC diff --git a/SceneGeom.cpp b/SceneGeom.cpp index c45fe9f..9877f84 100644 --- a/SceneGeom.cpp +++ b/SceneGeom.cpp @@ -164,6 +164,9 @@ Scene::DrawGeoObj( const IGdbIterator& iIter, int nPass, const MdStMkCol& siObj) return false ; int nGeoType = pGeoObj->GetType() ; + // recupero eventuale parte custom + const IUserObj* pUserObj = iIter.GetUserObj() ; + // se non esiste grafica associata, la creo if ( pGeoObj->GetObjGraphics() == nullptr) { // nuova modalità grafica solo per superfici con molti triangoli @@ -315,15 +318,22 @@ Scene::DrawGeoObj( const IGdbIterator& iIter, int nPass, const MdStMkCol& siObj) pTXT->ApproxWithLines( 0.01, 5, lstPL) ; pGraphics->Clear() ; pGraphics->AddColor( siObj.colObj) ; - POLYLINELIST::iterator Iter ; - for ( Iter = lstPL.begin() ; Iter != lstPL.end() ; ++ Iter) - pGraphics->AddPolyLine( *Iter) ; + for ( const auto& PL : lstPL) + pGraphics->AddPolyLine( PL) ; + } + // se esiste parte custom + if ( pUserObj != nullptr) { + POLYLINELIST lstPL ; + if ( pUserObj->GetDrawPolyLines( lstPL)) { + for ( const auto& PL : lstPL) + pGraphics->AddPolyLine( PL, true) ; + } } } // se richiesto, visualizzo la grafica associata bool bShowAux = false ; - if ( ( nGeoType & GEO_CURVE) != 0 && m_bShowCurveDirection) + if ( (( nGeoType & GEO_CURVE) != 0 || pUserObj != nullptr) && m_bShowCurveDirection) bShowAux = true ; // recupero il valore di opacità (solo per le superfici può esserci trasparenza) @@ -390,15 +400,15 @@ Scene::DrawAlphaSurfVector( void) []( const AlphaSurf& a, const AlphaSurf&b) { return a.dZmax < b.dZmax ; }) ; // eseguo visualizzazione - for ( int i = 0 ; i < int( m_vAlphaSurf.size()) ; ++i) { + for ( const auto& AlphaSurf : m_vAlphaSurf) { // imposto matrice MODELVIEW double Matrix[OGLMAT_DIM] ; - FrameToOpenGlMatrix( m_vAlphaSurf[i].frModView, Matrix) ; + FrameToOpenGlMatrix( AlphaSurf.frModView, Matrix) ; glPushMatrix() ; glLoadMatrixd( Matrix) ; // eseguo visualizzazione - bool bOk = m_vAlphaSurf[i].pGraph->Draw( m_vAlphaSurf[i].nStat, m_vAlphaSurf[i].nMark, true, - m_vAlphaSurf[i].nAlpha, m_vAlphaSurf[i].bShowAux) ; + bool bOk = AlphaSurf.pGraph->Draw( AlphaSurf.nStat, AlphaSurf.nMark, true, + AlphaSurf.nAlpha, AlphaSurf.bShowAux) ; // ripristino matrice glPopMatrix() ; // in caso di errore, esco