EgtMachKernel :
- inserite diverse modalità di movimento assi nei link tra lavorazioni, per ora impostato sempre tutti interpolati tra loro.
This commit is contained in:
+48
-15
@@ -4042,24 +4042,32 @@ Operation::TestCollisionAvoid( const DBLVECTOR& vAxStart, const DBLVECTOR& vAxEn
|
||||
|
||||
// Verifica standard
|
||||
bool bCollAvoid ;
|
||||
int nHeadOrder = 0 ;
|
||||
if ( nHeadOrder == 0) {
|
||||
bCollAvoid = OneMoveTestCollisionAvoid( vAxName, vAxStart, vAxEnd, pMch, vRawId, vFxtId) ;
|
||||
}
|
||||
else {
|
||||
DBLVECTOR vAxMid( int( vAxName.size())) ;
|
||||
// ciclo sugli assi correnti, assegno opportunamente valori a seconda del tipo (testa o tavola)
|
||||
for ( int i = 0 ; i < int( vAxName.size()) ; ++ i) {
|
||||
bool bLinear, bHead ; pMch->GetCurrAxisType( i, bLinear, bHead) ;
|
||||
if ( nHeadOrder == -1)
|
||||
vAxMid[i] = ( bHead ? vAxEnd[i] : vAxStart[i]) ;
|
||||
else if ( nHeadOrder == +1) {
|
||||
vAxMid[i] = ( bHead ? vAxStart[i] : vAxEnd[i]) ;
|
||||
}
|
||||
}
|
||||
int nLinkAxisOrder = LKAO_INTERP ;
|
||||
// se ordine stabilito tra gli assi di tavola e testa (LKAO_HEAD_BEFORE(-1)=prima testa, LKAO_HEAD_AFTER(+1)=dopo testa)
|
||||
if ( nLinkAxisOrder == LKAO_HEAD_BEFORE || nLinkAxisOrder == LKAO_HEAD_AFTER) {
|
||||
// assegno il valore degli assi nella posizione intermedia opportuna
|
||||
DBLVECTOR vAxMid ;
|
||||
GetAxisMidForTestCollisionAvoid( vAxStart, vAxEnd, nLinkAxisOrder, pMch, vAxMid) ;
|
||||
// eseguo i test
|
||||
bCollAvoid = OneMoveTestCollisionAvoid( vAxName, vAxStart, vAxMid, pMch, vRawId, vFxtId) &&
|
||||
OneMoveTestCollisionAvoid( vAxName, vAxMid, vAxEnd, pMch, vRawId, vFxtId) ;
|
||||
}
|
||||
// se verifico entrambi gli ordini degli assi di tavola e testa LKAO_HEAD_BOTH(11)
|
||||
else if ( nLinkAxisOrder == LKAO_HEAD_BOTH) {
|
||||
// assegno il valore degli assi nelle posizioni intermedie
|
||||
DBLVECTOR vAxMidB, vAxMidA ;
|
||||
GetAxisMidForTestCollisionAvoid( vAxStart, vAxEnd, LKAO_HEAD_BEFORE, pMch, vAxMidB) ;
|
||||
GetAxisMidForTestCollisionAvoid( vAxStart, vAxEnd, LKAO_HEAD_AFTER, pMch, vAxMidA) ;
|
||||
// eseguo i test
|
||||
bCollAvoid = OneMoveTestCollisionAvoid( vAxName, vAxStart, vAxMidB, pMch, vRawId, vFxtId) &&
|
||||
OneMoveTestCollisionAvoid( vAxName, vAxMidB, vAxEnd, pMch, vRawId, vFxtId) &&
|
||||
OneMoveTestCollisionAvoid( vAxName, vAxStart, vAxMidA, pMch, vRawId, vFxtId) &&
|
||||
OneMoveTestCollisionAvoid( vAxName, vAxMidA, vAxEnd, pMch, vRawId, vFxtId) ;
|
||||
}
|
||||
// altrimenti interpolo tutti gli assi tra loro LKAO_INTERP(0)
|
||||
else {
|
||||
bCollAvoid = OneMoveTestCollisionAvoid( vAxName, vAxStart, vAxEnd, pMch, vRawId, vFxtId) ;
|
||||
}
|
||||
|
||||
// Ripristino lo stato macchina
|
||||
ResetMachine( pMch) ;
|
||||
@@ -4067,6 +4075,31 @@ Operation::TestCollisionAvoid( const DBLVECTOR& vAxStart, const DBLVECTOR& vAxEn
|
||||
return bCollAvoid ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
Operation::GetAxisMidForTestCollisionAvoid( const DBLVECTOR& vAxStart, const DBLVECTOR& vAxEnd, int nAxisOrder, Machine* pMch,
|
||||
DBLVECTOR& vAxMid) const
|
||||
{
|
||||
// reset del risultato
|
||||
vAxMid.clear() ;
|
||||
// verifico che i vettori degli assi abbiano la stessa dimensione e che la macchina sia definita
|
||||
if ( vAxStart.size() != vAxEnd.size() || pMch == nullptr)
|
||||
return false ;
|
||||
// assegno dimensione al risultato
|
||||
vAxMid.resize( vAxStart.size()) ;
|
||||
// ciclo sugli assi correnti, assegno opportunamente valori a seconda del tipo (testa o tavola)
|
||||
for ( int i = 0 ; i < int( vAxStart.size()) ; ++ i) {
|
||||
bool bLinear, bHead ; pMch->GetCurrAxisType( i, bLinear, bHead) ;
|
||||
if ( nAxisOrder == -1)
|
||||
vAxMid[i] = ( bHead ? vAxEnd[i] : vAxStart[i]) ;
|
||||
else if ( nAxisOrder == +1) {
|
||||
vAxMid[i] = ( bHead ? vAxStart[i] : vAxEnd[i]) ;
|
||||
}
|
||||
}
|
||||
// tutto bene
|
||||
return true ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
Operation::OneMoveTestCollisionAvoid( const STRVECTOR& vAxName, const DBLVECTOR& vAxStart, const DBLVECTOR& vAxEnd,
|
||||
|
||||
Reference in New Issue
Block a user