EgtGeomKernel 2.5e4 :
- modifiche per verifica collisione con TriMesh chiuse - aggiunta gestione Capsule.
This commit is contained in:
+5
-63
@@ -182,78 +182,21 @@ CDeBoxTria( const Frame3d& frBox, const Vector3d& vtDiag, double dSafeDist, cons
|
||||
return CDeSimpleBoxTria( Frame3d(), vtDiag, trTriaL) ;
|
||||
|
||||
// Verifica preliminare con box esteso
|
||||
Frame3d frEst( Point3d( -dSafeDist, -dSafeDist, -dSafeDist)) ;
|
||||
if ( ! CDeSimpleBoxTria( frEst, vtDiag + 2 * Vector3d( dSafeDist, dSafeDist, dSafeDist), trTriaL))
|
||||
Frame3d frTmp( Point3d( -dSafeDist, -dSafeDist, -dSafeDist)) ;
|
||||
if ( ! CDeSimpleBoxTria( frTmp, vtDiag + 2 * Vector3d( dSafeDist, dSafeDist, dSafeDist), trTriaL))
|
||||
return false ;
|
||||
|
||||
// Tre box aumentati con distanza di sicurezza in un sola dimensione
|
||||
Frame3d frTmp = frBox ; frTmp.Translate( - dSafeDist * frBox.VersX()) ;
|
||||
frTmp.ChangeOrig( Point3d( -dSafeDist, 0, 0)) ;
|
||||
if ( CDeSimpleBoxTria( frTmp, vtDiag + 2 * dSafeDist * X_AX, trTriaL))
|
||||
return true ;
|
||||
frTmp = frBox ; frTmp.Translate( - dSafeDist * frBox.VersY()) ;
|
||||
frTmp.ChangeOrig( Point3d( 0, -dSafeDist, 0)) ;
|
||||
if ( CDeSimpleBoxTria( frTmp, vtDiag + 2 * dSafeDist * Y_AX, trTriaL))
|
||||
return true ;
|
||||
frTmp = frBox ; frTmp.Translate( - dSafeDist * frBox.VersZ()) ;
|
||||
frTmp.ChangeOrig( Point3d( 0, 0, -dSafeDist)) ;
|
||||
if ( CDeSimpleBoxTria( frTmp, vtDiag + 2 * dSafeDist * Z_AX, trTriaL))
|
||||
return true ;
|
||||
|
||||
#if 1
|
||||
// Sfere centrate negli otto vertici
|
||||
if ( CDeSimpleSpheTria( Point3d( 0, 0, 0), dSafeDist, trTriaL))
|
||||
return true ;
|
||||
if ( CDeSimpleSpheTria( Point3d( vtDiag.x, 0, 0), dSafeDist, trTriaL))
|
||||
return true ;
|
||||
if ( CDeSimpleSpheTria( Point3d( vtDiag.x, vtDiag.y, 0), dSafeDist, trTriaL))
|
||||
return true ;
|
||||
if ( CDeSimpleSpheTria( Point3d( 0, vtDiag.y, 0), dSafeDist, trTriaL))
|
||||
return true ;
|
||||
if ( CDeSimpleSpheTria( Point3d( 0, 0, vtDiag.z), dSafeDist, trTriaL))
|
||||
return true ;
|
||||
if ( CDeSimpleSpheTria( Point3d( vtDiag.x, 0, vtDiag.z), dSafeDist, trTriaL))
|
||||
return true ;
|
||||
if ( CDeSimpleSpheTria( Point3d( vtDiag.x, vtDiag.y, vtDiag.z), dSafeDist, trTriaL))
|
||||
return true ;
|
||||
if ( CDeSimpleSpheTria( Point3d( 0, vtDiag.y, vtDiag.z), dSafeDist, trTriaL))
|
||||
return true ;
|
||||
|
||||
// Cilindri centrati sui dodici spigoli
|
||||
frTmp.Set( Point3d( 0, 0, 0), X_AX) ;
|
||||
if ( CDeSimpleCylTria( frTmp, dSafeDist, vtDiag.x, trTriaL))
|
||||
return true ;
|
||||
frTmp.Set( Point3d( 0, vtDiag.y, 0), X_AX) ;
|
||||
if ( CDeSimpleCylTria( frTmp, dSafeDist, vtDiag.x, trTriaL))
|
||||
return true ;
|
||||
frTmp.Set( Point3d( 0, 0, 0), Y_AX) ;
|
||||
if ( CDeSimpleCylTria( frTmp, dSafeDist, vtDiag.y, trTriaL))
|
||||
return true ;
|
||||
frTmp.Set( Point3d( vtDiag.x, 0, 0), Y_AX) ;
|
||||
if ( CDeSimpleCylTria( frTmp, dSafeDist, vtDiag.y, trTriaL))
|
||||
return true ;
|
||||
frTmp.Set( Point3d( 0, 0, vtDiag.z), X_AX) ;
|
||||
if ( CDeSimpleCylTria( frTmp, dSafeDist, vtDiag.x, trTriaL))
|
||||
return true ;
|
||||
frTmp.Set( Point3d( 0, vtDiag.y, vtDiag.z), X_AX) ;
|
||||
if ( CDeSimpleCylTria( frTmp, dSafeDist, vtDiag.x, trTriaL))
|
||||
return true ;
|
||||
frTmp.Set( Point3d( 0, 0, vtDiag.z), Y_AX) ;
|
||||
if ( CDeSimpleCylTria( frTmp, dSafeDist, vtDiag.y, trTriaL))
|
||||
return true ;
|
||||
frTmp.Set( Point3d( vtDiag.x, 0, vtDiag.z), Y_AX) ;
|
||||
if ( CDeSimpleCylTria( frTmp, dSafeDist, vtDiag.y, trTriaL))
|
||||
return true ;
|
||||
frTmp.Set( Point3d( 0., 0., 0.), Z_AX) ;
|
||||
if ( CDeSimpleCylTria( frTmp, dSafeDist, vtDiag.z, trTriaL))
|
||||
return true ;
|
||||
frTmp.Set( Point3d( vtDiag.x, 0., 0.), Z_AX) ;
|
||||
if ( CDeSimpleCylTria( frTmp, dSafeDist, vtDiag.z, trTriaL))
|
||||
return true ;
|
||||
frTmp.Set( Point3d( vtDiag.x, vtDiag.y, 0.), Z_AX) ;
|
||||
if ( CDeSimpleCylTria( frTmp, dSafeDist, vtDiag.z, trTriaL))
|
||||
return true ;
|
||||
frTmp.Set( Point3d( 0., vtDiag.y, 0.), Z_AX) ;
|
||||
if ( CDeSimpleCylTria( frTmp, dSafeDist, vtDiag.z, trTriaL))
|
||||
return true ;
|
||||
#else
|
||||
// Capsule centrati sui dodici spigoli
|
||||
if ( CDeSimpleCapsTria( Point3d( 0, 0, 0), Point3d( vtDiag.x, 0, 0), dSafeDist, trTriaL))
|
||||
return true ;
|
||||
@@ -279,7 +222,6 @@ CDeBoxTria( const Frame3d& frBox, const Vector3d& vtDiag, double dSafeDist, cons
|
||||
return true ;
|
||||
if ( CDeSimpleCapsTria( Point3d( 0, vtDiag.y, 0), Point3d( 0, vtDiag.y, vtDiag.z), dSafeDist, trTriaL))
|
||||
return true ;
|
||||
#endif
|
||||
|
||||
return false ;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user