EgtGeomKernel 1.6p3 :

- modifiche a CurveComposite::ApproxWithLines per approssimare anche composite formate da linee
- migliorie a OffsetCurveOnX per tratti quasi orizzontali o archi a tg orizz
- aumentato coeff. di deduzione di tolleranza in approssimazione di polilinee.
This commit is contained in:
Dario Sassi
2016-04-19 15:50:41 +00:00
parent 9a0acd1e5c
commit ff137c7f01
4 changed files with 28 additions and 12 deletions
+22 -7
View File
@@ -1251,6 +1251,28 @@ CurveComposite::ApproxWithLines( double dLinTol, double dAngTolDeg, int nType, P
if ( m_nStatus != OK)
return false ;
// limiti minimi su tolleranza e deviazione angolare
dLinTol = max( dLinTol, LIN_TOL_MIN) ;
dAngTolDeg = max( dAngTolDeg, ANG_TOL_MIN_DEG) ;
// se lineare con lato obbligato, gestione speciale
if ( nType == APL_LEFT || nType == APL_LEFT_CONVEX ||
nType == APL_RIGHT || nType == APL_RIGHT_CONVEX) {
// prima approssimazione lineare a 10 * Epsilon
if ( ! ApproxWithLines( 10 * EPS_SMALL, dAngTolDeg, APL_STD, PL))
return false ;
// eliminazione dei punti in tolleranza andando solo dalla parte ammessa
Vector3d vtExtr = ( m_VtExtr.IsSmall() ? Z_AX : m_VtExtr) ;
if ( ! PL.ApproxOnSide( vtExtr, ( nType == APL_LEFT), dLinTol))
return false ;
// se necessario, sistemo per convessità dalla parte ammessa
if ( nType == APL_RIGHT_CONVEX || nType == APL_LEFT_CONVEX) {
if ( ! PL.MakeConvex( vtExtr, ( nType == APL_LEFT_CONVEX)))
return false ;
}
return true ;
}
// eseguo approssimazione
double dStartPar = 0 ;
for ( auto& pCrv : m_CrvSmplS) {
@@ -1270,13 +1292,6 @@ CurveComposite::ApproxWithLines( double dLinTol, double dAngTolDeg, int nType, P
// incremento inizio parametro per prossima curva semplice
dStartPar += 1 ;
}
// se necessario, sistemo per convessità dalla parte ammessa
if ( nType == APL_RIGHT_CONVEX || nType == APL_LEFT_CONVEX) {
Vector3d vtExtr = ( m_VtExtr.IsSmall() ? Z_AX : m_VtExtr) ;
if ( ! PL.MakeConvex( vtExtr, ( nType == APL_LEFT_CONVEX)))
return false ;
}
return true ;
}