diff --git a/CAvSilhouetteSurfTm.cpp b/CAvSilhouetteSurfTm.cpp index d931be5..d684a1a 100644 --- a/CAvSilhouetteSurfTm.cpp +++ b/CAvSilhouetteSurfTm.cpp @@ -141,25 +141,39 @@ MarchingSquares( const DBLVECTOR& vdGrid, int nStepX, int nStepY, double dStep, } // Recupero i contorni + const double MIN_LEN = 0.2 ; INTVECTOR vnId ; while ( chainC.GetChainFromNear( ORIG, false, vnId)) { // creo una composita CurveComposite crvCompo ; - crvCompo.AddPoint( vBiPnt[vnId[0]-1].first) ; - for ( int i = 0 ; i < int( vnId.size()) ; ++ i) - crvCompo.AddLine( vBiPnt[vnId[i]-1].second) ; + Point3d ptPrev = vBiPnt[vnId[0]-1].first ; + crvCompo.AddPoint( ptPrev) ; + for ( int i = 0 ; i < int( vnId.size()) ; ++ i) { + Point3d ptCurr = vBiPnt[vnId[i]-1].second ; + // per evitare difetti a Z con entità corte + if ( SqDist( ptPrev, ptCurr) > MIN_LEN * MIN_LEN) { + crvCompo.AddLine( ptCurr) ; + ptPrev = ptCurr ; + } + } // la chiudo crvCompo.Close() ; // elimino le parti allineate - crvCompo.MergeCurves( 10 * EPS_SMALL, ICurve::APL_STD) ; - // eseguo offset a sinistra pari allo step - OffsetCurve offsCompo ; - offsCompo.Make( &crvCompo, -0.5 * dStep, ICurve::OFF_CHAMFER) ; - PtrOwner pCrvOffset( offsCompo.GetLongerCurve()) ; - if ( ! IsNull( pCrvOffset)) { + crvCompo.MergeCurves( 10 * EPS_SMALL, ANG_TOL_STD_DEG) ; + // per test mettere a 1 + #if 0 vPL.emplace_back( PolyLine()) ; - pCrvOffset->ApproxWithLines( 0.5 * dStep, ANG_TOL_APPROX_DEG, ICurve::APL_STD, vPL.back()) ; - } + crvCompo.ApproxWithLines( 0, 0, ICurve::APL_SPECIAL, vPL.back()) ; + #else + // eseguo offset a sinistra pari allo step + OffsetCurve offsCompo ; + offsCompo.Make( &crvCompo, -0.5 * dStep, ICurve::OFF_CHAMFER) ; + PtrOwner pCrvOffset( offsCompo.GetLongerCurve()) ; + if ( ! IsNull( pCrvOffset)) { + vPL.emplace_back( PolyLine()) ; + pCrvOffset->ApproxWithLines( 0.5 * dStep, ANG_TOL_APPROX_DEG, ICurve::APL_STD, vPL.back()) ; + } + #endif } return true ; diff --git a/EgtGeomKernel.rc b/EgtGeomKernel.rc index 83efb02..1a6ea85 100644 Binary files a/EgtGeomKernel.rc and b/EgtGeomKernel.rc differ