EgtGeomKernel 2.2g3 :

- correzioni a Collision Detection tra cilindro e superficie trimesh e tra cilindro e singolo triangolo.
This commit is contained in:
Dario Sassi
2020-07-23 15:02:42 +00:00
parent 4159387a6d
commit 81cc27f36b
3 changed files with 12 additions and 6 deletions
+9 -3
View File
@@ -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 ;
}
}
+3 -3
View File
@@ -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 ;
}
BIN
View File
Binary file not shown.