EgtGeomKernel 1.5e5 :

- corr a SurfTriMesh::CreateByTwoCurves (andava in loop infinito).
This commit is contained in:
Dario Sassi
2014-05-15 08:19:16 +00:00
parent 2b0b6800cb
commit 7bcd0813f9
3 changed files with 12 additions and 10 deletions
+10 -10
View File
@@ -1,13 +1,13 @@
//----------------------------------------------------------------------------
// EgalTech 2013-2014
//----------------------------------------------------------------------------
// File : SurfTriMesh.cpp Data : 26.03.14 Versione : 1.5c9
// File : SurfTriMesh.cpp Data : 15.05.14 Versione : 1.5e5
// Contenuto : Implementazione della classe Superfici TriMesh.
//
//
//
// Modifiche : 26.03.14 DS Creazione modulo.
//
// 15.05.15 DS Corr. errore CreateByTwoCurves che dava loop infinito.
//
//----------------------------------------------------------------------------
@@ -936,8 +936,8 @@ SurfTriMesh::CreateByTwoCurves( const PolyLine& PL1, const PolyLine& PL2)
}
// ciclo sui punti
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) {
// 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 ;