From 81cc27f36b0ac9386010e99b79094e0541c39c3e Mon Sep 17 00:00:00 2001 From: Dario Sassi Date: Thu, 23 Jul 2020 15:02:42 +0000 Subject: [PATCH] EgtGeomKernel 2.2g3 : - correzioni a Collision Detection tra cilindro e superficie trimesh e tra cilindro e singolo triangolo. --- CDeCylClosedSurfTm.cpp | 12 +++++++++--- CDeCylTria.cpp | 6 +++--- EgtGeomKernel.rc | Bin 11710 -> 11710 bytes 3 files changed, 12 insertions(+), 6 deletions(-) diff --git a/CDeCylClosedSurfTm.cpp b/CDeCylClosedSurfTm.cpp index b9e6ca8..2f28a2e 100644 --- a/CDeCylClosedSurfTm.cpp +++ b/CDeCylClosedSurfTm.cpp @@ -27,10 +27,16 @@ CDeCylClosedSurfTm( const Frame3d& frCyl, double dH, double dR, double dSafeDist return false ; // recupero BBox del poliedro BBox3d b3Poly = Stm.GetAllTriaBox() ; + // sistemazioni cilindro + Frame3d frC = frCyl ; + if ( dH < 0) { + frC.Translate( dH * frC.VersZ()) ; + dH = - dH ; + } // calcolo il BBox del cilindro - BBox3d b3Cyl( ORIG, dR, dR, dH) ; + BBox3d b3Cyl( -dR, -dR, 0, dR, dR, dH) ; b3Cyl.Expand( dSafeDist) ; - b3Cyl.ToGlob( frCyl) ; + b3Cyl.ToGlob( frC) ; // confronto i due Box if ( ! b3Cyl.Overlaps( b3Poly)) return false ; @@ -40,7 +46,7 @@ CDeCylClosedSurfTm( const Frame3d& frCyl, double dH, double dR, double dSafeDist for ( int nT : vT) { Triangle3d Tria ; if ( Stm.GetTriangle( nT, Tria)) { - if ( CDeCylTria( frCyl, dH, dR, dSafeDist, Tria)) + if ( CDeCylTria( frC, dH, dR, dSafeDist, Tria)) return true ; } } diff --git a/CDeCylTria.cpp b/CDeCylTria.cpp index 1557e4f..1636cc2 100644 --- a/CDeCylTria.cpp +++ b/CDeCylTria.cpp @@ -44,7 +44,7 @@ CDeCylTria( const Frame3d& frCyl, double dH, double dR, double dSafeDist, const // Verifico che sia orientato verso l'alto if ( plyTria.GetVersN().z < - EPS_SMALL) plyTria.Invert() ; - // Determino la distanza con segno dei lati del poligono dall'origine del piano + // Determino la distanza con segno dei lati del poligono convesso dall'origine del piano const PNTVECTOR& vVert = plyTria.GetVertices() ; for ( int i = 0 ; i < int( vVert.size()) ; ++ i) { int j = ( i + 1) % vVert.size() ; @@ -61,6 +61,6 @@ CDeCylTria( const Frame3d& frCyl, double dH, double dR, double dSafeDist, const return false ; } } - - return false ; + // Non sta a destra di alcun lato, deve collidere + return true ; } diff --git a/EgtGeomKernel.rc b/EgtGeomKernel.rc index b9b5c63d891124a11d1d124c63f49e7691490e29..aacde69187ccbd653b6bdd63fd54bb85987a1003 100644 GIT binary patch delta 94 zcmdlNy)SyhFE&Qw&A-_cnHh~ID{|{@_Trkr0u;H;XNwSVW8B;$>;>dw2zN+>g;Df- LFmBFL4&ed-W11TR delta 94 zcmdlNy)SyhFE&P_&A-_cnHh~HD{|{@_Trkr0u;H;XNwSVW8B;$>;>dw2zN+>g;Df- LFmBFL4&ed-Vf-5U