EgtExecutor 1.6t2 :

- corretto nesting di rettangoli (box) quando più grandi dell'area in cui andrebbero inseriti.
This commit is contained in:
Dario Sassi
2016-08-11 17:57:44 +00:00
parent 8538fba6b8
commit 61f65bfe2a
2 changed files with 11 additions and 3 deletions
+11 -3
View File
@@ -1,13 +1,13 @@
//----------------------------------------------------------------------------
// EgalTech 2015-2015
// EgalTech 2015-2016
//----------------------------------------------------------------------------
// File : EXE_NstBoxNesting.cpp Data : 20.09.15 Versione : 1.6l5
// File : EXE_NstBoxNesting.cpp Data : 11.08.16 Versione : 1.6t2
// Contenuto : Funzioni Nesting di Box per EXE.
//
//
//
// Modifiche : 20.09.15 DS Creazione modulo.
//
// 11.08.16 DS Corretto caso con pezzo più grande del pannello.
//
//----------------------------------------------------------------------------
@@ -123,15 +123,19 @@ ExePackBox( int nId, double dXmin, double dYmin, double dXmax, double dYmax, dou
// Elimino i valori coincidenti
vY.erase( unique( vY.begin(), vY.end(), [](double a, double b){ return fabs( a - b) < EPS_SMALL ;}), vY.end()) ;
// Testo le Y in ordine opportuno
bool bFound = false ;
double dXok = INFINITO, dYok = INFINITO ;
for ( auto dY : vY) {
double dExtraMove ;
if ( VerifyBoxAndMoveOnX( b3Part, Point3d( dXmin, dY, 0) - ptPart, vBox, dXmax + dOffs, dExtraMove)) {
dXok = dXmin + dExtraMove ;
dYok = dY ;
bFound = true ;
break ;
}
}
if ( ! bFound)
return false ;
// Verifico che il pezzo nella nuova posizione non esca da Ymax o Y min
if ( bBottomUp && b3Part.GetMax().y - ptPart.y + dYok > dYmax + dOffs + EPS_SMALL)
return false ;
@@ -230,15 +234,19 @@ ExePackBoxCluster( const INTVECTOR& vIds, double dXmin, double dYmin, double dXm
// Elimino i valori coincidenti
vY.erase( unique( vY.begin(), vY.end(), [](double a, double b){ return fabs( a - b) < EPS_SMALL ;}), vY.end()) ;
// Testo le Y in ordine opportuno
bool bFound = false ;
double dXok = INFINITO, dYok = INFINITO ;
for ( auto dY : vY) {
double dExtraMove ;
if ( VerifyBoxAndMoveOnX( b3Cluster, Point3d( dXmin, dY, 0) - ptCluster, vBox, dXmax + dOffs, dExtraMove)) {
dXok = dXmin + dExtraMove ;
dYok = dY ;
bFound = true ;
break ;
}
}
if ( ! bFound)
return false ;
// Verifico che il cluster nella nuova posizione non esca da Ymax
if ( bBottomUp && b3Cluster.GetMax().y - ptCluster.y + dYok > dYmax + dOffs + EPS_SMALL)
return false ;