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
+25 -15
View File
@@ -1206,9 +1206,12 @@ ExeCreateSurfTmByTriangles( int nParentId, const INTVECTOR& vIds, bool bErase)
StmFromTriangleSoup StmFts ;
bOk = bOk && StmFts.Start() ;
// Recupero tutti i triangoli delle superfici sorgenti e li inserisco nella nuova
for ( size_t i = 0 ; i < vIds.size() ; ++ i) {
INTVECTOR vMyIds ;
for ( size_t i = 0 ; bOk && i < vIds.size() ; ++ i) {
int nId = (( vIds[i] != GDB_ID_SEL) ? vIds[i] : pGeomDB->GetFirstSelectedObj()) ;
while ( nId != GDB_ID_NULL) {
// salvo Id nel mio elenco
vMyIds.emplace_back( nId) ;
// recupero la superficie sorgente
const ISurfTriMesh* pStmS = GetSurfTriMesh( pGeomDB->GetGeoObj( nId)) ;
bOk = bOk && ( pStmS != nullptr) ;
@@ -1237,14 +1240,16 @@ ExeCreateSurfTmByTriangles( int nParentId, const INTVECTOR& vIds, bool bErase)
int nNewId = ( bOk ? pGeomDB->AddGeoObj( GDB_ID_NULL, nParentId, Release( pStm)) : GDB_ID_NULL) ;
// se richiesto, cancello le superfici originali
if ( nNewId != GDB_ID_NULL && bErase) {
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()) ;
}
// cancello le superfici originali e determino Id minimo
int nMinId = INT_MAX ;
for ( auto nId : vMyIds) {
pGeomDB->Erase( nId) ;
if ( nId < nMinId)
nMinId = nId ;
}
// assegno alla superficie composita l'Id minimo appena trovato
if ( pGeomDB->ChangeId( nNewId, nMinId))
nNewId = nMinId ;
}
ExeSetModified() ;
// se richiesto, salvo il comando Lua equivalente
@@ -1276,9 +1281,12 @@ ExeCreateSurfTmBySewing( int nParentId, const INTVECTOR& vIds, bool bErase)
bOk = bOk && ! IsNull( pStm) ;
// esecuzione
bool bFirst = true ;
INTVECTOR vMyIds ;
for ( size_t i = 0 ; bOk && i < vIds.size() ; ++ i) {
int nId = (( vIds[i] != GDB_ID_SEL) ? vIds[i] : pGeomDB->GetFirstSelectedObj()) ;
while ( nId != GDB_ID_NULL) {
// salvo Id nel mio elenco
vMyIds.emplace_back( nId) ;
// recupero la superficie da cucire
const ISurfTriMesh* pStmS = GetSurfTriMesh( pGeomDB->GetGeoObj( nId)) ;
bOk = bOk && ( pStmS != nullptr) ;
@@ -1306,14 +1314,16 @@ ExeCreateSurfTmBySewing( int nParentId, const INTVECTOR& vIds, bool bErase)
int nNewId = ( bOk ? pGeomDB->AddGeoObj( GDB_ID_NULL, nParentId, Release( pStm)) : GDB_ID_NULL) ;
// se richiesto, cancello le superfici originali
if ( nNewId != GDB_ID_NULL && bErase) {
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()) ;
}
// cancello le superfici originali e determino Id minimo
int nMinId = INT_MAX ;
for ( auto nId : vMyIds) {
pGeomDB->Erase( nId) ;
if ( nId < nMinId)
nMinId = nId ;
}
// assegno alla superficie composita l'Id minimo appena trovato
if ( pGeomDB->ChangeId( nNewId, nMinId))
nNewId = nMinId ;
}
ExeSetModified() ;
// se richiesto, salvo il comando Lua equivalente