EgtMachKernel 2.5l6 :
- aggiunta gestione script opzionale OnSpecialTestCollisionAvoid per avere un test custom di verifica collisione nei movimenti link tra le lavorazioni.
This commit is contained in:
Binary file not shown.
+80
-6
@@ -3306,6 +3306,23 @@ Operation::GetZHomeDown( void) const
|
||||
return bZHomeDown ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
static bool
|
||||
ResetMachine( Machine* pMch)
|
||||
{
|
||||
// macchina non definita
|
||||
if ( pMch == nullptr)
|
||||
return false ;
|
||||
// Riporto la macchina in home
|
||||
pMch->ResetAllAxesPos() ;
|
||||
// Sgancio pezzi, grezzi e sottopezzi dalla tavola corrente
|
||||
pMch->UnlinkAllPartsFromGroups() ;
|
||||
pMch->UnlinkAllRawPartsFromGroups() ;
|
||||
pMch->UnlinkAllFixturesFromGroups() ;
|
||||
// tutto bene
|
||||
return true ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
Operation::TestCollisionAvoid( const DBLVECTOR& vAxStart, const DBLVECTOR& vAxEnd) const
|
||||
@@ -3349,6 +3366,14 @@ Operation::TestCollisionAvoid( const DBLVECTOR& vAxStart, const DBLVECTOR& vAxEn
|
||||
// Parti di testa e collegati da considerare per la collisione
|
||||
INTVECTOR vCollId ;
|
||||
pMch->GetCurrHeadCollGroups( vCollId) ;
|
||||
|
||||
// Lancio la verifica custom
|
||||
int nRes = SpecialTestCollisionAvoid( vAxStart, vAxEnd) ;
|
||||
if ( nRes != SCAV_TOTEST) {
|
||||
ResetMachine( pMch) ;
|
||||
return ( nRes == SCAV_AVOID) ;
|
||||
}
|
||||
|
||||
// distanza di sicurezza
|
||||
const double TOL_SAFEDIST = 5.0 ;
|
||||
const double MIN_SAFEDIST = 5.0 ;
|
||||
@@ -3504,16 +3529,65 @@ Operation::TestCollisionAvoid( const DBLVECTOR& vAxStart, const DBLVECTOR& vAxEn
|
||||
}
|
||||
}
|
||||
}
|
||||
// Riporto la macchina in home
|
||||
pMch->ResetAllAxesPos() ;
|
||||
// Sgancio pezzi, grezzi e sottopezzi dalla tavola corrente
|
||||
pMch->UnlinkAllPartsFromGroups() ;
|
||||
pMch->UnlinkAllRawPartsFromGroups() ;
|
||||
pMch->UnlinkAllFixturesFromGroups() ;
|
||||
// Ripristino lo stato macchina
|
||||
ResetMachine( pMch) ;
|
||||
|
||||
return ( ! bCollide) ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
int
|
||||
Operation::SpecialTestCollisionAvoid( const DBLVECTOR& vAxStart, const DBLVECTOR& vAxEnd) const
|
||||
{
|
||||
// recupero la macchina corrente
|
||||
Machine* pMch = ( m_pMchMgr != nullptr ? m_pMchMgr->GetCurrMachine() : nullptr) ;
|
||||
if ( pMch == nullptr)
|
||||
return false ;
|
||||
|
||||
// assi già verificati
|
||||
|
||||
// costanti
|
||||
static const string EMC_VAR = "EMC" ; // tabella variabili locali per calcolo
|
||||
static const string EVAR_ERROR = ".ERR" ; // OUT (int) codice di errore (0=ok)
|
||||
static const string EVAR_RES = ".RES" ; // OUT (int) risultato (0=collide, 1=evita, 2=fare test standard)
|
||||
static const string ON_SPECIAL_TESTCOLLISIONAVOID = "OnSpecialTestCollisionAvoid" ;
|
||||
|
||||
// verifico definizione funzione
|
||||
if ( ! pMch->LuaExistsFunction( ON_SPECIAL_TESTCOLLISIONAVOID))
|
||||
return SCAV_TOTEST ;
|
||||
|
||||
// avvio
|
||||
bool bOk = true ;
|
||||
int nErr = 99 ;
|
||||
// imposto valori parametri
|
||||
bOk = bOk && pMch->LuaCreateGlobTable( EMC_VAR) ;
|
||||
bOk = bOk && pMch->LuaSetGlobVar( EMC_VAR + GVAR_TOOL, GetToolName()) ;
|
||||
bOk = bOk && pMch->LuaSetGlobVar( EMC_VAR + GVAR_HEAD, GetHeadName()) ;
|
||||
bOk = bOk && pMch->LuaSetGlobVar( EMC_VAR + GVAR_EXIT, GetExitNbr()) ;
|
||||
bOk = bOk && pMch->LuaSetGlobVar( EMC_VAR + GVAR_TCPOS, GetToolTcPos()) ;
|
||||
bOk = bOk && pMch->LuaSetGlobVar( EMC_VAR + GVAR_MCHID, GetOwner()) ;
|
||||
// valori degli assi
|
||||
for ( int i = 1 ; i <= int( vAxStart.size()) ; ++ i)
|
||||
bOk = bOk && pMch->LuaSetGlobVar( GetGlobVarAxisPrev( i, EMC_VAR), vAxStart[i-1]) ;
|
||||
for ( int i = 1 ; i <= int( vAxEnd.size()) ; ++ i)
|
||||
bOk = bOk && pMch->LuaSetGlobVar( GetGlobVarAxisValue( i, EMC_VAR), vAxEnd[i-1]) ;
|
||||
// eseguo
|
||||
bOk = bOk && pMch->LuaCallFunction( ON_SPECIAL_TESTCOLLISIONAVOID, false) ;
|
||||
// recupero valori parametri obbligatori
|
||||
bOk = bOk && pMch->LuaGetGlobVar( EMC_VAR + EVAR_ERROR, nErr) ;
|
||||
int nRes = SCAV_TOTEST ;
|
||||
bOk = bOk && pMch->LuaGetGlobVar( EMC_VAR + EVAR_RES, nRes) ;
|
||||
// reset
|
||||
bOk = bOk && pMch->LuaResetGlobVar( EMC_VAR) ;
|
||||
// segnalo errori
|
||||
if ( nErr != 0) {
|
||||
bOk = false ;
|
||||
string sOut = " Error in " + ON_SPECIAL_TESTCOLLISIONAVOID + " (" + ToString( nErr) + ")" ;
|
||||
LOG_ERROR( GetEMkLogger(), sOut.c_str())
|
||||
}
|
||||
return ( nErr != 0 ? SCAV_ERROR : nRes) ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
Operation::SpecialMoveZup( DBLVECTOR& vAx, Vector3d& vtTool, int& nFlag, int& nFlag2, bool& bModif)
|
||||
|
||||
+4
-1
@@ -153,7 +153,8 @@ class Operation : public IUserObj
|
||||
int GetUserNotesZmax( void) const ;
|
||||
bool GetZHomeDown( void) const ;
|
||||
bool TestCollisionAvoid( const DBLVECTOR& vAxStart, const DBLVECTOR& vAxEnd) const ;
|
||||
bool SpecialMoveZup( DBLVECTOR& vAx, Vector3d& vtTool, int& nFlag, int& nFlag2, bool& bModif) ;
|
||||
int SpecialTestCollisionAvoid( const DBLVECTOR& vAxStart, const DBLVECTOR& vAxEnd) const ;
|
||||
bool SpecialMoveZup( DBLVECTOR& vAx, Vector3d& vtTool, int& nFlag, int& nFlag2, bool& bModif) ;
|
||||
bool SpecialMoveRapid( const DBLVECTOR& vAxStart, const DBLVECTOR& vAxEnd, DBLVECTOR& vAxNew, bool& bModif) ;
|
||||
|
||||
bool GetAggrBottomData( const std::string& sHead, AggrBottom& agbData) const ;
|
||||
@@ -219,3 +220,5 @@ inline Operation* GetOperation( IUserObj* pUserObj)
|
||||
enum { TOOL_PARAL = 1, TOOL_ORTHO = 2, TOOL_ORTUP = 3, TOOL_PAR_SLANT= 4} ;
|
||||
// tipo di utilizzo contorno faccia
|
||||
enum { FACE_DOWN = 1, FACE_TOP = 2, FACE_FRONT = 3, FACE_BACK = 4, FACE_LEFT = 5, FACE_RIGHT = 6, FACE_CONT = 7} ;
|
||||
// risultato di SpecialTestCollisionAvoid
|
||||
enum { SCAV_ERROR = -1, SCAV_COLLIDE = 0, SCAV_AVOID = 1, SCAV_TOTEST = 2};
|
||||
|
||||
Reference in New Issue
Block a user