Include :

- aggiunte costanti per CalcPocketing.
- aggiunta funzione di salvataggio su file.
This commit is contained in:
Riccardo Elitropi
2024-09-19 09:03:49 +02:00
parent 83cfdfc50e
commit d3528e3660
2 changed files with 71 additions and 2 deletions
+67
View File
@@ -177,4 +177,71 @@ SaveCurveCompo( ICRVCOMPOPOVECTOR& vCompo, bool bUniform, const std::string& sFi
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<IGeoObj*> 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<IGeoObj*>( vCrvsCompo[i]->Clone())) ;
}
std::vector<IGeoObj*> 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<IGeoObj*>( vBisectors[i]->Clone())) ;
}
// creo GeomDB temporaneo
PtrOwner<IGeomDB> 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 ;
}