From d78003437d177d4f2928f36a09fb6c4ced3854c8 Mon Sep 17 00:00:00 2001 From: Dario Sassi Date: Wed, 24 Sep 2025 17:21:29 +0200 Subject: [PATCH] =?UTF-8?q?EgtMachKernel=202.7i3=20:=20-=20nella=20verific?= =?UTF-8?q?a=20collisione=20della=20simulazione=20negli=20oggetti=20sorgen?= =?UTF-8?q?te=20=C3=A8=20possibile=20indicare=20il=20nome=20degli=20oggett?= =?UTF-8?q?i=20bersaglio=20da=20ignorare=20(CollSkip=3DName).?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- EgtMachKernel.rc | Bin 11774 -> 11774 bytes SimulatorMP.cpp | 10 ++++++++-- SimulatorSP.cpp | 10 ++++++++-- 3 files changed, 16 insertions(+), 4 deletions(-) diff --git a/EgtMachKernel.rc b/EgtMachKernel.rc index 74a4a462784a73ce5975d6ac0cfea9ba83946c61..fb16f42e22bc3e6e748ab0930c95bb7f4987d99f 100644 GIT binary patch delta 97 zcmewt{V#gMFE&Qw&A-`fnHh~IKa|wnoW?bQ1uSxrY4Qod0+^@}R1`^_2jk{d(jGv4 NK<#LXK~l;gTmUD-Bai?9 delta 97 zcmewt{V#gMFE&P_&A-`fnHh~HKa|wnoW?bQ1uSxrY4Qod0+^@}R1`^_2jk{d(jGv4 NK<#LXK~l;gTmU8!BZvS1 diff --git a/SimulatorMP.cpp b/SimulatorMP.cpp index acea9ca..015f86a 100644 --- a/SimulatorMP.cpp +++ b/SimulatorMP.cpp @@ -1580,6 +1580,8 @@ SimulatorMP::ExecCollisionCheck( int& nCdInd, int& nObjInd, int nMoveType) continue ; // recupero il riferimento Frame3d frCd ; m_pGeomDB->GetGlobFrame( m_CdId[i], frCd) ; + // recupero il nome + string sCdName ; m_pGeomDB->GetName( m_CdId[i], sCdName) ; // ciclo sugli oggetti con cui verificare for ( int j = 0 ; j < int( m_CollObj.size()) ; ++ j) { // se modo hidden è da saltare @@ -1594,6 +1596,10 @@ SimulatorMP::ExecCollisionCheck( int& nCdInd, int& nObjInd, int nMoveType) // se utensile attivo su grezzo in lavoro e non è rapido, salto if ( bIsTool && bIsRaw && nMoveType != 0) continue ; + // se contiene info con nome da saltare, verifico se è il caso + string sCollSkip ; + if ( m_pGeomDB->GetInfo( m_CollObj[j].nFrameId, "CollSkip", sCollSkip) && sCollSkip == sCdName) + continue ; // esecuzione controlli di collisione bool bOk = true ; // oggetti che richiedono frame associato (Box, Cylinder, Sphere, Cone) @@ -1667,8 +1673,8 @@ FindCollisionMarkId( const IGeomDB* pGeomDB, int nCollId) int nCollParId = pGeomDB->GetParentId( nCollId) ; string sCollParName = "COLLISION" ; pGeomDB->GetName( nCollParId, sCollParName) ; - // COLLISION per parti generiche di macchina, BASE e MOBILE per fixtures - if ( sCollParName != "COLLISION" && sCollParName != "BASE" && sCollParName != "MOBILE") + // COLLISION* per parti generiche di macchina, BASE e MOBILE per fixtures + if ( sCollParName.rfind( "COLLISION", 0) != 0 && sCollParName != "BASE" && sCollParName != "MOBILE") return nCollParId ; else { int nCollGprId = pGeomDB->GetParentId( nCollParId) ; diff --git a/SimulatorSP.cpp b/SimulatorSP.cpp index 6010ebd..ca55a0a 100644 --- a/SimulatorSP.cpp +++ b/SimulatorSP.cpp @@ -1527,6 +1527,8 @@ SimulatorSP::ExecCollisionCheck( int& nCdInd, int& nObjInd, int nMoveType) continue ; // recupero il riferimento Frame3d frCd ; m_pGeomDB->GetGlobFrame( m_CdId[i], frCd) ; + // recupero il nome + string sCdName ; m_pGeomDB->GetName( m_CdId[i], sCdName) ; // ciclo sugli oggetti con cui verificare for ( int j = 0 ; j < int( m_CollObj.size()) ; ++ j) { // se modo hidden è da saltare @@ -1541,6 +1543,10 @@ SimulatorSP::ExecCollisionCheck( int& nCdInd, int& nObjInd, int nMoveType) // se utensile attivo su grezzo in lavoro e non è rapido, salto if ( bIsTool && bIsRaw && nMoveType != 0) continue ; + // se contiene info con nome da saltare, verifico se è il caso + string sCollSkip ; + if ( m_pGeomDB->GetInfo( m_CollObj[j].nFrameId, "CollSkip", sCollSkip) && sCollSkip == sCdName) + continue ; // esecuzione controlli di collisione bool bOk = true ; // oggetti che richiedono frame associato (Box, Cylinder, Sphere, Cone) @@ -1614,8 +1620,8 @@ FindCollisionMarkId( const IGeomDB* pGeomDB, int nCollId) int nCollParId = pGeomDB->GetParentId( nCollId) ; string sCollParName = "COLLISION" ; pGeomDB->GetName( nCollParId, sCollParName) ; - // COLLISION per parti generiche di macchina, BASE e MOBILE per fixtures - if ( sCollParName != "COLLISION" && sCollParName != "BASE" && sCollParName != "MOBILE") + // COLLISION* per parti generiche di macchina, BASE e MOBILE per fixtures + if ( sCollParName.rfind( "COLLISION", 0) != 0 && sCollParName != "BASE" && sCollParName != "MOBILE") return nCollParId ; else { int nCollGprId = pGeomDB->GetParentId( nCollParId) ;