From 3f1f365451f4ece2112e51be5293e255f6523e9f Mon Sep 17 00:00:00 2001 From: Dario Sassi Date: Wed, 12 Jun 2024 13:28:41 +0200 Subject: [PATCH] EgtGeomKernel 2.6f3 : - migliorie e irrobustimenti a calcolo silhouette di trimesh con collisio avoid. --- CAvSilhouetteSurfTm.cpp | 36 +++++++++++++++++++++++++----------- EgtGeomKernel.rc | Bin 11710 -> 11710 bytes 2 files changed, 25 insertions(+), 11 deletions(-) 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 83efb02642d977d11882be326bc053b3fbcafb6e..1a6ea85b8348f36ec332b24c794bf4c8266f8cb9 100644 GIT binary patch delta 94 zcmdlNy)SyhFE&Qw&A-_cnHh~ID{|{@_Trkr0u;H;XNwSVW8B;$>;>dw2zN+>g;Df- LFmBFL4&ed-W11TR delta 94 zcmdlNy)SyhFE&P_&A-_cnHh~HD{|{@_Trkr0u;H;XNwSVW8B;$>;>dw2zN+>g;Df- LFmBFL4&ed-Vf-5U