EgtExecutor :
- piccola miglioria nella gestione dei pezzi piani per nesting.
This commit is contained in:
+41
-34
@@ -1006,6 +1006,25 @@ ExeAdjustFlatPart( int nPartId)
|
||||
return true ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
static bool
|
||||
MyCreateCurveCompoByReorder( IGeomDB* pGeomDB, int nLayerId, const INTVECTOR& vCrvIds)
|
||||
{
|
||||
int nCount = 0 ;
|
||||
int nFirstId = ExeCreateCurveCompoByReorder( nLayerId, vCrvIds, ORIG, false, RTY_GLOB, &nCount) ;
|
||||
for ( int i = 0 ; i < nCount ; ++ i) {
|
||||
int nCurrId = nFirstId + i ;
|
||||
INTVECTOR vOrigId ;
|
||||
pGeomDB->GetInfo( nCurrId, CRV_ORIG, vOrigId) ;
|
||||
for ( int j = 0 ; j < int( vOrigId.size()) ; ++ j) {
|
||||
if ( j == 0)
|
||||
pGeomDB->CopyAttributes( vOrigId[j], nCurrId) ;
|
||||
pGeomDB->Erase( vOrigId[j]) ;
|
||||
}
|
||||
}
|
||||
return ( nCount > 0) ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
ExeAdjustFlatPartLayer( int nLayerId)
|
||||
@@ -1034,9 +1053,9 @@ ExeAdjustFlatPartLayer( int nLayerId)
|
||||
// Se curva composita
|
||||
if ( pGeomDB->GetGeoType( nId) == CRV_COMPO) {
|
||||
// Compatto
|
||||
bOk = ExeMergeCurvesInCurveCompo( nId, 10 * EPS_SMALL, true) ;
|
||||
bOk = ExeMergeCurvesInCurveCompo( nId, 10 * EPS_SMALL, true) && bOk ;
|
||||
// Esplodo in curve semplici
|
||||
bOk = bOk && ExeExplodeCurveCompo( nId, nullptr) ;
|
||||
bOk = ExeExplodeCurveCompo( nId, nullptr) && bOk ;
|
||||
}
|
||||
// Passo all'entità successiva
|
||||
nId = nNextId ;
|
||||
@@ -1056,44 +1075,32 @@ ExeAdjustFlatPartLayer( int nLayerId)
|
||||
}
|
||||
nId = pGeomDB->GetNext( nId) ;
|
||||
}
|
||||
if ( bOk && vAccwIds.size() > 1) {
|
||||
int nCount = 0 ;
|
||||
int nFirstId = ExeCreateCurveCompoByReorder( nLayerId, vAccwIds, ORIG, false, RTY_GLOB, &nCount) ;
|
||||
for ( int i = 0 ; i < nCount ; ++ i) {
|
||||
int nCurrId = nFirstId + i ;
|
||||
INTVECTOR vOrigId ;
|
||||
pGeomDB->GetInfo( nCurrId, CRV_ORIG, vOrigId) ;
|
||||
for ( int j = 0 ; j < int( vOrigId.size()) ; ++ j) {
|
||||
if ( j == 0)
|
||||
pGeomDB->CopyAttributes( vOrigId[j], nCurrId) ;
|
||||
pGeomDB->Erase( vOrigId[j]) ;
|
||||
}
|
||||
}
|
||||
bOk = bOk && ( nCount > 0) ;
|
||||
}
|
||||
if ( bOk && vAcwIds.size() > 1) {
|
||||
int nCount = 0 ;
|
||||
int nFirstId = ExeCreateCurveCompoByReorder( nLayerId, vAcwIds, ORIG, false, RTY_GLOB, &nCount) ;
|
||||
for ( int i = 0 ; i < nCount ; ++ i) {
|
||||
int nCurrId = nFirstId + i ;
|
||||
INTVECTOR vOrigId ;
|
||||
pGeomDB->GetInfo( nCurrId, CRV_ORIG, vOrigId) ;
|
||||
for ( int j = 0 ; j < int( vOrigId.size()) ; ++ j) {
|
||||
if ( j == 0)
|
||||
pGeomDB->CopyAttributes( vOrigId[j], nCurrId) ;
|
||||
pGeomDB->Erase( vOrigId[j]) ;
|
||||
}
|
||||
}
|
||||
bOk = bOk && ( nCount > 0) ;
|
||||
}
|
||||
// spezzo le curve composite con discontinuità
|
||||
if ( vAccwIds.size() > 1)
|
||||
bOk = MyCreateCurveCompoByReorder( pGeomDB, nLayerId, vAccwIds) && bOk ;
|
||||
if ( vAcwIds.size() > 1)
|
||||
bOk = MyCreateCurveCompoByReorder( pGeomDB, nLayerId, vAcwIds) && bOk ;
|
||||
// Spezzo le curve composite con discontinuità
|
||||
nId = pGeomDB->GetFirstInGroup( nLayerId) ;
|
||||
while ( nId != GDB_ID_NULL && bOk) {
|
||||
// Recupero successiva
|
||||
int nNextId = pGeomDB->GetNext( nId) ;
|
||||
// Se curva composita
|
||||
if ( pGeomDB->GetGeoType( nId) == CRV_COMPO) {
|
||||
bOk = ( ExeSplitCurveAtCorners( nId, 5.0, nullptr) != GDB_ID_NULL) ;
|
||||
bOk = ( ExeSplitCurveAtCorners( nId, 5.0, nullptr) != GDB_ID_NULL) && bOk ;
|
||||
}
|
||||
// Passo all'entità successiva
|
||||
nId = nNextId ;
|
||||
}
|
||||
// Riconduco a curva semplice le composite formate da una sola curva semplice
|
||||
nId = pGeomDB->GetFirstInGroup( nLayerId) ;
|
||||
while ( nId != GDB_ID_NULL && bOk) {
|
||||
// Recupero successiva
|
||||
int nNextId = pGeomDB->GetNext( nId) ;
|
||||
// Se curva composita formata da una sola curva semplice
|
||||
if ( pGeomDB->GetGeoType( nId) == CRV_COMPO) {
|
||||
const ICurveComposite* pCrvCompo = GetCurveComposite( pGeomDB->GetGeoObj( nId)) ;
|
||||
if ( pCrvCompo->GetCurveCount() == 1)
|
||||
bOk = ExeExplodeCurveCompo( nId, nullptr) && bOk ;
|
||||
}
|
||||
// Passo all'entità successiva
|
||||
nId = nNextId ;
|
||||
|
||||
Reference in New Issue
Block a user