EgtGeomKernel 2.6f3 :
- migliorie e irrobustimenti a calcolo silhouette di trimesh con collisio avoid.
This commit is contained in:
+25
-11
@@ -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 ;
|
||||
|
||||
Binary file not shown.
Reference in New Issue
Block a user