From 2ca801e2ecc85ce38656a7488ff0c0b61795380f Mon Sep 17 00:00:00 2001 From: Dario Sassi Date: Thu, 7 Dec 2023 11:03:23 +0100 Subject: [PATCH] EgtGeomKernel : - miglioramento in Collision Avoid grazie alla gestione delle tolleranze sulle parti piatte perpendicolari all'asse in funzione della direzione di allontanamento. --- CAvToolTriangle.cpp | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/CAvToolTriangle.cpp b/CAvToolTriangle.cpp index c669426..b5e1bdb 100644 --- a/CAvToolTriangle.cpp +++ b/CAvToolTriangle.cpp @@ -150,14 +150,16 @@ CAvToolTriangle( const Tool& tlTool, const Point3d& ptToolOrig, const Vector3d& return -1. ; // Se avvicinamento non devo fare nulla if ( vtMove * trTria.GetN() < - EPS_ZERO) - return 0. ; + return 0. ; + // Tolleranza su dischi (parti piatte perpendicolari all'asse utensile) + double dEpsilon = ( vtMove * vtToolAx > 0.5 ? 0 : EPS_SMALL) ; // se utensile cilindrico if ( tlTool.GetType() == Tool::CYLMILL) { // parametri geometrici double dHeigth = tlTool.GetHeigth() ; double dRadius = tlTool.GetRadius() ; // prima determino l'allontanamento del disco inferiore - double dDist = CAvDiskTriangle( ptToolOrig - ( dHeigth - EPS_SMALL) * vtToolAx, vtToolAx, dRadius, trTria, vtMove) ; + double dDist = CAvDiskTriangle( ptToolOrig - ( dHeigth - dEpsilon) * vtToolAx, vtToolAx, dRadius, trTria, vtMove) ; if ( dDist < - EPS_SMALL) return dDist ; // poi verifico quello del cilindro (tenendo conto di quanto è stata allontanato il disco) @@ -165,7 +167,7 @@ CAvToolTriangle( const Tool& tlTool, const Point3d& ptToolOrig, const Vector3d& if ( dDist2 < - EPS_SMALL) return dDist2 ; // verifico quello del disco sopra - double dDist3 = CAvDiskTriangle( ptToolOrig - EPS_SMALL * vtToolAx + ( dDist + dDist2) * vtMove, vtToolAx, dRadius, trTria, vtMove) ; + double dDist3 = CAvDiskTriangle( ptToolOrig - dEpsilon * vtToolAx + ( dDist + dDist2) * vtMove, vtToolAx, dRadius, trTria, vtMove) ; if ( dDist3 < - EPS_SMALL) return dDist3 ; return ( dDist + dDist2 + dDist3) ; @@ -189,7 +191,7 @@ CAvToolTriangle( const Tool& tlTool, const Point3d& ptToolOrig, const Vector3d& return dDist2 ; // verifico quello del disco sopra Point3d ptDiskUpOrig = ptCylOrig + dDist2 * vtMove ; - double dDist3 = CAvDiskTriangle( ptDiskUpOrig - EPS_SMALL * vtToolAx, vtToolAx, dRadius, trTria, vtMove) ; + double dDist3 = CAvDiskTriangle( ptDiskUpOrig - dEpsilon * vtToolAx, vtToolAx, dRadius, trTria, vtMove) ; if ( dDist3 < - EPS_SMALL) return dDist3 ; return ( dDist + dDist2 + dDist3) ; @@ -199,7 +201,7 @@ CAvToolTriangle( const Tool& tlTool, const Point3d& ptToolOrig, const Vector3d& // parametri geometrici double dCylHeigth = tlTool.GetHeigth() - tlTool.GetTipHeigth() ; // prima determino l'allontanamento del disco inferiore - double dDist = CAvDiskTriangle( ptToolOrig - ( tlTool.GetHeigth() - EPS_SMALL) * vtToolAx, vtToolAx, tlTool.GetTipRadius(), + double dDist = CAvDiskTriangle( ptToolOrig - ( tlTool.GetHeigth() - dEpsilon) * vtToolAx, vtToolAx, tlTool.GetTipRadius(), trTria, vtMove) ; if ( dDist < - EPS_SMALL) return dDist ; @@ -220,7 +222,7 @@ CAvToolTriangle( const Tool& tlTool, const Point3d& ptToolOrig, const Vector3d& return dDist3 ; // verifico quello del disco sopra Point3d ptDiskUpOrig = ptCylOrig + vtMove * dDist3 ; - double dDist4 = CAvDiskTriangle( ptDiskUpOrig - EPS_SMALL * vtToolAx, vtToolAx, tlTool.GetRadius(), trTria, vtMove) ; + double dDist4 = CAvDiskTriangle( ptDiskUpOrig - dEpsilon * vtToolAx, vtToolAx, tlTool.GetRadius(), trTria, vtMove) ; if ( dDist4 < - EPS_SMALL) return dDist4 ; return ( dDist + dDist2 + dDist3 + dDist4) ; @@ -247,7 +249,7 @@ CAvToolTriangle( const Tool& tlTool, const Point3d& ptToolOrig, const Vector3d& double dMaxR = max( tlTool.GetRadius(), tlTool.GetTipRadius()) ; double dCylHeigth = tlTool.GetHeigth() - tlTool.GetTipHeigth() ; // prima determino l'allontanamento del disco inferiore - double dDist = CAvDiskTriangle( ptToolOrig - ( tlTool.GetHeigth() - EPS_SMALL) * vtToolAx, vtToolAx, tlTool.GetTipRadius(), + double dDist = CAvDiskTriangle( ptToolOrig - ( tlTool.GetHeigth() - dEpsilon) * vtToolAx, vtToolAx, tlTool.GetTipRadius(), trTria, vtMove) ; if ( dDist < - EPS_SMALL) return dDist ; @@ -266,7 +268,7 @@ CAvToolTriangle( const Tool& tlTool, const Point3d& ptToolOrig, const Vector3d& return dDist3 ; // verifico quello del disco sopra Point3d ptDiskUpOrig = ptCylOrig + vtMove * dDist3 ; - double dDist4 = CAvDiskTriangle( ptDiskUpOrig - EPS_SMALL * vtToolAx, vtToolAx, tlTool.GetRadius(), trTria, vtMove) ; + double dDist4 = CAvDiskTriangle( ptDiskUpOrig - dEpsilon * vtToolAx, vtToolAx, tlTool.GetRadius(), trTria, vtMove) ; if ( dDist4 < - EPS_SMALL) return dDist4 ; return ( dDist + dDist2 + dDist3 + dDist4) ; @@ -299,10 +301,10 @@ CAvToolTriangle( const Tool& tlTool, const Point3d& ptToolOrig, const Vector3d& double dRadius = max( ptStart.x, ptEnd.x) ; // Se disco verso il basso dell'utensile if ( ptStart.x > ptEnd.x) - dDist2 = CAvDiskTriangle( ptCompOrig + EPS_SMALL * vtToolAx, vtToolAx, dRadius, trTria, vtMove) ; + dDist2 = CAvDiskTriangle( ptCompOrig + dEpsilon * vtToolAx, vtToolAx, dRadius, trTria, vtMove) ; // Se disco verso l'alto else - dDist2 = CAvDiskTriangle( ptCompOrig - EPS_SMALL * vtToolAx, vtToolAx, dRadius, trTria, vtMove) ; + dDist2 = CAvDiskTriangle( ptCompOrig - dEpsilon * vtToolAx, vtToolAx, dRadius, trTria, vtMove) ; } else { // Verifiche curva precedente per eventuale tappo sopra