From 01e71d190d4ef06d1113af2e3adf3df51f120953 Mon Sep 17 00:00:00 2001 From: Dario Sassi Date: Fri, 6 Jul 2018 15:01:06 +0000 Subject: [PATCH] EgtGeomKernel : - piccole migliorie a Tool Collision Avoidance. --- CAvToolSurfTm.cpp | 6 +++--- CAvToolTriangle.cpp | 9 ++++++++- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/CAvToolSurfTm.cpp b/CAvToolSurfTm.cpp index 277b6e7..95afb11 100644 --- a/CAvToolSurfTm.cpp +++ b/CAvToolSurfTm.cpp @@ -139,9 +139,9 @@ CAvToolSurfTm::MyTestMidPointHG( PNTULIST& lPntM, const PNTULIST::iterator& itPn double dMidMove = MyTestPositionHG( ptNewMid, vtDir) ; if ( dMidMove < - EPS_SMALL) return false ; - // se oltre tolleranza dalla linea tra i punti includenti, devo aggiungerlo - double dSqDist ; - if ( DistPointLine( ptNewMid, itPntMPrev->first, itPntMCurr->first).GetSqDist( dSqDist) && dSqDist > 0.25 * dLinTol * dLinTol) { + // se punto medio oltre tolleranza dalla linea tra i punti includenti o linea troppo lunga, devo aggiungerlo + if ( abs(( Media( itPntMPrev->first, itPntMCurr->first, 0.5) - ptNewMid) * m_frMove.VersZ()) > 0.5 * dLinTol || + SqDist( itPntMPrev->first, itPntMCurr->first) > m_Tool.GetRadius() * m_Tool.GetRadius()) { // aggiungo lPntM.emplace( itPntMCurr, ptNewMid, - dMidMove) ; auto itPntMMid = itPntMCurr ; diff --git a/CAvToolTriangle.cpp b/CAvToolTriangle.cpp index da70d2f..63a001c 100644 --- a/CAvToolTriangle.cpp +++ b/CAvToolTriangle.cpp @@ -1498,7 +1498,14 @@ LineSegmentSqDist( const Point3d& ptPLn, const Vector3d& vtDLn, bool IsPointInsideTriangle( const Point3d& ptP, const Triangle3d& trTria) { - // Se il punto non sta sul piano del triangolo ho finito + // Se il punto non è nel box del triangolo, è sicuramente esterno + BBox3d b3Tria( trTria.GetP( 0)) ; + b3Tria.Add( trTria.GetP( 1)) ; + b3Tria.Add( trTria.GetP( 2)) ; + if ( ! b3Tria.Encloses( ptP)) + return false ; + + // Se il punto non sta sul piano del triangolo, è sicuramente esterno if ( abs( ( ptP - trTria.GetP( 0)) * trTria.GetN()) > EPS_SMALL) return false ;