diff --git a/SurfBezier.cpp b/SurfBezier.cpp index 60f52e0..b8c35ba 100644 --- a/SurfBezier.cpp +++ b/SurfBezier.cpp @@ -4767,6 +4767,8 @@ SurfBezier::CreateByTwoCurves( const ICurve* pCurve0, const ICurve* pCurve1, int // in quel punto la curva verrà spezzata, a meno che non si trovi una joint già sufficientemente vicina // prima trovo le associazioni senza aggiunte di punti + bool bIsClosed0 = plU0.IsClosed() ; + bool bIsClosed1 = plU1.IsClosed() ; Point3d ptP1 ; plU1.GetFirstPoint( ptP1) ; vector> vMatch1 ; while ( plU1.GetNextPoint( ptP1, true)) { @@ -4796,8 +4798,10 @@ SurfBezier::CreateByTwoCurves( const ICurve* pCurve0, const ICurve* pCurve1, int int nFlag = 0 ; double dParam ; dpc.GetParamAtMinDistPoint( 0, dParam, nFlag) ; Point3d ptJoint ; dpc.GetMinDistPoint( 0, ptJoint, nFlag) ; + if( bIsClosed1 && dParam > nSpanU1 - EPS_SMALL) + dParam = 0 ; vdMatch0.push_back( dParam) ; - if ( dParam < EPS_SMALL ) { + if ( dParam < EPS_SMALL) { ++nAtStart1 ; vbRep0[c] = true ; ++c ; @@ -4870,7 +4874,9 @@ SurfBezier::CreateByTwoCurves( const ICurve* pCurve0, const ICurve* pCurve1, int int nFlag = 0 ; double dParam ; dpc.GetParamAtMinDistPoint( 0, dParam, nFlag) ; Point3d ptJoint ; dpc.GetMinDistPoint( 0, ptJoint, nFlag) ; - if ( dParam < EPS_SMALL ) { + if ( bIsClosed0 && dParam > nSpanU0 - EPS_SMALL) + dParam = 0 ; + if ( dParam < EPS_SMALL) { ++nAtStart0 ; vbRep1[c] = true ; ++c ;