From f2dc3876b0ebb64e0d83d67df86b50719edc1d29 Mon Sep 17 00:00:00 2001 From: Riccardo Elitropi Date: Thu, 22 Jan 2026 19:25:01 +0100 Subject: [PATCH] EgtExecutor : - in Trimming piccola miglioria nella scelta delle curve di sincronizzazione da visualizzare. --- EXE_Trimming.cpp | 41 ++++++++++++++++++++++++++++------------- 1 file changed, 28 insertions(+), 13 deletions(-) diff --git a/EXE_Trimming.cpp b/EXE_Trimming.cpp index 7c35ed8..f034488 100644 --- a/EXE_Trimming.cpp +++ b/EXE_Trimming.cpp @@ -704,6 +704,9 @@ ExeTrimmingGetSurfBzSyncPoints( int nParentId, int nEdge1Id, int nEdge2Id, doubl bOk = bOk && ( pCrvEdge1 != nullptr && pCrvEdge1->IsValid() && pCrvEdge2 != nullptr && pCrvEdge2->IsValid()) ; + // Verifico che le curve siano entrambe Aperte o entrambe Chiuse + bOk = bOk && ( pCrvEdge1->IsClosed() == pCrvEdge2->IsClosed()) ; + // Recupero i punti di sincronizzazione BIPNTVECTOR vSyncPoints ; bOk = bOk && GetTrimmingSurfBzSyncPoints( pCrvEdge1, pCrvEdge2, dMyLinTol, vSyncPoints) && @@ -761,20 +764,32 @@ ExeTrimmingGetSurfBzSyncPoints( int nParentId, int nEdge1Id, int nEdge2Id, doubl } // Se devo mostrare alcune Linee -> Algoritmo di Pick_Bresenham if ( bOk && nLineNbr > 0) { - if ( nLineNbr == 1) - setInds.insert( 0) ; - else { - int nDx = nToTSyncLines - 1 ; - int nDy = nLineNbr - 1 ; - int nErr = 0 ; - int nX = 0 ; - for ( int i = 0 ; i <= nDy ; ++ i) { - setInds.insert( nX) ; - nErr += nDx ; - while ( nErr >= nDy) { - nX += 1 ; - nErr -= nDy ; + bool bBothOpen = ( ! pCrvEdge1->IsClosed() && ! pCrvEdge2->IsClosed()) ; + bool bBothClosed = ( ! bBothOpen) ; + int nLastIdx = nToTSyncLines - 1 ; + if ( bBothClosed) { + int nLine = nLineNbr ; + if ( nLine == 1) + setInds.insert( 0) ; + else { + int nMaxIndex = nToTSyncLines - 2 ; + for ( int i = 0 ; i < nLine ; ++ i) { + double dT = double( i) / double( nLine) ; + int nIdx = int( 0.5 + dT * nMaxIndex) ; + setInds.insert( nIdx) ; } + setInds.erase( nLastIdx) ; + } + } + else { + int nInternal = nLineNbr ; + setInds.insert( 0) ; + setInds.insert( nLastIdx) ; + int nMaxIndex = nLastIdx ; + for ( int i = 0; i < nInternal ; ++ i) { + double dT = double( i + 1) / double( nInternal + 1) ; + int nIdx = int( 0.5 + dT * nMaxIndex) ; + setInds.insert( nIdx) ; } } }