//---------------------------------------------------------------------------- // EgalTech 2016-2020 //---------------------------------------------------------------------------- // File : CDBoxSurfTm.cpp Data : 09.01.20 Versione : 2.2a2 // Contenuto : Implementazione della verifica di collisione tra // BoundingBox e Closed SurftriMesh. // // // Modifiche : 05.10.16 DS Creazione modulo. // 09.01.20 DS Cambio nome alla funzione. // //---------------------------------------------------------------------------- //--------------------------- Include ---------------------------------------- #include "stdafx.h" #include "/EgtDev/Include/EGkCDeBoxTria.h" #include "/EgtDev/Include/EGkCDeBoxClosedSurfTm.h" using namespace std ; //---------------------------------------------------------------------------- bool CDeBoxClosedSurfTm( const Frame3d& frBox, const Vector3d& vtDiag, double dSafeDist, const ISurfTriMesh& Stm) { // verifico che la trimesh sia effettivamente un poliedro if ( ! Stm.IsClosed()) return false ; // recupero BBox del poliedro BBox3d b3Poly = Stm.GetAllTriaBox() ; // calcolo il BBox del parallelepipedo BBox3d b3Box( ORIG, ORIG + vtDiag) ; b3Box.Expand( dSafeDist) ; b3Box.ToGlob( frBox) ; // confronto i due Box if ( ! b3Box.Overlaps( b3Poly)) return false ; // recupero i triangoli che interferiscono con il box INTVECTOR vT ; Stm.GetAllTriaOverlapBox( b3Box, vT) ; for ( int nT : vT) { Triangle3d Tria ; if ( Stm.GetTriangle( nT, Tria)) { if ( CDeBoxTria( frBox, vtDiag, dSafeDist, Tria)) return true ; } } return false ; }