EgtGeomKernel 2.1g4 :

- correzione a intersezione retta-arco quasi tg (molto importante).
This commit is contained in:
Dario Sassi
2019-07-29 14:51:46 +00:00
parent 7dd66ea22c
commit 4f3fd38bfb
3 changed files with 10 additions and 9 deletions
BIN
View File
Binary file not shown.
+8 -7
View File
@@ -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 ;
+2 -2
View File
@@ -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))