EgtExecutor :

- nella creazione di curve composite da altre curve si cerca di riutilizzare gli Id delle curve cancellate
- lo stesso per le superfici
- aggiunte funzioni Exe e Lua AddCurveCompoCurve.
This commit is contained in:
Dario Sassi
2018-12-28 19:31:45 +00:00
parent da88af65ed
commit 1c9e4ab44a
4 changed files with 149 additions and 32 deletions
+47 -15
View File
@@ -1546,6 +1546,9 @@ MyCreateCurveCompo( int nParentId, const INTVECTOR& vIds, bool bErase)
IGeomDB* pGeomDB = GetCurrGeomDB() ;
VERIFY_GEOMDB( pGeomDB, GDB_ID_NULL)
nParentId = AdjustId( nParentId) ;
// verifico vettore Id non vuoto
if ( vIds.empty())
return GDB_ID_NULL ;
// creo la curva composita
PtrOwner<ICurveComposite> pCrvCompo( CreateCurveComposite()) ;
if ( IsNull( pCrvCompo))
@@ -1558,10 +1561,8 @@ MyCreateCurveCompo( int nParentId, const INTVECTOR& vIds, bool bErase)
Vector3d vtExtr = CalcExtrusion( pGeomDB, nParentId, RTY_GRID) ;
double dThick = 0 ;
// esecuzione
INTVECTOR::const_iterator Iter ;
for ( Iter = vIds.begin() ; Iter != vIds.end() ; ++Iter) {
for ( auto nIdCrv : vIds) {
// recupero la curva
int nIdCrv = *Iter ;
const ICurve* pCrv = GetCurve( pGeomDB->GetGeoObj( nIdCrv)) ;
if ( pCrv == nullptr)
return GDB_ID_NULL ;
@@ -1594,12 +1595,18 @@ MyCreateCurveCompo( int nParentId, const INTVECTOR& vIds, bool bErase)
// inserisco la curva composita nel DB
int nId = pGeomDB->AddGeoObj( GDB_ID_NULL, nParentId, Release( pCrvCompo)) ;
ExeSetModified() ;
// se ok e richiesto, cancello le curve originali
// se ok e richiesta cancellazione curve originali
if ( nId != GDB_ID_NULL && bErase) {
for ( Iter = vIds.begin() ; Iter != vIds.end() ; ++Iter) {
if ( ! pGeomDB->Erase( *Iter))
return GDB_ID_NULL ;
// cancello le curve originali e determino Id minimo
int nMinId = INT_MAX ;
for ( auto nIdCrv : vIds) {
pGeomDB->Erase( nIdCrv) ;
if ( nIdCrv < nMinId)
nMinId = nIdCrv ;
}
// assegno alla curva composita l'Id minimo appena trovato
if ( pGeomDB->ChangeId( nId, nMinId))
nId = nMinId ;
}
// restituisco l'identificativo della nuova entità
return nId ;
@@ -1639,9 +1646,11 @@ MyCreateCurveCompoByChain( int nParentId, const INTVECTOR& vIds,
double dToler = 10 * EPS_SMALL ;
ChainCurves chainC ;
chainC.Init( bAllowInvert, dToler, int( vIds.size())) ;
INTVECTOR vMyIds ;
for ( size_t i = 0 ; i < vIds.size() ; ++ i) {
int nId = (( vIds[i] != GDB_ID_SEL) ? vIds[i] : pGeomDB->GetFirstSelectedObj()) ;
while ( nId != GDB_ID_NULL) {
vMyIds.emplace_back( nId) ;
// recupero la curva e il suo riferimento
ICurve* pCrv = GetCurve( pGeomDB->GetGeoObj( nId)) ;
if ( pCrv == nullptr)
@@ -1748,14 +1757,37 @@ MyCreateCurveCompoByChain( int nParentId, const INTVECTOR& vIds,
if ( ! bErase)
pGeomDB->SetInfo( nNewId, "ORIG", vOrig) ;
}
// se richiesto e ok, cancello le curve originali
if ( bErase && nFirstId != GDB_ID_NULL) {
for ( size_t i = 0 ; i < vIds.size() ; ++ i) {
int nId = (( vIds[i] != GDB_ID_SEL) ? vIds[i] : pGeomDB->GetFirstSelectedObj()) ;
while ( nId != GDB_ID_NULL) {
pGeomDB->Erase( nId) ;
// passo al successivo
nId = (( vIds[i] != GDB_ID_SEL) ? GDB_ID_NULL : pGeomDB->GetFirstSelectedObj()) ;
// se ok e richiesta cancellazione curve originali
if ( nFirstId != GDB_ID_NULL && bErase) {
// cancello le curve originali e determino Id minimo
int nMinId = INT_MAX ;
for ( auto nId : vMyIds) {
pGeomDB->Erase( nId) ;
if ( nId < nMinId)
nMinId = nId ;
}
// se una sola curva composita risultante
if ( nCount == 1) {
// assegno alla curva composita l'Id minimo appena trovato
if ( pGeomDB->ChangeId( nFirstId, nMinId))
nFirstId = nMinId ;
}
// altrimenti, con più curve devo trovare un intervallo adeguato di Id consecutivi minimi
else {
// verifico intervallo Id minimi
bool bOk = true ;
for ( int i = 0 ; i < nCount ; ++ i) {
if ( pGeomDB->ExistsObj( nMinId + i)) {
bOk = false ;
break ;
}
}
// se intervallo trovato, li assegno
if ( bOk) {
for ( int i = 0 ; i < nCount ; ++ i) {
pGeomDB->ChangeId( nFirstId + i, nMinId + i) ;
}
nFirstId = nMinId ;
}
}
}