From d3528e36607456bcda3221f71a8c4f8da4ea9209 Mon Sep 17 00:00:00 2001 From: Riccardo Elitropi Date: Thu, 19 Sep 2024 09:03:49 +0200 Subject: [PATCH] Include : - aggiunte costanti per CalcPocketing. - aggiunta funzione di salvataggio su file. --- EGkCalcPocketing.h | 6 +++-- EGkGeoObjSave.h | 67 ++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 71 insertions(+), 2 deletions(-) diff --git a/EGkCalcPocketing.h b/EGkCalcPocketing.h index a536af3..092e668 100644 --- a/EGkCalcPocketing.h +++ b/EGkCalcPocketing.h @@ -37,7 +37,7 @@ enum { POCKET_ZIGZAG = 0, POCKET_ONEWAY = 1, POCKET_SPIRALIN = 2, POCKET_SPIRALOUT = 3, - POCKET_CONFORMAL_ZIGZAG = 4, + POCKET_CONFORMAL_ZIGZAG = 4, POCKET_CONFORMAL_ONEWAY = 5} ; enum { TEMP_PROP_SMOOTH = -2, @@ -47,4 +47,6 @@ enum { TEMP_PROP_SMOOTH = -2, TEMP_PROP_OUT_START = 2, TEMP_PROP_SINGLE_CURVE = 3, TEMP_PROP_OPT_TRAPEZOID = 4, - TEMP_PROP_BORDER_CURVE = 5} ; + TEMP_PROP_BORDER_CURVE = 5, + TEMP_PROP_CURVE_ACTIVE = 6, + TEMP_PROP_CURVE_INACTIVE = 7} ; diff --git a/EGkGeoObjSave.h b/EGkGeoObjSave.h index c6ca6fd..039cd88 100644 --- a/EGkGeoObjSave.h +++ b/EGkGeoObjSave.h @@ -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 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 ; } \ No newline at end of file