EgtGeomKernel :
- migliorata gestione loops per regioni.
This commit is contained in:
+8
-2
@@ -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 ;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user