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 ;