diff --git a/EgtMachKernel.rc b/EgtMachKernel.rc index 74a4a46..fb16f42 100644 Binary files a/EgtMachKernel.rc and b/EgtMachKernel.rc differ 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) ;