From 1dece3f2d3ca13d29d07e7cdcb4b476829174894 Mon Sep 17 00:00:00 2001 From: Dario Sassi Date: Fri, 15 Jan 2021 14:15:54 +0000 Subject: [PATCH] =?UTF-8?q?EgtMachKernel=202.3a4=20:=20-=20corrette=20GetA?= =?UTF-8?q?xisMin=20e=20GetAxisMax=20di=20MachMgr=20perch=C3=A8=20restitui?= =?UTF-8?q?vano=20la=20posizione=20di=20Home=20-=20corrette=20CalcSurfAuxV?= =?UTF-8?q?iew=20di=20Milling=20e=20di=20Mortising=20perch=C3=A8=20potevan?= =?UTF-8?q?o=20andare=20in=20loop=20infinito=20-=20cambiato=20funzionament?= =?UTF-8?q?o=20di=20risalite=20tra=20una=20lavorazione=20e=20l'altra=20qua?= =?UTF-8?q?ndo=20si=20imposta=20ExtraZ=20(ora=20valido=20solo=20se=20utens?= =?UTF-8?q?ile=20entro=20un=20angolo=20da=20Z)=20e=20se=20non=20ammissibil?= =?UTF-8?q?e=20si=20va=20a=20Zmax.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- EgtMachKernel.rc | Bin 11774 -> 11774 bytes MachMgrMachines.cpp | 4 +-- Milling.cpp | 14 +++++----- Mortising.cpp | 14 +++++----- Operation.cpp | 64 +++++++++++++++++++++++++++++++------------- Operation.h | 2 +- 6 files changed, 61 insertions(+), 37 deletions(-) diff --git a/EgtMachKernel.rc b/EgtMachKernel.rc index 284c11b0768270150ded8116630e9ef5d9f3b500..34753bc1efbb18f3c1045c7fc19dcecef5e4fcd8 100644 GIT binary patch delta 97 zcmewt{V#gMFE&P#&A-`fnHfzcKa|wnoW?bQ1uSxrY4Qod0+^@}R1`^_2jk{d(jGv4 NK<#LXK~l;gTmUI`BbWdH delta 97 zcmewt{V#gMFE&Qw&A-`fnHh~IKa|wnoW?bQ1uSxrY4Qod0+^@}R1`^_2jk{d(jGv4 NK<#LXK~l;gTmUD-Bai?9 diff --git a/MachMgrMachines.cpp b/MachMgrMachines.cpp index 416c8aa..03a6aec 100644 --- a/MachMgrMachines.cpp +++ b/MachMgrMachines.cpp @@ -308,7 +308,7 @@ bool MachMgr::GetAxisMin( const string& sAxis, double& dMin) const { Machine* pMch = GetCurrMachine() ; - return ( ( pMch != nullptr) ? pMch->GetAxisHomePos( sAxis, dMin) : false) ; + return ( ( pMch != nullptr) ? pMch->GetAxisMin( sAxis, dMin) : false) ; } //---------------------------------------------------------------------------- @@ -316,7 +316,7 @@ bool MachMgr::GetAxisMax( const string& sAxis, double& dMax) const { Machine* pMch = GetCurrMachine() ; - return ( ( pMch != nullptr) ? pMch->GetAxisHomePos( sAxis, dMax) : false) ; + return ( ( pMch != nullptr) ? pMch->GetAxisMax( sAxis, dMax) : false) ; } //---------------------------------------------------------------------------- diff --git a/Milling.cpp b/Milling.cpp index 2eb2e5a..75b222d 100644 --- a/Milling.cpp +++ b/Milling.cpp @@ -1518,14 +1518,12 @@ Milling::CalcSurfAuxView( int nAuxId, int nAuxViewId) while ( nPathId != GDB_ID_NULL) { int nCrvId = m_pGeomDB->GetFirstInGroup( nPathId) ; const ICurve* pCrv = ::GetCurve( m_pGeomDB->GetGeoObj( nCrvId)) ; - if ( pCrv == nullptr) - continue ; - ISurfFlatRegion* pSfr = GetSurfFlatRegionFromFatCurve( pCrv->Clone(), FAT_RAD, false, false) ; - if ( pSfr == nullptr) - continue ; - int nSfrId = m_pGeomDB->AddGeoObj( GDB_ID_NULL, nAuxViewId, pSfr) ; - if ( nSfrId == GDB_ID_NULL) - continue ; + if ( pCrv != nullptr) { + ISurfFlatRegion* pSfr = GetSurfFlatRegionFromFatCurve( pCrv->Clone(), FAT_RAD, false, false) ; + if ( pSfr != nullptr) { + int nSfrId = m_pGeomDB->AddGeoObj( GDB_ID_NULL, nAuxViewId, pSfr) ; + } + } nPathId = m_pGeomDB->GetNextGroup( nPathId) ; } } diff --git a/Mortising.cpp b/Mortising.cpp index 3b2e391..1490cca 100644 --- a/Mortising.cpp +++ b/Mortising.cpp @@ -1112,14 +1112,12 @@ Mortising::CalcSurfAuxView( int nAuxId, int nAuxViewId) while ( nPathId != GDB_ID_NULL) { int nCrvId = m_pGeomDB->GetFirstInGroup( nPathId) ; const ICurve* pCrv = ::GetCurve( m_pGeomDB->GetGeoObj( nCrvId)) ; - if ( pCrv == nullptr) - continue ; - ISurfFlatRegion* pSfr = GetSurfFlatRegionFromFatCurve( pCrv->Clone(), FAT_RAD, false, false) ; - if ( pSfr == nullptr) - continue ; - int nSfrId = m_pGeomDB->AddGeoObj( GDB_ID_NULL, nAuxViewId, pSfr) ; - if ( nSfrId == GDB_ID_NULL) - continue ; + if ( pCrv != nullptr) { + ISurfFlatRegion* pSfr = GetSurfFlatRegionFromFatCurve( pCrv->Clone(), FAT_RAD, false, false) ; + if ( pSfr != nullptr) { + int nSfrId = m_pGeomDB->AddGeoObj( GDB_ID_NULL, nAuxViewId, pSfr) ; + } + } nPathId = m_pGeomDB->GetNextGroup( nPathId) ; } } diff --git a/Operation.cpp b/Operation.cpp index bc6b7b5..b07035c 100644 --- a/Operation.cpp +++ b/Operation.cpp @@ -1729,18 +1729,25 @@ Operation::AdjustStartEndMovements( bool bVerifyPreviousLink) vAxIni[2] = vAxVal[2] ; } // Verifico non ci sia collisione a HomeZ + bool bToZmax = false ; double dHomeZ ; if ( m_pMchMgr->GetCurrAxisHomePos( 2, dHomeZ)) { DBLVECTOR vAxVal2 = vAxVal ; vAxVal2[2] = dHomeZ ; DBLVECTOR vAxIni2 = vAxIni ; vAxIni2[2] = dHomeZ ; if ( ! TestCollisionAvoid( vAxVal2, vAxIni2)) { - double dExtraZ = GetExtraZ( dHomeZ) ; - if ( dExtraZ > EPS_SMALL) { - dHomeZ += dExtraZ ; - vAxVal2[2] = dHomeZ ; - vAxIni2[2] = dHomeZ ; - if ( ! TestCollisionAvoid( vAxVal2, vAxIni2)) - return false ; + double dExtraZ, dMaxAngV ; + if ( GetExtraZ( dHomeZ, dExtraZ, dMaxAngV)) { + if ( vAxVal2.size() < 5 || ( abs( vAxVal2[4]) < dMaxAngV && abs( vAxIni2[4]) < dMaxAngV)) { + double dMyHomeZ = dHomeZ + dExtraZ ; + vAxVal2[2] = dMyHomeZ ; + vAxIni2[2] = dMyHomeZ ; + if ( TestCollisionAvoid( vAxVal2, vAxIni2)) + dHomeZ = dMyHomeZ ; + else + bToZmax = true ; + } + else + bToZmax = true ; } else return false ; @@ -1749,11 +1756,11 @@ Operation::AdjustStartEndMovements( bool bVerifyPreviousLink) else return false ; // Se richiesta risalita a Zmax - if ( ForcedZmax( vAxVal, vAxIni)) { + if ( bToZmax || ForcedZmax( vAxVal, vAxIni)) { // cancello eventuale risalita parziale della lavorazione precedente pPrevOp->RemoveRise() ; // aggiungo risalita a Zmax - if ( ! pPrevOp->AddRise( vAxVal)) + if ( ! pPrevOp->AddRise( vAxVal, ( bToZmax && false ? -10000 : -1))) return false ; // si parte da Z massima bMaxZ = true ; @@ -2146,6 +2153,9 @@ Operation::AddRise( DBLVECTOR& vAxVal, double dDelta, int nClPathId, bool bZHome m_pMchMgr->GetAllCurrAxesHomePos( vAxHome) ; vAxVal[2] = vAxHome[2] ; nFlag = 3 ; // movimento a Zmax + // !!! PROVA !!! + if ( dDelta < -9999) + nFlag = 5 ; } // eventuale aggiustamenti speciali dipendenti dalla macchina Vector3d vtTool = pCam->GetToolDir() ; @@ -2397,23 +2407,41 @@ Operation::CalcDeltaZForHeadRotation( const DBLVECTOR& vAxStart, const DBLVECTOR } //---------------------------------------------------------------------------- -double -Operation::GetExtraZ( double dSafeZ) const +bool +Operation::GetExtraZ( double dSafeZ, double& dExtraZ, double& dMaxAngV) const { - double dExtraZ = 0 ; // Recupero macchina corrente Machine* pMch = ( m_pMchMgr != nullptr ? m_pMchMgr->GetCurrMachine() : nullptr) ; if ( pMch == nullptr) return 0 ; // Se testa con Info ZEXTRA la recupero e la limito alla corsa dell'asse int nHeadId = pMch->GetCurrHead() ; - double dVal ; - if ( m_pGeomDB->GetInfo( nHeadId, MCH_ZEXTRA, dVal) && dVal > EPS_SMALL) { - double dZmax ; - pMch->GetCurrAxisMax( 2, dZmax) ; - dExtraZ = min( dVal, dZmax - dSafeZ) ; + DBLVECTOR vdVal ; + if ( m_pGeomDB->GetInfo( nHeadId, MCH_ZEXTRA, vdVal) && vdVal.size() >= 1 && vdVal[0] > EPS_SMALL) { + // angolo limite per applicare questo allontanamento extra + dMaxAngV = 30 ; + if ( vdVal.size() >= 2) + dMaxAngV = vdVal[1] ; + // flag per posizione sicura in alto o in basso + bool bZHomeDown ; + if ( ! m_pGeomDB->GetInfo( nHeadId, MCH_ZHOMEDOWN, bZHomeDown)) + bZHomeDown = false ; + // se caso standard + if ( ! bZHomeDown) { + double dZmax ; + pMch->GetCurrAxisMax( 2, dZmax) ; + dExtraZ = min( vdVal[0], dZmax - dSafeZ) ; + return ( dExtraZ > EPS_SMALL) ; + } + // altrimenti caso con posizione sicura in basso (teste da sotto) + else { + double dZmin ; + pMch->GetCurrAxisMin( 2, dZmin) ; + dExtraZ = max( vdVal[0], dZmin - dSafeZ) ; + return ( dExtraZ < EPS_SMALL) ; + } } - return dExtraZ ; + return false ; } //---------------------------------------------------------------------------- diff --git a/Operation.h b/Operation.h index 6443b1d..214d0a6 100644 --- a/Operation.h +++ b/Operation.h @@ -110,7 +110,7 @@ class Operation : public IUserObj bool RemoveRise( int nClPathId = GDB_ID_NULL) ; bool AddHome( void) ; bool CalcDeltaZForHeadRotation( const DBLVECTOR& vAxStart, const DBLVECTOR& vAxEnd, double& dDeltaZ) const ; - double GetExtraZ( double dSafeZ) const ; + bool GetExtraZ( double dSafeZ, double& dExtraZ, double& dMaxAngV) const ; bool ForcedZmax( const DBLVECTOR& vAxStart, const DBLVECTOR& vAxEnd) const ; bool GetZHomeDown( void) const ; bool TestCollisionAvoid( const DBLVECTOR& vAxStart, const DBLVECTOR& vAxEnd) const ;