From 279bfa17f4ec822215d7edbffc7e02402c26e261 Mon Sep 17 00:00:00 2001 From: Dario Sassi Date: Tue, 27 Dec 2016 09:05:07 +0000 Subject: [PATCH] EgtGeomKernel 1.6x3 : - modifiche ad archi per gestire raggi grandi e aggiunto controllo raggio massimo - migliorata Normalize di Vector3d. --- CurveArc.cpp | 7 +++++-- EgtGeomKernel.rc | Bin 11718 -> 11718 bytes GeoConst.h | 6 ++++++ Vector3d.cpp | 2 +- 4 files changed, 12 insertions(+), 3 deletions(-) diff --git a/CurveArc.cpp b/CurveArc.cpp index 55ea883..101a954 100644 --- a/CurveArc.cpp +++ b/CurveArc.cpp @@ -640,7 +640,8 @@ CurveArc::Save( NgeWriter& ngeOut) const if ( ! ngeOut.WriteVector( m_VtS, ";")) return false ; // angolo al centro - if ( ! ngeOut.WriteDouble( m_dAngCenDeg, ";")) + int nDec = ( m_dRad < 0.1 * BIG_ARC_RAD ? 6 : 9) ; + if ( ! ngeOut.WriteDouble( m_dAngCenDeg, ";", false, nDec)) return false ; // deltaN if ( ! ngeOut.WriteDouble( m_dDeltaN, ";", true)) @@ -673,6 +674,7 @@ CurveArc::Load( NgeReader& ngeIn) // recupero il versore iniziale if ( ! ngeIn.ReadVector( m_VtS, ";")) return false ; + m_VtS.Normalize() ; // per garantire la precisione con raggi grandi // recupero l'angolo al centro if ( ! ngeIn.ReadDouble( m_dAngCenDeg, ";")) return false ; @@ -766,7 +768,8 @@ CurveArc::Validate( void) // eseguo il controllo m_nStatus = ( ( m_VtN.IsNormalized() && m_VtS.IsNormalized() && AreOrthoApprox( m_VtN, m_VtS) && - m_dRad > EPS_SMALL && fabs( m_dAngCenDeg) > EPS_ANG_ZERO) ? OK : ERR) ; + m_dRad > EPS_SMALL && m_dRad < MAX_ARC_RAD && + fabs( m_dAngCenDeg) > EPS_ANG_ZERO) ? OK : ERR) ; } return ( m_nStatus == OK) ; diff --git a/EgtGeomKernel.rc b/EgtGeomKernel.rc index a677cd963c5ba4ddefa9b5dca188f5171f105f88..3b1dfb696fc60900298ed7216cad1977962b1bdd 100644 GIT binary patch delta 110 zcmX>WeJpyzA2vqg&G-4vGfl1&(wY2&Q;pGhvZAo=W*@FeEMOU1X1ItO delta 110 zcmX>WeJpyzA2vp#&G-4vGfl1&(wY2&Q;pGRvZAo=W*@FeEMOU1X1ItO