From f02f29c543d3d26b57fdeb480dee1fd28a6a3d5b Mon Sep 17 00:00:00 2001 From: Daniele Bariletti Date: Tue, 27 Jan 2026 13:36:42 +0100 Subject: [PATCH] EgtGeomKernel 3.1a4 : - correzione all'intersezione LineLine - correzione all'intersezione CompoCompo - cambio versione. --- EgtGeomKernel.rc | Bin 11710 -> 11710 bytes IntersCrvCompoCrvCompo.cpp | 6 +++++- IntersLineLine.cpp | 8 ++++---- 3 files changed, 9 insertions(+), 5 deletions(-) diff --git a/EgtGeomKernel.rc b/EgtGeomKernel.rc index 245321f55d8d74e4d043c778cff34a3e31717e2a..5ff8fcbaacafb63d0892e3ed26b696523ac19e8c 100644 GIT binary patch delta 81 zcmdlNy)SyhH#SC-&FAG5nSs m_Info[j].IciB[kj].dU + EPS_PARAM) + m_Info[j].IciB[kj].nNextTy = m_Info[i].IciB[ki].nNextTy ; // cancello l'intersezione corrente (non aggiunge nulla rispetto alla precedente) EraseCurrentInfo( i, j) ; } // caso NULL-NULL per precedente di prima curva else if ( m_Info[j].IciA[kj].nPrevTy == ICCT_NULL && m_Info[j].IciA[kj].nNextTy == ICCT_NULL) { - m_Info[i].IciA[0].nPrevTy = m_Info[j].IciA[0].nPrevTy ; + m_Info[i].IciA[ki].nPrevTy = m_Info[j].IciA[kj].nPrevTy ; + if ( m_Info[j].IciB[kj].dU < m_Info[i].IciB[ki].dU - EPS_PARAM) + m_Info[i].IciB[ki].nPrevTy = m_Info[j].IciB[kj].nPrevTy ; // cancello l'intersezione precedente (non aggiunge nulla rispetto alla corrente) EraseOtherInfo( i, j) ; } diff --git a/IntersLineLine.cpp b/IntersLineLine.cpp index 12e0ce7..9d06ec4 100644 --- a/IntersLineLine.cpp +++ b/IntersLineLine.cpp @@ -180,10 +180,10 @@ IntersLineLine::IntersFiniteLines( const CurveLine& Line1, const CurveLine& Line } // estremità sovrapposte di poco if ( ! bParallel && abs( dCrossXY) < ( 0.1 * DEGTORAD) * ( dLen1XY * dLen2XY)) { - if (( nS1Side == 0 && nS2Side == 0 && ! AreSamePointXYEpsilon( ptS1, ptS2, 2 * EPS_SMALL)) || - ( nS1Side == 0 && nE2Side == 0 && ! AreSamePointXYEpsilon( ptS1, ptE2, 2 * EPS_SMALL)) || - ( nE1Side == 0 && nS2Side == 0 && ! AreSamePointXYEpsilon( ptE1, ptS2, 2 * EPS_SMALL)) || - ( nE1Side == 0 && nE2Side == 0 && ! AreSamePointXYEpsilon( ptE1, ptE2, 2 * EPS_SMALL))) { + if (( nS1Side == 0 && nS2Side == 0 && ScalarXY( vtDir1, vtDir2) < 0 && ! AreSamePointXYEpsilon( ptS1, ptS2, 2 * EPS_SMALL)) || + ( nS1Side == 0 && nE2Side == 0 && ScalarXY( vtDir1, vtDir2) > 0 && ! AreSamePointXYEpsilon( ptS1, ptE2, 2 * EPS_SMALL)) || + ( nE1Side == 0 && nS2Side == 0 && ScalarXY( vtDir1, vtDir2) > 0 && ! AreSamePointXYEpsilon( ptE1, ptS2, 2 * EPS_SMALL)) || + ( nE1Side == 0 && nE2Side == 0 && ScalarXY( vtDir1, vtDir2) < 0 && ! AreSamePointXYEpsilon( ptE1, ptE2, 2 * EPS_SMALL))) { bParallel = true ; bFarEnds = false ; }