EgtMachKernel :

- aggiunta gestione oggetti per verifica collisioni nei link tra lavorazioni anche nelle tavole
- in fresatura standard migliorati approcci e retrazioni per frese che non lavorano di testa
- in simulazione migliorata gestione comandi ausiliari di start in Disposizioni senza movimenti.
This commit is contained in:
Dario Sassi
2024-03-19 18:11:50 +01:00
parent 74b2874f56
commit 7fbce2b593
10 changed files with 149 additions and 54 deletions
+40 -3
View File
@@ -3780,9 +3780,12 @@ Operation::TestCollisionAvoid( const DBLVECTOR& vAxStart, const DBLVECTOR& vAxEn
// Aggancio bloccaggi alla tavola corrente
for ( const auto nFxtId : vFxtId)
pMch->LinkFixtureToGroup( nFxtId, sTable) ;
// Parti di tavola da considerare per la collisione
INTVECTOR vTabCollId ;
pMch->GetCurrTableCollGroups( vTabCollId) ;
// Parti di testa e collegati da considerare per la collisione
INTVECTOR vCollId ;
pMch->GetCurrHeadCollGroups( vCollId) ;
INTVECTOR vHeadCollId ;
pMch->GetCurrHeadCollGroups( vHeadCollId) ;
// Lancio la verifica custom
int nRes = SpecialTestCollisionAvoid( vAxStart, vAxEnd) ;
@@ -3819,7 +3822,7 @@ Operation::TestCollisionAvoid( const DBLVECTOR& vAxStart, const DBLVECTOR& vAxEn
// Determino sottobox e box della testa e degli altri oggetti da considerare per la collisione
BOXIVECTOR vbiSH ;
BBox3d b3Head ;
for ( int nCId : vCollId) {
for ( int nCId : vHeadCollId) {
int nHId = m_pGeomDB->GetFirstInGroup( nCId) ;
while ( nHId != GDB_ID_NULL) {
BBox3d b3Tmp ;
@@ -3911,6 +3914,40 @@ Operation::TestCollisionAvoid( const DBLVECTOR& vAxStart, const DBLVECTOR& vAxEn
if ( ExeGetDebugLevel() >= 5) {
LOG_DBG_INFO( GetEMkLogger(), ( bCollide ? " COLLIDE" : " avoid")) ;
}
// Se non trovata collisione, li confronto con oggetti da verificare della tavola
if ( ! bCollide) {
for ( const auto nTabCollId : vTabCollId) {
// verifico i box
BBox3d b3TabColl ;
int nFlag = BBF_ONLY_VISIBLE | BBF_IGNORE_TEXT | BBF_IGNORE_DIM ;
m_pGeomDB->GetGlobalBBox( nTabCollId, b3TabColl, nFlag) ;
// eventuale emissione Log
if ( ExeGetDebugLevel() >= 5) {
string sBox = " TabColl : " + ( b3TabColl.IsEmpty() ? string( "Empty Box") : ToString( b3TabColl, 1)) ;
LOG_DBG_INFO( GetEMkLogger(), sBox.c_str()) ;
}
// se i box interferiscono
if ( ! b3TabColl.IsEmpty() && b3Head.Overlaps( b3TabColl)) {
// eventuale emissione Log
if ( ExeGetDebugLevel() >= 5) {
LOG_DBG_INFO( GetEMkLogger(), " Can collide -->") ;
}
// verifico i sottobox
for ( const auto& biSH : vbiSH) {
if ( biSH.first.Overlaps( b3TabColl)) {
bCollide = true ;
break ;
}
}
if ( bCollide)
break ;
}
}
// eventuale emissione Log
if ( ExeGetDebugLevel() >= 5) {
LOG_DBG_INFO( GetEMkLogger(), ( bCollide ? " COLLIDE" : " avoid")) ;
}
}
// Se non trovata collisione, li confronto con i bloccaggi
if ( ! bCollide) {
for ( const auto nFxtId : vFxtId) {