From 1008ba4229731d6bc5759ce039440c79b3944752 Mon Sep 17 00:00:00 2001 From: Riccardo Elitropi Date: Tue, 17 Mar 2026 13:10:18 +0100 Subject: [PATCH 1/2] EgtGeomKernel 3.1c3 : - Migliorata e corretta funzione MakeUniform per VolZMap. --- EgtGeomKernel.rc | Bin 11710 -> 11710 bytes VolZmap.cpp | 94 +++++++++++++++++++++++------------------------ 2 files changed, 45 insertions(+), 49 deletions(-) diff --git a/EgtGeomKernel.rc b/EgtGeomKernel.rc index 1613af7b9cbc0ed488d1c838d8ebd044b8be9823..03e208ccb7930e86fa4134cddf227da185e54a80 100644 GIT binary patch delta 81 zcmdlNy)SyhH#SD&&FAG5nSs pZMapCopy( CloneBasicVolZmap( this)) ; if ( IsNull( pZMapCopy) || ! pZMapCopy->IsValid()) return false ; - // creo uno ZMap per gli intervalli da aggiungere o da rimuovere + // Creo uno ZMap per gli intervalli da aggiungere o da rimuovere PtrOwner pZMapExtra( CreateBasicVolZmap()) ; if ( IsNull( pZMapExtra) || - ! pZMapExtra->CreateEmpty( m_MapFrame.Orig(), m_dMaxZ[1] - m_dMinZ[1], - m_dMaxZ[2] - m_dMinZ[2], m_dMaxZ[0] - m_dMinZ[0], + ! pZMapExtra->CreateEmpty( m_MapFrame.Orig(), m_dMaxZ[1] - m_dMinZ[1], m_dMaxZ[2] - m_dMinZ[2], m_dMaxZ[0] - m_dMinZ[0], m_dStep, IsTriDexel())) return false ; @@ -1719,7 +1718,7 @@ VolZmap::MakeUniform( double dToler, bool bIsExtensionFirst, int nToolNum) // Ciclo sulle griglie for ( int nGrid = 0 ; nGrid < pZMapCopy->m_nMapNum ; ++ nGrid) { // Ciclo sul numero di dexel presenti nella Copia - for ( int nDex = 0 ; nDex < int( pZMapCopy->m_Values[nGrid].size()) ; ++ nDex) { + for ( int nDex = 0 ; nDex < ssize( pZMapCopy->m_Values[nGrid]) ; ++ nDex) { // Se il dexel corrente non ha sotto-intervalli passo al successivo if ( pZMapCopy->m_Values[nGrid][nDex].empty()) continue ; @@ -1727,9 +1726,9 @@ VolZmap::MakeUniform( double dToler, bool bIsExtensionFirst, int nToolNum) int nI = nDex % m_nNx[nGrid] ; int nJ = nDex / m_nNx[nGrid] ; // Recupero il numero di intervalli presenti nel Dexel corrente - int nIntervals = int( pZMapCopy->m_Values[nGrid][nDex].size()) ; + int nIntervals = ssize( pZMapCopy->m_Values[nGrid][nDex]) ; // Scorro gli intervalli presenti - for ( int nInfo = 0 ; nInfo < int( pZMapCopy->m_Values[nGrid][nDex].size()) ; ++ nInfo) { + for ( int nInfo = 0 ; nInfo < ssize( pZMapCopy->m_Values[nGrid][nDex]) ; ++ nInfo) { // Recupero l'intervallo corrente Data& Interval = pZMapCopy->m_Values[nGrid][nDex][nInfo] ; // --- Se richiesta prima estensione @@ -1739,57 +1738,54 @@ VolZmap::MakeUniform( double dToler, bool bIsExtensionFirst, int nToolNum) AddIntervals( nGrid, nI, nJ, Interval.dMin - dToler, Interval.dMin + dToler, Interval.vtMinN, Interval.vtMinN, nToolNum, true) ; // Se si sono uniti degli intervalli, potrei dover aggiungere degli spilloni nelle altre due direzioni - if ( IsTriDexel() && nIntervals != int( m_Values[nGrid][nDex].size())) { + if ( IsTriDexel() && nIntervals != ssize( m_Values[nGrid][nDex])) { // Aggiorno gli intervalli correnti ( dato che il corrente si è unito al precedente) // ( lascio invariato lo ZMapCopy) - nIntervals = int( m_Values[nGrid][nDex].size()) ; + nIntervals = ssize( m_Values[nGrid][nDex]) ; pZMapExtra->UniformIntervalsInVoxel( nGrid, nI, nJ, - pZMapCopy->m_Values[nGrid][nDex][nInfo-1].dMax, - Interval.dMin, dToler, true, - nToolNum, V_INVALID, V_INVALID) ; + pZMapCopy->m_Values[nGrid][nDex][nInfo-1].dMax, Interval.dMin, + dToler, true, nToolNum, V_INVALID, V_INVALID) ; } // *** Estremo superiore -> Intervallo : [ dMax - dToler, dMax + dToler ] // Aggiungo l'intervallo nello Zmap corrente ( lascio invariato lo ZMapCopy) AddIntervals( nGrid, nI, nJ, Interval.dMax - dToler, Interval.dMax + dToler, Interval.vtMaxN, Interval.vtMaxN, nToolNum, true) ; // Se si sono uniti degli intervalli, potrei dover aggiungere degli spilloni nelle altre due direzioni - if ( IsTriDexel() && nIntervals != int( m_Values[nGrid][nDex].size())) { + if ( IsTriDexel() && nIntervals != ssize( m_Values[nGrid][nDex])) { // Aggiorno gli intervalli correnti ( dato che il corrente si è unito al successivo) // ( lascio invariato lo ZMapCopy) - nIntervals = int( m_Values[nGrid][nDex].size()) ; + nIntervals = ssize( m_Values[nGrid][nDex]) ; pZMapExtra->UniformIntervalsInVoxel( nGrid, nI, nJ, - Interval.dMax, - pZMapCopy->m_Values[nGrid][nDex][nInfo+1].dMin, dToler, true, - nToolNum, V_INVALID, V_INVALID) ; + Interval.dMax, pZMapCopy->m_Values[nGrid][nDex][nInfo+1].dMin, + dToler, true, nToolNum, V_INVALID, V_INVALID) ; } } // --- Se richiesta prima restrizione else { - // *** Estremo inferiore -> Intervallo : [ dMin - dToler, dMin + dToler ] - // Sottraggo l'intervallo nello Zmap corrente ( lascio invariato lo ZMapCopy) - SubtractIntervals( nGrid, nI, nJ, Interval.dMin - dToler, Interval.dMin + dToler, - Interval.vtMinN, Interval.vtMinN, nToolNum, true) ; - // Se l'intervallo si è annullato, potrei dover sottrarre degli spilloni nelle altre due direzioni - if ( IsTriDexel() && nIntervals != int( m_Values[nGrid][nDex].size())) { - // Aggiorno gli intervalli correnti ( lascio invariato lo ZMapCopy) - nIntervals = int( m_Values[nGrid][nDex].size()) ; - pZMapExtra->UniformIntervalsInVoxel( nGrid, nI, nJ, - Interval.dMin, - Interval.dMax, dToler, true, - Tool::UNDEF, V_INVALID, V_INVALID) ; + // Se la lunghezza dell'intervallo non è almeno il doppio della tolleranza + double dLen = Interval.dMax - Interval.dMin ; + if ( dLen < 2. * ( dToler + EPS_SMALL)) { + // L'intervallo sparisce completamente + SubtractIntervals( nGrid, nI, nJ, Interval.dMin - EPS_SMALL, Interval.dMax + EPS_SMALL, + Interval.vtMinN, Interval.vtMaxN, nToolNum, true) ; + // Rimuovo le parti di spillone nelle altre dimensioni + if ( IsTriDexel()) { + -- nIntervals ; + pZMapExtra->UniformIntervalsInVoxel( nGrid, nI, nJ, + Interval.dMin, Interval.dMax, + dToler, true, Tool::UNDEF, V_INVALID, V_INVALID) ; + } } - // *** Estremo superiore -> Intervallo : [ dMax - dToler, dMax + dToler ] - // Sottraggo l'intervallo nello Zmap corrente ( lascio invariato lo ZMapCopy) - SubtractIntervals( nGrid, nI, nJ, Interval.dMax - dToler, Interval.dMax + dToler, - Interval.vtMaxN, Interval.vtMaxN, nToolNum, true) ; - // Se l'intervallo si è annullato, potrei dover sottrarre degli spilloni nelle altre due direzioni - if ( IsTriDexel() && nIntervals != int( m_Values[nGrid][nDex].size())) { - // Aggiorno gli intervalli correnti ( lascio invariato lo ZMapCopy) - nIntervals = int( m_Values[nGrid][nDex].size()) ; - pZMapExtra->UniformIntervalsInVoxel( nGrid, nI, nJ, - Interval.dMin, - Interval.dMax, dToler, true, - Tool::UNDEF, V_INVALID, V_INVALID) ; + // Se sufficientemente lungo, allora + else { + // *** Estremo inferiore -> Intervallo : [ dMin, dMin + dToler ] + // Sottraggo l'intervallo nello Zmap corrente ( lascio invariato lo ZMapCopy) + SubtractIntervals( nGrid, nI, nJ, Interval.dMin - EPS_SMALL, Interval.dMin + dToler, + Interval.vtMinN, Interval.vtMinN, nToolNum, true) ; + // *** Estremo superiore -> Intervallo : [ dMax - dToler, dMax ] + // Sottraggo l'intervallo nello Zmap corrente ( lascio invariato lo ZMapCopy) + SubtractIntervals( nGrid, nI, nJ, Interval.dMax - dToler, Interval.dMax + EPS_SMALL, + Interval.vtMaxN, Interval.vtMaxN, nToolNum, true) ; } } } @@ -1799,12 +1795,12 @@ VolZmap::MakeUniform( double dToler, bool bIsExtensionFirst, int nToolNum) // Ciclo sulle griglie ( uso lo Zmap Corrente, lascio invariato pZMapCopy) for ( int nGrid = 0 ; nGrid < m_nMapNum ; ++ nGrid) { // Ciclo sul numero di dexel presenti - for ( int nDex = 0 ; nDex < int( m_Values[nGrid].size()) ; ++ nDex) { + for ( int nDex = 0 ; nDex < ssize( m_Values[nGrid]) ; ++ nDex) { // Se l'intervallo è vuoto, non faccio nulla if ( m_Values[nGrid][nDex].empty()) continue ; // Per ogni intervallo ricavato fino ad ora, restringo della tolleranza - for ( int nInfo = 0 ; nInfo < int( m_Values[nGrid][nDex].size()) ; ++ nInfo) { + for ( int nInfo = 0 ; nInfo < ssize( m_Values[nGrid][nDex]) ; ++ nInfo) { // --- Se richiesta prima estensione if ( bIsExtensionFirst) { m_Values[nGrid][nDex][nInfo].dMin += dToler ; @@ -1816,7 +1812,7 @@ VolZmap::MakeUniform( double dToler, bool bIsExtensionFirst, int nToolNum) m_Values[nGrid][nDex][nInfo].dMax += dToler ; } // Definisco il colore - for ( int nOrigInfo = 0 ; nOrigInfo < int( pZMapCopy->m_Values[nGrid][nDex].size()) ; ++ nOrigInfo) { + for ( int nOrigInfo = 0 ; nOrigInfo < ssize( pZMapCopy->m_Values[nGrid][nDex]) ; ++ nOrigInfo) { if ( pZMapCopy->m_Values[nGrid][nDex][nOrigInfo].dMin - m_Values[nGrid][nDex][nInfo].dMin < EPS_SMALL) m_Values[nGrid][nDex][nInfo].nToolMin = pZMapCopy->m_Values[nGrid][nDex][nOrigInfo].nToolMin ; if ( pZMapCopy->m_Values[nGrid][nDex][nOrigInfo].dMax - m_Values[nGrid][nDex][nInfo].dMax < EPS_SMALL) @@ -1830,7 +1826,7 @@ VolZmap::MakeUniform( double dToler, bool bIsExtensionFirst, int nToolNum) // Ciclo sulle griglie ( uso lo ZmapExtra, lascio invariato pZMapCopy) for ( int nGrid = 0 ; nGrid < pZMapExtra->m_nMapNum ; ++ nGrid) { // Ciclo sul numero di dexel presenti - for ( int nDex = 0 ; nDex < int( pZMapExtra->m_Values[nGrid].size()) ; ++ nDex) { + for ( int nDex = 0 ; nDex < ssize( pZMapExtra->m_Values[nGrid]) ; ++ nDex) { // Se l'intervallo è vuoto, non faccio nulla if ( pZMapExtra->m_Values[nGrid][nDex].empty()) continue ; @@ -1838,19 +1834,19 @@ VolZmap::MakeUniform( double dToler, bool bIsExtensionFirst, int nToolNum) int nI = nDex % m_nNx[nGrid] ; int nJ = nDex / m_nNx[nGrid] ; // Per ogni intervallo ricavato fino ad ora... - for ( int nInfo = 0 ; nInfo < int( pZMapExtra->m_Values[nGrid][nDex].size()) ; ++ nInfo) { + for ( int nInfo = 0 ; nInfo < ssize( pZMapExtra->m_Values[nGrid][nDex]) ; ++ nInfo) { double dMin = pZMapExtra->m_Values[nGrid][nDex][nInfo].dMin ; double dMax = pZMapExtra->m_Values[nGrid][nDex][nInfo].dMax ; Vector3d vtNMin = pZMapExtra->m_Values[nGrid][nDex][nInfo].vtMinN ; Vector3d vtNMax = pZMapExtra->m_Values[nGrid][nDex][nInfo].vtMaxN ; // --- Se richiesta prima estensione if ( bIsExtensionFirst) { - // ... aggiungo i contributi - AddIntervals( nGrid, nI, nJ, dMin, dMax, vtNMin, vtNMax, nToolNum, true) ; + // Aggiungo i contributi + AddIntervals( nGrid, nI, nJ, dMin, dMax, vtNMin, vtNMax, nToolNum, true) ; } // --- Se richiesta prima restrizione else { - // ... sottraggo i contributi + // Sottraggo i contributi SubtractIntervals( nGrid, nI, nJ, dMin, dMax, vtNMin, vtNMax, nToolNum, true) ; } } From e394615f8470d18f4952e7adcb9f90fe748ddb5e Mon Sep 17 00:00:00 2001 From: Dario Sassi Date: Tue, 17 Mar 2026 18:12:01 +0100 Subject: [PATCH 2/2] EgtGeomKernel : - in Polygon3d::FromPlaneTrimmedWithBox piccola correzione su parametro di tolleranza ignorato. --- Polygon3d.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Polygon3d.cpp b/Polygon3d.cpp index 2892c69..6e9b42e 100644 --- a/Polygon3d.cpp +++ b/Polygon3d.cpp @@ -173,7 +173,7 @@ Polygon3d::FromPlaneTrimmedWithBox( const Point3d& ptOn, const Vector3d& vtN, { Plane3d plPlane ; plPlane.Set( ptOn, vtN) ; - return FromPlaneTrimmedWithBox( plPlane, ptMin, ptMax, bOnEq, bOnCt) ; + return FromPlaneTrimmedWithBox( plPlane, ptMin, ptMax, bOnEq, bOnCt, dToler) ; } //----------------------------------------------------------------------------