EgtGraphics 1.5c4 :
- migliorato ciclo di disegno - migliorata gestione colore in disegno.
This commit is contained in:
+37
-17
@@ -81,10 +81,28 @@ Scene::UpdateExtension( void)
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
Scene::DrawGroup( int nId)
|
||||
{
|
||||
// creo un iteratore
|
||||
PtrOwner<IGdbIterator> pIter( CreateGdbIterator()) ;
|
||||
if ( ! ::IsValid( pIter))
|
||||
return false ;
|
||||
|
||||
// recupero il gruppo
|
||||
pIter->SetGDB( m_pGeomDB) ;
|
||||
if ( ! pIter->GoTo( nId))
|
||||
return false ;
|
||||
|
||||
// eseguo il disegno
|
||||
return DrawGroup( *pIter) ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
Scene::DrawGroup( const IGdbIterator& iIter)
|
||||
{
|
||||
// recupero il riferimento del gruppo
|
||||
Frame3d frFrame ;
|
||||
if ( ! m_pGeomDB->GetGroupFrame( nId, frFrame))
|
||||
if ( ! iIter.GetGroupFrame( frFrame))
|
||||
return false ;
|
||||
// se non è identità, lo aggiungo sullo stack delle matrici MODELVIEW di OpenGL
|
||||
bool bMatrix = ( frFrame.GetType() != Frame3d::TOP || ! frFrame.Orig().IsSmall()) ;
|
||||
@@ -100,30 +118,20 @@ Scene::DrawGroup( int nId)
|
||||
return false ;
|
||||
// scandisco il gruppo
|
||||
pIter->SetGDB( m_pGeomDB) ;
|
||||
bool bNext = pIter->GoToFirstInGroup( nId) ;
|
||||
bool bNext = pIter->GoToFirstInGroup( iIter) ;
|
||||
while ( bNext) {
|
||||
// leggo il tipo di nodo
|
||||
int nGdbType = pIter->GetGdbType() ;
|
||||
// se oggetto geometrico
|
||||
if ( nGdbType == GDB_GEO) {
|
||||
// lo recupero
|
||||
IGeoObj* pGeoObj = pIter->GetGeoObj() ;
|
||||
if ( pGeoObj == nullptr)
|
||||
return false ;
|
||||
// provvisorio per colore
|
||||
Color cCol ;
|
||||
if ( pIter->GetColor( cCol))
|
||||
glColor3f( cCol.GetRed(), cCol.GetGreen(), cCol.GetBlue()) ;
|
||||
else
|
||||
glColor3f( m_colDef.GetRed(), m_colDef.GetGreen(), m_colDef.GetBlue()) ;
|
||||
// lo disegno
|
||||
if ( ! DrawGeoObj( pGeoObj))
|
||||
if ( ! DrawGeoObj( *pIter))
|
||||
return false ;
|
||||
}
|
||||
// se gruppo
|
||||
else if ( nGdbType == GDB_GROUP) {
|
||||
// lo disegno
|
||||
if ( ! DrawGroup( pIter->GetId()))
|
||||
if ( ! DrawGroup( *pIter))
|
||||
return false ;
|
||||
}
|
||||
// passo al successivo
|
||||
@@ -138,8 +146,13 @@ Scene::DrawGroup( int nId)
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
Scene::DrawGeoObj( IGeoObj* pGeoObj)
|
||||
Scene::DrawGeoObj( const IGdbIterator& iIter)
|
||||
{
|
||||
// recupero l'oggetto geometrico
|
||||
IGeoObj* pGeoObj = (const_cast<IGdbIterator*>(&iIter))->GetGeoObj() ;
|
||||
if ( pGeoObj == nullptr)
|
||||
return false ;
|
||||
|
||||
// se non esiste grafica associata, la creo
|
||||
if ( pGeoObj->GetObjGraphics() == nullptr) {
|
||||
ObjEGrGraphics* pGraphics = CreateObjEGrGraphics( m_bNewWay) ;
|
||||
@@ -154,6 +167,10 @@ Scene::DrawGeoObj( IGeoObj* pGeoObj)
|
||||
if ( ! pGraphics->IsValid()) {
|
||||
// leggo il tipo di oggetto geometrico
|
||||
int nGeoType = pGeoObj->GetType() ;
|
||||
// recupero il colore
|
||||
Color cCol ;
|
||||
if ( ! iIter.GetColor( cCol))
|
||||
cCol = m_colDef ;
|
||||
// se vettore
|
||||
if ( nGeoType == GEO_VECT3D) {
|
||||
// recupero il vettore
|
||||
@@ -164,6 +181,7 @@ Scene::DrawGeoObj( IGeoObj* pGeoObj)
|
||||
PolyLine PL ;
|
||||
pVector->GetDrawWithArrowHead( 0.1, PL) ;
|
||||
pGraphics->Clear() ;
|
||||
pGraphics->AddColor( cCol) ;
|
||||
pGraphics->AddPolyLine( PL) ;
|
||||
}
|
||||
// se punto
|
||||
@@ -174,6 +192,7 @@ Scene::DrawGeoObj( IGeoObj* pGeoObj)
|
||||
return false ;
|
||||
// calcolo la grafica
|
||||
pGraphics->Clear() ;
|
||||
pGraphics->AddColor( cCol) ;
|
||||
pGraphics->AddPoint( pPoint->GetPoint()) ;
|
||||
}
|
||||
// se riferimento
|
||||
@@ -182,7 +201,7 @@ Scene::DrawGeoObj( IGeoObj* pGeoObj)
|
||||
const IGeoFrame3d* pFrame = GetGeoFrame3d( pGeoObj) ;
|
||||
if ( pFrame == nullptr)
|
||||
return false ;
|
||||
// aggiorno la grafica
|
||||
// aggiorno la grafica (colori speciali)
|
||||
PolyLine plX, plY, plZ ;
|
||||
pFrame->GetDrawWithArrowHeads( 10, 0.1, plX, plY, plZ) ;
|
||||
pGraphics->Clear() ;
|
||||
@@ -201,8 +220,9 @@ Scene::DrawGeoObj( IGeoObj* pGeoObj)
|
||||
return false ;
|
||||
// calcolo la grafica
|
||||
PolyLine PL ;
|
||||
pCurve->ApproxWithLines( 0.1, 5, PL) ;
|
||||
pCurve->ApproxWithLines( 0.01, 5, PL) ;
|
||||
pGraphics->Clear() ;
|
||||
pGraphics->AddColor( cCol) ;
|
||||
pGraphics->AddPolyLine( PL) ;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user