From 817bfa788e6c33347bb85d59f6a18693228f5b2e Mon Sep 17 00:00:00 2001 From: DarioS Date: Mon, 28 Nov 2022 08:24:05 +0100 Subject: [PATCH] EgtGeomKernel : - migliorata gestione loops per regioni. --- AdjustLoops.cpp | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/AdjustLoops.cpp b/AdjustLoops.cpp index 87465f6..86447e0 100644 --- a/AdjustLoops.cpp +++ b/AdjustLoops.cpp @@ -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 @@ -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 ; } } }