EgtGeomKernel :
- migliorata gestione segmento arco con tangenza su punto estremo dell'arco - migliorata gestione triangoli praticamente complanari.
This commit is contained in:
+7
-1
@@ -34,7 +34,6 @@ IntersLineArc::IntersLineArc( const CurveLine& Line, const CurveArc& Arc)
|
||||
// verifico che l'angolo al centro non superi il giro
|
||||
if ( abs( Arc.GetAngCenter()) > ANG_FULL + EPS_ANG_ZERO)
|
||||
return ;
|
||||
// !!! Gestire l'arco proiettato come ellisse
|
||||
|
||||
// verifico sovrapposizione box
|
||||
BBox3d boxLine ;
|
||||
@@ -69,6 +68,13 @@ IntersLineArc::IntersLineArc( const CurveLine& Line, const CurveArc& Arc)
|
||||
if ( dSqDelta < - 2 * m_Arc.GetRadius() * EPS_SMALL)
|
||||
return ;
|
||||
|
||||
// se punto proiettato approssima uno degli estremi dell'arco, annullo dSqDelta
|
||||
Point3d ptArcStart, ptArcEnd ;
|
||||
if ( m_Arc.GetStartPoint( ptArcStart) && AreSamePointXYApprox( ptPrjCen, ptArcStart))
|
||||
dSqDelta = 0 ;
|
||||
else if ( m_Arc.GetEndPoint( ptArcEnd) && AreSamePointXYApprox( ptPrjCen, ptArcEnd))
|
||||
dSqDelta = 0 ;
|
||||
|
||||
// se distanza uguale al raggio -> una intersezione tangente, è la proiezione
|
||||
// (corrisponde a una differenza max di EPS_SMALL tra le intersezioni)
|
||||
if ( dSqDelta < EPS_SMALL * EPS_SMALL) {
|
||||
|
||||
Reference in New Issue
Block a user