diff --git a/EGkGeoObjSave.h b/EGkGeoObjSave.h index db2c349..a046f10 100644 --- a/EGkGeoObjSave.h +++ b/EGkGeoObjSave.h @@ -15,6 +15,7 @@ #include "/EgtDev/Include/EGkGeomDB.h" #include "/EgtDev/Include/EgtPointerOwner.h" +#include "/EgtDev/Include/EGkSurfFlatRegion.h" //---------------------------------------------------------------------------- @@ -130,122 +131,6 @@ SaveGeoObj( std::vector> vvpGObj, std::vector vCol, return bOk ; } -//---------------------------------------------------------------------------- -bool -SaveCurveCompo( ICRVCOMPOPOVECTOR& vCompo, bool bUniform, const std::string& sFile, int nFlag = GDB_SV_BIN) -{ - // controllo validità delle curve - std::vector vpGObj ; - for ( int i = 0 ; i < int( vCompo.size()) ; ++ i) { - if ( vCompo[i] == nullptr || ! vCompo[i]->IsValid()) - return false ; - vpGObj.emplace_back( static_cast( vCompo[i]->Clone())) ; - } - // creo GeomDB temporaneo - PtrOwner pGeomDB( CreateGeomDB()) ; - if ( IsNull( pGeomDB)) - return false ; - INTVECTOR vIds ; - - // se curve con colore uniforme - if ( bUniform) - return SaveGeoObj( vpGObj, sFile, nFlag) ; - - // altrimenti scorro le sottocurve e le coloro in base alle temp prop - int nPartId = pGeomDB->AddGroup( GDB_ID_NULL, GDB_ID_ROOT, Frame3d()) ; - int nLayId = 0 ; - for ( int i = 0 ; i < int( vCompo.size()) ; ++i) { - // inserisco l'oggetto nel GeomDB (sotto pezzo/layer) - nLayId = pGeomDB->AddGroup( GDB_ID_NULL, nPartId, Frame3d()) ; - for ( int u = 0 ; u < vCompo[i]->GetCurveCount() ; ++ u) { - const ICurve* pCrv = vCompo[i]->GetCurve( u) ; - if ( pCrv == nullptr) - return false ; - int nId = pGeomDB->AddGeoObj( GDB_ID_NULL, nLayId, pCrv->Clone()) ; - pGeomDB->SetMaterial( nId, ( pCrv->GetTempProp( 0) == 1 ? RED : - ( pCrv->GetTempProp( 0)) == 0 ? BLUE : WHITE)) ; - vIds.push_back( nId) ; - if ( nId == GDB_ID_NULL) - return false ; - } - } - // eseguo il salvataggio - bool bOk = pGeomDB->Save( vIds, sFile, nFlag) ; - // rimuovo l'oggetto dal GeomDB - for ( int i = 0 ; i < int( vIds.size()); ++i) - bOk = ( pGeomDB->RemoveGeoObjAndErase( vIds[i]) != nullptr) && bOk ; - - return bOk ; - -} - -bool SaveVoronoi( const ICRVCOMPOPOVECTOR& vCrvsCompo, const ICURVEPOVECTOR& vBisectors, - bool bUniform, const std::string& sFile, int nFlag = GDB_SV_BIN) -{ - // controllo validità delle curve - std::vector vpGObj_crv ; - for ( int i = 0 ; i < int( vCrvsCompo.size()) ; ++ i) { - if ( vCrvsCompo[i] == nullptr || ! vCrvsCompo[i]->IsValid()) - return false ; - vpGObj_crv.emplace_back( static_cast( vCrvsCompo[i]->Clone())) ; - } - std::vector vpGObj_bisect ; - for ( int i = 0 ; i < int( vBisectors.size()) ; ++ i) { - if ( vBisectors[i] == nullptr || ! vBisectors[i]->IsValid()) - return false ; - vpGObj_bisect.emplace_back( static_cast( vBisectors[i]->Clone())) ; - } - - // creo GeomDB temporaneo - PtrOwner pGeomDB( CreateGeomDB()) ; - if ( IsNull( pGeomDB)) - return false ; - INTVECTOR vIds ; - - // salvo le curve - int nPartId = pGeomDB->AddGroup( GDB_ID_NULL, GDB_ID_ROOT, Frame3d()) ; - int nLayId = pGeomDB->AddGroup( GDB_ID_NULL, nPartId, Frame3d()) ; - pGeomDB->SetName( nLayId, "Curves") ; - for ( int i = 0 ; i < int( vpGObj_crv.size()) ; ++i) { - // inserisco l'oggetto nel GeomDB - int nId = pGeomDB->AddGeoObj( GDB_ID_NULL, nLayId, vpGObj_crv[i]->Clone()) ; - if ( nId == GDB_ID_NULL) - return false ; - vIds.push_back( nId) ; - pGeomDB->SetMaterial( nId, LIME) ; - } - - // salvo i bisettori - nLayId = pGeomDB->AddGroup( GDB_ID_NULL, nPartId, Frame3d()) ; - pGeomDB->SetName( nLayId, "Bisectors") ; - for ( int i = 0 ; i < int( vpGObj_bisect.size()) ; ++i) { - // inserisco l'oggetto nel GeomDB - int nId = pGeomDB->AddGeoObj( GDB_ID_NULL, nLayId, vpGObj_bisect[i]->Clone()) ; - if ( nId == GDB_ID_NULL) - return false ; - vIds.push_back( nId) ; - if ( bUniform) - pGeomDB->SetMaterial( nId, RED) ; - else { - if ( vBisectors[i]->GetTempParam( 0) < EPS_SMALL || - vBisectors[i]->GetTempParam( 1) < EPS_SMALL) - pGeomDB->SetMaterial( nId, ORANGE) ; - else - pGeomDB->SetMaterial( nId, RED) ; - } - pGeomDB->SetInfo( nId, "START_PARAM", vBisectors[i]->GetTempParam( 0)) ; - pGeomDB->SetInfo( nId, "END_PARAM", vBisectors[i]->GetTempParam( 1)) ; - } - - // eseguo il salvataggio - bool bOk = pGeomDB->Save( vIds, sFile, nFlag) ; - // rimuovo l'oggetto dal GeomDB - for ( int i = 0 ; i < int( vIds.size()); ++i) - bOk = ( pGeomDB->RemoveGeoObjAndErase( vIds[i]) != nullptr) && bOk ; - - return bOk ; -} - bool SaveSfrBooleans( const ISurfFlatRegion* pSfrA, const ISurfFlatRegion* pSfrB, const std::string& sFile, int nFlag = GDB_SV_BIN, Color cColA = Color( 0., .5, .75, .5), Color cColB = Color( 0., .5, 0., .5)) @@ -277,5 +162,95 @@ bool SaveSfrBooleans( const ISurfFlatRegion* pSfrA, const ISurfFlatRegion* pSfrB for ( int i = 0 ; i < int( vIds.size()) ; ++i) bOk = ( pGeomDB->RemoveGeoObjAndErase( vIds[i]) != nullptr) && bOk ; + return bOk ; +} + +//---------------------------------------------------------------------------- +bool +SaveGeoObj( std::vector> vvpGObj, std::vector> vvCol, + const std::string& sFile, int nFlag = GDB_SV_BIN) +{ + // verifico validità oggetti + for ( int i = 0 ; i < int( vvpGObj.size()) ; ++ i) { + for ( int j = 0 ; j < int( vvpGObj[i].size()) ; ++ j) { + if ( vvpGObj[i][j] == nullptr || ! vvpGObj[i][j]->IsValid()) + return false ; + } + } + + // creo GeomDB temporaneo + PtrOwner pGeomDB( CreateGeomDB()) ; + if ( IsNull( pGeomDB)) + return false ; + INTVECTOR vIds ; + + // creo il part + int nPartId = pGeomDB->AddGroup( GDB_ID_NULL, GDB_ID_ROOT, Frame3d()) ; + + // per ogni elemento i-esimo, creo un layer + for ( int i = 0 ; i < int( vvpGObj.size()) ; ++i) { + // creo il layer + int nLayId = pGeomDB->AddGroup( GDB_ID_NULL, nPartId, Frame3d()) ; + for ( int j = 0 ; j < int( vvpGObj[i].size()) ; ++ j ) { + // inserisco gli oggetti corrispondenti + int nId = pGeomDB->AddGeoObj( GDB_ID_NULL, nLayId, vvpGObj[i][j]) ; + if ( nId == GDB_ID_NULL) + return false ; + // setto il colore ( se definito) + if ( i < int( vvCol.size()) && j < int( vvCol[i].size())) + pGeomDB->SetMaterial( nId, vvCol[i][j]) ; + vIds.push_back( nId) ; + } + } + + // eseguo il salvataggio + bool bOk = pGeomDB->Save( vIds, sFile, nFlag) ; + // rimuovo l'oggetto dal GeomDB + for ( int i = 0 ; i < int( vIds.size()) ; ++i) + bOk = ( pGeomDB->RemoveGeoObjAndErase( vIds[i]) != nullptr) && bOk ; + + return bOk ; +} + +//---------------------------------------------------------------------------- +bool +SaveGeoObj( std::vector vpGObj, std::vector vCol, + const std::string& sFile, int nFlag = GDB_SV_BIN) +{ + // verifico validità oggetti + if ( int( vpGObj.size()) != int( vCol.size())) + return false ; + + // creo GeomDB temporaneo + PtrOwner pGeomDB( CreateGeomDB()) ; + if ( IsNull( pGeomDB)) + return false ; + INTVECTOR vIds ; + + // creo il part + int nPartId = pGeomDB->AddGroup( GDB_ID_NULL, GDB_ID_ROOT, Frame3d()) ; + // creo il layer + int nLayId = pGeomDB->AddGroup( GDB_ID_NULL, nPartId, Frame3d()) ; + + // scorro gli elementi da visualizzare + for ( int i = 0 ; i < int( vpGObj.size()) ; ++ i) { + if ( vpGObj[i] == nullptr || ! vpGObj[i]->IsValid()) + continue ; + // inserisco gli oggetti corrispondenti + int nId = pGeomDB->AddGeoObj( GDB_ID_NULL, nLayId, vpGObj[i]) ; + if ( nId == GDB_ID_NULL) + return false ; + // setto il colore + pGeomDB->SetMaterial( nId, vCol[i]) ; + // aggiungo l'Id ottenuto + vIds.push_back( nId) ; + } + + // eseguo il salvataggio + bool bOk = pGeomDB->Save( vIds, sFile, nFlag) ; + // rimuovo l'oggetto dal GeomDB + for ( int i = 0 ; i < int( vIds.size()) ; ++i) + bOk = ( pGeomDB->RemoveGeoObjAndErase( vIds[i]) != nullptr) && bOk ; + return bOk ; } \ No newline at end of file