From c68d841b460bb90eaf70eabe695d88355a997b72 Mon Sep 17 00:00:00 2001 From: Dario Sassi Date: Tue, 23 Jul 2024 12:02:09 +0200 Subject: [PATCH] EgtMachKernel : - in simulazione migliorata scelta oggetti da visualizzare per collisione. --- Simulator.cpp | 25 +++++++++++++++++++++---- 1 file changed, 21 insertions(+), 4 deletions(-) diff --git a/Simulator.cpp b/Simulator.cpp index 5c8684c..4b1c5b9 100644 --- a/Simulator.cpp +++ b/Simulator.cpp @@ -1514,6 +1514,25 @@ Simulator::ExecCollisionCheck( int& nCdInd, int& nObjInd, int nMoveType) return true ; } +//---------------------------------------------------------------------------- +static int +FindCollisionMarkId( const IGeomDB* pGeomDB, int nCollId) +{ + int nCollParId = pGeomDB->GetParentId( nCollId) ; + string sCollParName = "COLLISION" ; + pGeomDB->GetName( nCollParId, sCollParName) ; + if ( sCollParName != "COLLISION") + return nCollParId ; + else { + int nCollGprId = pGeomDB->GetParentId( nCollParId) ; + int nCollSolId = pGeomDB->GetFirstNameInGroup( nCollGprId, "SOLID") ; + if ( nCollSolId != GDB_ID_NULL) + return nCollSolId ; + else + return nCollGprId ; + } +} + //---------------------------------------------------------------------------- bool Simulator::SetCollisionMark( int nCdInd, int nObjInd) @@ -1521,10 +1540,8 @@ Simulator::SetCollisionMark( int nCdInd, int nObjInd) if ( m_pGeomDB == nullptr) return false ; m_nCollMarkId.clear() ; - int nCdGeoId = m_pGeomDB->GetParentId( m_pGeomDB->GetParentId( m_CdId[nCdInd])) ; - int nCoGeoId = m_pGeomDB->GetParentId( m_pGeomDB->GetParentId( m_CollObj[nObjInd].nFrameId)) ; - m_nCollMarkId.push_back( nCdGeoId) ; - m_nCollMarkId.push_back( nCoGeoId) ; + m_nCollMarkId.push_back( FindCollisionMarkId( m_pGeomDB, m_CdId[nCdInd])) ; + m_nCollMarkId.push_back( FindCollisionMarkId( m_pGeomDB, m_CollObj[nObjInd].nFrameId)) ; for ( auto nId : m_nCollMarkId) m_pGeomDB->SetMark( nId) ; return true ;