From 7bcd0813f9b77e01dde6bcb50af6f526a018d7b0 Mon Sep 17 00:00:00 2001 From: Dario Sassi Date: Thu, 15 May 2014 08:19:16 +0000 Subject: [PATCH] EgtGeomKernel 1.5e5 : - corr a SurfTriMesh::CreateByTwoCurves (andava in loop infinito). --- EgtGeomKernel.rc | Bin 11710 -> 11710 bytes PolyLine.cpp | 2 ++ SurfTriMesh.cpp | 20 ++++++++++---------- 3 files changed, 12 insertions(+), 10 deletions(-) diff --git a/EgtGeomKernel.rc b/EgtGeomKernel.rc index 2977fe3349808b947bef5f13f15cde9fe64b197e..e2968cf493162d203815f90c5931951f756973c1 100644 GIT binary patch delta 94 zcmdlNy)SyhH#SDo&FAG5nI|X7NNhIXTE+tApJ$r9OfU~B7Q?u?L)eQMt3-=5R03{7 L9OLFR dA1s - if ( ( dA1s - dA2p) <= ( dA2s - dA1p) + EPS_PARAM) { + // se c'è nuovo dA1s e la diagonale più corta è dA2p -> dA1s oppure non c'è dA2s + if ( ( bNext1 && ( dA1s - dA2p) <= ( dA2s - dA1p) + EPS_PARAM) || ! bNext2) { // inserisco il vertice A1s if ( ( nV1s = AddVertex( ptP1s)) == SVT_NULL) return false ; @@ -1057,16 +1057,16 @@ SurfTriMesh::VerifyPolylinesForTwoCurves( const PolyLine& PL1, const PolyLine& P // ciclo sui punti double dA1p ; double dU1p ; Point3d ptP1p ; double dA1s ; double dU1s ; Point3d ptP1s ; - bool bNext1 = PL1.GetFirstUPoint( &dU1p, &ptP1p) && PL1.GetNextUPoint( &dU1s, &ptP1s) ; + bool bNext1 = PL1.GetFirstUPoint( &dU1p, &ptP1p) && PL1.GetNextUPoint( &dU1s, &ptP1s, true) ; if ( ! bNext1) - return false ; + return true ; dA1p = 0 ; dA1s = ( dU1s - dU1F) / dDeltaU1 ; double dA2p ; double dU2s ; Point3d ptP2s ; double dA2s ; double dU2p ; Point3d ptP2p ; - bool bNext2 = PL2.GetFirstUPoint( &dU2p, &ptP2p) && PL2.GetNextUPoint( &dU2s, &ptP2s) ; + bool bNext2 = PL2.GetFirstUPoint( &dU2p, &ptP2p) && PL2.GetNextUPoint( &dU2s, &ptP2s, true) ; if ( ! bNext2) - return false ; + return true ; dA2p = 0 ; dA2s = ( dU2s - dU2F) / dDeltaU2 ; // se chiuse, verifico la coincidenza dell'inizio delle due curve @@ -1074,8 +1074,8 @@ SurfTriMesh::VerifyPolylinesForTwoCurves( const PolyLine& PL1, const PolyLine& P return false ; // verifiche sui punti successivi (non sugli ultimi) while ( bNext1 || bNext2) { - // se la diagonale più corta è dA2p -> dA1s - if ( ( dA1s - dA2p) <= ( dA2s - dA1p) + EPS_PARAM) { + // se c'è nuovo dA1s e la diagonale più corta è dA2p -> dA1s oppure non c'è dA2s + if ( ( bNext1 && ( dA1s - dA2p) <= ( dA2s - dA1p) + EPS_PARAM) || ! bNext2) { // verifico se coincidono if ( AreSamePointNear( ptP2p, ptP1s)) return false ;