EgtGeomKernel 2.5d4 :
- in ApproxWithLines di CurveComposite aggiunta gestione tipo approssimazione APL_SPECIAL_INT (come SPECIAL ma con garanzia di tre punti su curve non rettilinee) - migliorato calcolo AreaXY e Area di Curve grazie al nuovo tipo di approssimazione - migliorata in Dump gestione decimali di Area - in OffsetCurve corretto possibile errore con curve chiuse dovuto a mancata unione tratti tra autointersezioni suddiviso tra inizio e fine curva.
This commit is contained in:
+7
-5
@@ -294,7 +294,7 @@ CurveGetAreaXY( const ICurve& crvC, double& dArea)
|
||||
return false ;
|
||||
// approssimo la curva con una polilinea
|
||||
PolyLine PL ;
|
||||
crvC.ApproxWithLines( LIN_TOL_STD, ANG_TOL_STD_DEG, ICurve::APL_SPECIAL, PL) ;
|
||||
crvC.ApproxWithLines( LIN_TOL_STD, ANG_TOL_STD_DEG, ICurve::APL_SPECIAL_INT, PL) ;
|
||||
// calcolo l'area
|
||||
double dAreaXY = 0 ;
|
||||
PL.GetAreaXY( dAreaXY) ;
|
||||
@@ -313,7 +313,7 @@ CurveGetArea( const ICurve& crvC, Plane3d& plPlane, double& dArea)
|
||||
return false ;
|
||||
// approssimo la curva con una polilinea
|
||||
PolyLine PL ;
|
||||
crvC.ApproxWithLines( LIN_TOL_STD, ANG_TOL_STD_DEG, ICurve::APL_SPECIAL, PL) ;
|
||||
crvC.ApproxWithLines( LIN_TOL_STD, ANG_TOL_STD_DEG, ICurve::APL_SPECIAL_INT, PL) ;
|
||||
// calcolo l'area
|
||||
Plane3d plMyPlane ;
|
||||
double dMyArea = 0 ;
|
||||
@@ -364,9 +364,11 @@ CurveDump( const ICurve& crvC, string& sOut, bool bMM, const char* szNewLine)
|
||||
// altri dati per curva chiusa
|
||||
double dAreaXY ;
|
||||
if ( CurveGetAreaXY( crvC, dAreaXY)) {
|
||||
bool bCCW = ( dAreaXY > 0) ;
|
||||
bool bCCW = ( dAreaXY > 0) ;
|
||||
double dAreaUi = GetAreaInUiUnits( abs( dAreaXY), bMM) ;
|
||||
int nDec = ( dAreaUi > 100 ? 1 : ( dAreaUi > 0.1 ? 3 : 6)) ;
|
||||
sOut += string( "Closed") + ( bCCW ? " CCW" : " CW") + " AreaXY=" +
|
||||
ToString( GetAreaInUiUnits( abs( dAreaXY), bMM),1) + szNewLine ;
|
||||
ToString( dAreaUi, nDec) + szNewLine ;
|
||||
}
|
||||
|
||||
return true ;
|
||||
@@ -728,7 +730,7 @@ FlattenCurve( const ICurve& crCrv, double dToler, double dAngToler, int nFlag)
|
||||
return nullptr ;
|
||||
// Verifico se curva già piatta
|
||||
PolyLine PL ;
|
||||
if ( ! crCrv.ApproxWithLines( LIN_TOL_FINE, ANG_TOL_STD_DEG, ICurve::APL_SPECIAL, PL))
|
||||
if ( ! crCrv.ApproxWithLines( LIN_TOL_FINE, ANG_TOL_STD_DEG, ICurve::APL_SPECIAL_INT, PL))
|
||||
return nullptr ;
|
||||
bool bFlat = true ;
|
||||
Plane3d plFlat ; plFlat.Set( ptCen, plMid.GetVersN()) ;
|
||||
|
||||
Reference in New Issue
Block a user