EgtGeomKernel 2.6f3 :

- migliorie e irrobustimenti a calcolo silhouette di trimesh con collisio avoid.
This commit is contained in:
Dario Sassi
2024-06-12 13:28:41 +02:00
parent 9b0f2c7f59
commit 3f1f365451
2 changed files with 25 additions and 11 deletions
+25 -11
View File
@@ -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<ICurve> 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<ICurve> 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 ;
BIN
View File
Binary file not shown.