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 b9b5c63..aacde69 100644 Binary files a/EgtGeomKernel.rc and b/EgtGeomKernel.rc differ