From fe46b8ebd2e751aef94583bc6f163cbd5307f5fb Mon Sep 17 00:00:00 2001 From: SaraP Date: Fri, 12 Apr 2024 14:53:00 +0200 Subject: [PATCH] EgtGeomKernel 2.6d3 : - in Voronoi modificata la direzione dei bisettori per averli sempre orientati dal parametro minore al maggiore. --- EgtGeomKernel.rc | Bin 11710 -> 11710 bytes Voronoi.cpp | 26 ++++++++++++++++++++++---- 2 files changed, 22 insertions(+), 4 deletions(-) diff --git a/EgtGeomKernel.rc b/EgtGeomKernel.rc index 5e622f42cff1d973f3784779b632ba97880f0e3f..92775c74707d2eb0fc33f5d046d25bf6a9cc8827 100644 GIT binary patch delta 238 zcmdlNy)SyhI%aiGhCGIJh8%`ehGHOAV9;O)W+-7u1ma8}FBB-731Uy?R&U)L$1;bB z(RlN3HbrJec1_cHUhESkLCPN8BDnkm89}HwAf_cT0PijeT z{=m$}%xJXvyqqG4`lwjSxVewp10r;uY4S3`JfN_k6i~QJ7*lvJ3$os9QmsEYnTvVZ l dParE) { + swap( ptS, ptE) ; + swap( dParS, dParE) ; + } pLine->Set( ptS, ptE) ; pLine->SetTempParam( dParS, 0) ; pLine->SetTempParam( dParE, 1) ; @@ -433,7 +438,7 @@ Voronoi::GetBisectorCurve( int i) return nullptr ; pArc->SetC2P( ptC, ptS, ptE) ; pArc->SetTempParam( dParS, 0) ; - pArc->SetTempParam( dParS, 1) ; + pArc->SetTempParam( dParS, 1) ; // dParE = dParS pArc->ToGlob( m_Frame) ; return pArc ; } @@ -449,15 +454,23 @@ Voronoi::GetBisectorCurve( int i) if ( pCompo == nullptr) return nullptr ; + // verifico se devo leggere i punti del bisettore al contrario per averlo orientato dal parametro minore al maggiore + bool bInvert = false ; + double dPar1, dPar2 ; + m_vroni->GetApproxedBisectorParams( i, dPar1, dPar2) ; + if ( dPar1 > dPar2 + EPS_SMALL) + bInvert = true ; + // punto iniziale Point3d pt ; double dParS ; - m_vroni->GetApproxedBisectorPoint( i, 0, pt.v, dParS) ; + m_vroni->GetApproxedBisectorPoint( i, bInvert ? nPoints - 1 : 0, pt.v, dParS) ; pCompo->AddPoint( pt) ; int nCrvCount = 0 ; double dParPrev = dParS ; - for ( int j = 1 ; j < nPoints ; j ++) { + int j = bInvert ? nPoints - 2 : 1 ; + while ( ( bInvert && j >= 0) || ( ! bInvert && j < nPoints)) { double dPar ; m_vroni->GetApproxedBisectorPoint( i, j, pt.v, dPar) ; if ( pCompo->AddLine( pt)) { @@ -467,7 +480,12 @@ Voronoi::GetBisectorCurve( int i) // aggiorno parametro precedente dParPrev = dPar ; nCrvCount ++ ; - } + } + // aggiorno per punto successivo + if ( bInvert) + j -- ; + else + j ++ ; } // setto parametri sulla curva