EgtGeomKernel 2.2g3 :
- correzioni a Collision Detection tra cilindro e superficie trimesh e tra cilindro e singolo triangolo.
This commit is contained in:
@@ -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
@@ -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 ;
|
||||
}
|
||||
|
||||
Binary file not shown.
Reference in New Issue
Block a user