From 4f3fd38bfb8cf8acdbbaabdb73d66fd3d0c25b20 Mon Sep 17 00:00:00 2001 From: Dario Sassi Date: Mon, 29 Jul 2019 14:51:46 +0000 Subject: [PATCH] EgtGeomKernel 2.1g4 : - correzione a intersezione retta-arco quasi tg (molto importante). --- EgtGeomKernel.rc | Bin 11710 -> 11710 bytes IntersArcArc.cpp | 15 ++++++++------- IntersLineArc.cpp | 4 ++-- 3 files changed, 10 insertions(+), 9 deletions(-) diff --git a/EgtGeomKernel.rc b/EgtGeomKernel.rc index 2164376f7a9b27237908eef64eae38f0ade90d8b..834befeca7a320dc2981c77429c89f486e0a917e 100644 GIT binary patch delta 94 zcmdlNy)SyhFE&P#&A-_cnHfzcD{|{@_Trkr0u;H;XNwSVW8B;$>;>dw2zN+>g;Df- LFmBFL4&ed-WjGrO delta 94 zcmdlNy)SyhFE&Qw&A-_cnHh~ID{|{@_Trkr0u;H;XNwSVW8B;$>;>dw2zN+>g;Df- LFmBFL4&ed-W11TR diff --git a/IntersArcArc.cpp b/IntersArcArc.cpp index 16873e8..f21dfac 100644 --- a/IntersArcArc.cpp +++ b/IntersArcArc.cpp @@ -33,25 +33,26 @@ IntersArcArc::IntersArcArc( const CurveArc& Arc1, const CurveArc& Arc2) if ( abs( Arc1.GetAngCenter()) > ANG_FULL + EPS_ANG_ZERO || abs( Arc2.GetAngCenter()) > ANG_FULL + EPS_ANG_ZERO) return ; - // ne faccio una copia - m_Arc1.CopyFrom( &Arc1) ; - m_Arc2.CopyFrom( &Arc2) ; // gli archi devono avere il piano coincidente con XY - if ( ! m_Arc1.GetNormVersor().IsZplus() && ! m_Arc1.GetNormVersor().IsZminus()) + if ( ! Arc1.GetNormVersor().IsZplus() && ! Arc1.GetNormVersor().IsZminus()) return ; - if ( ! m_Arc2.GetNormVersor().IsZplus() && ! m_Arc2.GetNormVersor().IsZminus()) + if ( ! Arc2.GetNormVersor().IsZplus() && ! Arc2.GetNormVersor().IsZminus()) return ; // verifico sovrapposizione box BBox3d boxArc1 ; - if ( ! m_Arc1.GetLocalBBox( boxArc1)) + if ( ! Arc1.GetLocalBBox( boxArc1)) return ; BBox3d boxArc2 ; - if ( ! m_Arc2.GetLocalBBox( boxArc2)) + if ( ! Arc2.GetLocalBBox( boxArc2)) return ; if ( ! boxArc1.OverlapsXY( boxArc2)) return ; + // ne faccio una copia + m_Arc1.CopyFrom( &Arc1) ; + m_Arc2.CopyFrom( &Arc2) ; + // versore e distanza tra i centri Vector3d vtDir = ( m_Arc2.GetCenter() - m_Arc1.GetCenter()) ; vtDir.z = 0 ; diff --git a/IntersLineArc.cpp b/IntersLineArc.cpp index eac0c34..99115cb 100644 --- a/IntersLineArc.cpp +++ b/IntersLineArc.cpp @@ -70,8 +70,8 @@ IntersLineArc::IntersLineArc( const CurveLine& Line, const CurveArc& Arc) return ; // se distanza uguale al raggio -> una intersezione tangente, è la proiezione - // (corrisponde a una differenza max di EPS_SMALL tra i valori) - if ( dSqDelta < 2 * m_Arc.GetRadius() * EPS_SMALL) { + // (corrisponde a una differenza max di EPS_SMALL tra le intersezioni) + if ( dSqDelta < EPS_SMALL * EPS_SMALL) { // determinazione geometrica dell'intersezione tra le due curve int nPosL, nPosA ; if ( ! CalcIntersGeomData( 0, ptPrjCen, nPosL, nPosA))