EgtGeomKernel :

- migliorata gestione loops per regioni.
This commit is contained in:
DarioS
2022-11-28 08:24:05 +01:00
parent a4bd5a25c2
commit 817bfa788e
+8 -2
View File
@@ -19,6 +19,7 @@
#include "AdjustLoops.h"
#include "/EgtDev/Include/EGkIntersCurves.h"
#include "/EgtDev/Include/EGkIntervals.h"
#include "/EgtDev/Include/EgtNumUtils.h"
#include "/EgtDev/Include/EgtPointerOwner.h"
#include <algorithm>
@@ -97,6 +98,7 @@ MyAdjustLoops( ICurve* pCurve, ICURVEPLIST& CrvLst)
sort( vIccInfo.begin(), vIccInfo.end(), SortCrvCrvInfo) ;
// Tolgo le parti da eliminare
int nCross = 0 ;
for ( int i = 0 ; i < int( vIccInfo.size()) ; ++ i) {
if ( i < int( vIccInfo.size()) - 1) {
@@ -106,7 +108,7 @@ MyAdjustLoops( ICurve* pCurve, ICURVEPLIST& CrvLst)
abs( vIccInfo[i].IciB[0].dU - vIccInfo[i+1].IciB[0].dU) < EPS_SMALL) {
// elimino il tratto
inOk.Subtract( vIccInfo[i].IciA[0].dU, vIccInfo[i].IciB[0].dU) ;
// salto le intersezioni successive già considerate rimuvendo questo intervallo
// salto le intersezioni successive già considerate rimuovendo questo intervallo
int j = i + 2 ;
while ( j < ( int)vIccInfo.size() && vIccInfo[j].IciA[0].dU > vIccInfo[i].IciA[0].dU - EPS_SMALL &&
vIccInfo[j].IciA[1].dU < vIccInfo[i].IciB[0].dU + EPS_SMALL) {
@@ -147,7 +149,11 @@ MyAdjustLoops( ICurve* pCurve, ICURVEPLIST& CrvLst)
}
// altrimenti attraversamento
else {
inOk.Subtract( vIccInfo[i].IciA[0].dU, vIccInfo[i].IciB[0].dU) ;
if ( IsEven( nCross))
inOk.Subtract( vIccInfo[i].IciA[0].dU, vIccInfo[i].IciB[0].dU) ;
else
inOk.Add( vIccInfo[i].IciA[0].dU, vIccInfo[i].IciB[0].dU) ;
++ nCross ;
}
}
}