fba63ea82e
- aggiunte funzioni per verifica collisione tra Box, Cilindro e Sfera con Superfici triMesh chiuse - aggiunta costruzione di Polygon3d da triangolo.
50 lines
1.7 KiB
C++
50 lines
1.7 KiB
C++
//----------------------------------------------------------------------------
|
|
// 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 ;
|
|
|
|
}
|