From 6348a40e18a44a9a7625f1f99a5338afe7529b25 Mon Sep 17 00:00:00 2001 From: Dario Sassi Date: Tue, 30 Jul 2024 09:28:05 +0200 Subject: [PATCH] =?UTF-8?q?EgtMachKernel=202.6g7=20:=20-=20prime=20modific?= =?UTF-8?q?he=20per=20gestire=20link=20tra=20lavorazioni=20con=20diverse?= =?UTF-8?q?=20modalit=C3=A0=20(per=20ora=20rimane=20la=20standard).?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- EgtMachKernel.rc | Bin 11774 -> 11774 bytes Machine.h | 1 + MachineCalc.cpp | 17 +++++++++++++++++ Operation.cpp | 48 +++++++++++++++++++++++++++++++++++++++-------- Operation.h | 2 ++ 5 files changed, 60 insertions(+), 8 deletions(-) diff --git a/EgtMachKernel.rc b/EgtMachKernel.rc index a85db43b4fc8874bcc1be8abbc049af6982e0192..7a59acf1e79de420a726791a4896de0cda9be7bd 100644 GIT binary patch delta 236 zcmewt{V#gMI%aKGhCGIJh8%`WhGK>c1_cHUhESkLCPN8BDnkm89}HwAf_cT0IklxX ze_&=~W;EaYUhX2(<& nF)y2}rOv|(a;PWRX*mp)Acsxz>% diff --git a/Machine.h b/Machine.h index 64dd408..b2ef67d 100644 --- a/Machine.h +++ b/Machine.h @@ -126,6 +126,7 @@ class Machine bool GetAllCurrAxesNames( STRVECTOR& vAxName) const ; bool GetCurrAxisToken( int nInd, std::string& sAxToken) const ; bool GetAllCurrAxesTokens( STRVECTOR& vAxToken) const ; + bool GetCurrAxisType( int nInd, bool& bHead) const ; bool GetCurrAxisMin( int nInd, double& dMin) const ; bool GetCurrAxisMax( int nInd, double& dMax) const ; bool GetCurrAxisOffset( int nInd, double& dOffset) const ; diff --git a/MachineCalc.cpp b/MachineCalc.cpp index b62b7e8..e47fd5e 100644 --- a/MachineCalc.cpp +++ b/MachineCalc.cpp @@ -1947,6 +1947,23 @@ Machine::GetAllCurrAxesTokens( STRVECTOR& vAxToken) const return bOk ; } +//---------------------------------------------------------------------------- +bool +Machine::GetCurrAxisType( int nInd, bool& bHead) const +{ + int nLinAxes = int( m_vCalcLinAx.size()) ; + int nRotAxes = int( m_vCalcRotAx.size()) ; + if ( nInd >= 0 && nInd < nLinAxes) { + bHead = m_vCalcLinAx[nInd].bHead ; + return true ; + } + else if ( nInd >= nLinAxes && nInd < nLinAxes + nRotAxes) { + bHead = m_vCalcRotAx[nInd-nLinAxes].bHead ; + return true ; + } + return false ; +} + //---------------------------------------------------------------------------- bool Machine::GetCurrAxisMin( int nInd, double& dMin) const diff --git a/Operation.cpp b/Operation.cpp index 8224b64..8961055 100644 --- a/Operation.cpp +++ b/Operation.cpp @@ -4008,6 +4008,7 @@ Operation::TestCollisionAvoid( const DBLVECTOR& vAxStart, const DBLVECTOR& vAxEn pMch->GetAllCurrAxesNames( vAxName) ; if ( vAxName.size() != vAxStart.size() || vAxName.size() != vAxEnd.size()) return false ; + // Porto la macchina in home pMch->ResetAllAxesPos() ; // Elenco grezzi attivi @@ -4031,12 +4032,6 @@ 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 vHeadCollId ; - pMch->GetCurrHeadCollGroups( vHeadCollId) ; // Lancio la verifica custom int nRes = SpecialTestCollisionAvoid( vAxStart, vAxEnd) ; @@ -4045,6 +4040,45 @@ Operation::TestCollisionAvoid( const DBLVECTOR& vAxStart, const DBLVECTOR& vAxEn return ( nRes == SCAV_AVOID) ; } + // 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 bHead ; pMch->GetCurrAxisType( i, bHead) ; + if ( nHeadOrder == -1) + vAxMid[i] = ( bHead ? vAxEnd[i] : vAxStart[i]) ; + else if ( nHeadOrder == +1) { + vAxMid[i] = ( bHead ? vAxStart[i] : vAxEnd[i]) ; + } + } + bCollAvoid = OneMoveTestCollisionAvoid( vAxName, vAxStart, vAxMid, pMch, vRawId, vFxtId) && + OneMoveTestCollisionAvoid( vAxName, vAxMid, vAxEnd, pMch, vRawId, vFxtId) ; + } + + // Ripristino lo stato macchina + ResetMachine( pMch) ; + + return bCollAvoid ; +} + +//---------------------------------------------------------------------------- +bool +Operation::OneMoveTestCollisionAvoid( const STRVECTOR& vAxName, const DBLVECTOR& vAxStart, const DBLVECTOR& vAxEnd, + Machine* pMch, const INTVECTOR& vRawId, const INTVECTOR& vFxtId) const +{ + // Parti di tavola da considerare per la collisione + INTVECTOR vTabCollId ; + pMch->GetCurrTableCollGroups( vTabCollId) ; + // Parti di testa e collegati da considerare per la collisione + INTVECTOR vHeadCollId ; + pMch->GetCurrHeadCollGroups( vHeadCollId) ; + // distanza di sicurezza const double TOL_SAFEDIST = 5.0 ; const double MIN_SAFEDIST = 5.0 ; @@ -4234,8 +4268,6 @@ Operation::TestCollisionAvoid( const DBLVECTOR& vAxStart, const DBLVECTOR& vAxEn } } } - // Ripristino lo stato macchina - ResetMachine( pMch) ; return ( ! bCollide) ; } diff --git a/Operation.h b/Operation.h index fed8795..4dbd58b 100644 --- a/Operation.h +++ b/Operation.h @@ -220,6 +220,8 @@ class Operation : public IUserObj int GetUserNotesZmax( void) const ; bool GetZHomeDown( void) const ; bool TestCollisionAvoid( const DBLVECTOR& vAxStart, const DBLVECTOR& vAxEnd) const ; + bool OneMoveTestCollisionAvoid( const STRVECTOR& vAxName, const DBLVECTOR& vAxStart, const DBLVECTOR& vAxEnd, + Machine* pMch, const INTVECTOR& vRawId, const INTVECTOR& vFxtId) const ; 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) ;