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:
+40
-3
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user