From 652aa35aaa320fd0b65bfb4d9ca35ea5a8532591 Mon Sep 17 00:00:00 2001 From: Dario Sassi Date: Wed, 2 Aug 2023 20:02:50 +0200 Subject: [PATCH] =?UTF-8?q?EgtMachKernel=202.5h1=20:=20-=20alla=20info=20d?= =?UTF-8?q?i=20testa=20ZMAXONROT=20aggiunto=20parametro=20opzionale=20(3?= =?UTF-8?q?=C2=B0)=20che=20indica=20lo=20spessore=20dei=20pezzi=20oltre=20?= =?UTF-8?q?il=20quale=20applicare=20la=20prescrizione.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- EgtMachKernel.rc | Bin 11774 -> 11774 bytes Operation.cpp | 42 +++++++++++++++++++++++++++++++++++++++--- Operation.h | 3 ++- 3 files changed, 41 insertions(+), 4 deletions(-) diff --git a/EgtMachKernel.rc b/EgtMachKernel.rc index 166cf40998b42ce8922d2564110d7f1ba160fa53..09b0dd0065c280e6cfed1cdc421a248f63287399 100644 GIT binary patch delta 121 zcmewt{V#gMH#Sxa1|0^&&A-{KnVB;f3@1O7)ZLuM)x!c8zsNNCgkT;*P6$a3MUMyL R=2g-z%(yjz6ex#q0RVH^Ca?ei delta 121 zcmewt{V#gMH#Syt1|0_D&A-{KnVHiWj3+;o)ZLuM)x!c8zsNNCgkT;*P6$a3MUMyL R=2g-z%(yjz6ex#q0RVNwCb$3q diff --git a/Operation.cpp b/Operation.cpp index 0a1eb23..4429703 100644 --- a/Operation.cpp +++ b/Operation.cpp @@ -842,6 +842,29 @@ Operation::GetRawGlobBox( int nPhase, const BBox3d& b3Test, double dToler, BBox3 return true ; } +//---------------------------------------------------------------------------- +bool +Operation::GetCurrRawsGlobBox( BBox3d& b3Raw) const +{ + if ( m_pMchMgr == nullptr || m_pGeomDB == nullptr) + return false ; + // inizializzo box + b3Raw.Reset() ; + // Ciclo sui grezzi attivi + int nRawId = m_pMchMgr->GetFirstRawPart() ; + while ( nRawId != GDB_ID_NULL) { + if ( m_pMchMgr->VerifyRawPartPhase( nRawId, m_nPhase)) { + BBox3d b3OneRaw ; + int nRawSolidId = m_pGeomDB->GetFirstNameInGroup( nRawId, MACH_RAW_SOLID) ; + if ( m_pGeomDB->GetGlobalBBox( nRawSolidId, b3OneRaw)) { + b3Raw.Add( b3OneRaw) ; + } + } + nRawId = m_pMchMgr->GetNextRawPart( nRawId) ; + } + return true ; +} + //---------------------------------------------------------------------------- //---------------------------------------------------------------------------- inline Vector3d @@ -2193,12 +2216,15 @@ Operation::AdjustStartEndMovements( bool bVerifyPreviousLink) else return false ; } + // Recupero box complessivo dei grezzi attivi + BBox3d b3Raws ; + GetCurrRawsGlobBox( b3Raws) ; // Se già a Zmax if ( bMaxZ) { // non devo fare alcunché } // se altrimenti richiesta risalita a Zmax - else if ( bToZmax || ForcedZmax( vAxVal, vAxIni)) { + else if ( bToZmax || ForcedZmax( vAxVal, vAxIni, b3Raws)) { // cancello eventuale risalita parziale della lavorazione precedente pPrevOp->RemoveRise() ; // aggiungo risalita a Zmax @@ -2429,6 +2455,9 @@ Operation::AdjustOneStartMovement( int nClPathId, int nPrevClPathId, Operation* } // verifico se la testa interferisce con i pezzi o i bloccaggi sulla tavola else { + // Recupero box complessivo dei grezzi attivi + BBox3d b3Raws ; + GetCurrRawsGlobBox( b3Raws) ; // recupero se ZHome è in basso bool bZHomeDown = GetZHomeDown() ; // determino la Z più alta tra le due posizioni @@ -2437,7 +2466,7 @@ Operation::AdjustOneStartMovement( int nClPathId, int nPrevClPathId, Operation* DBLVECTOR vAxPrevTmp = vAxPrev ; vAxPrevTmp[2] = dTopZ ; DBLVECTOR vAxCurrTmp = vAxCurr ; vAxCurrTmp[2] = dTopZ ; // verifico se forzata risalita a Zmax - bool bForcedZMax = ForcedZmax( vAxPrevTmp, vAxCurrTmp) ; + bool bForcedZMax = ForcedZmax( vAxPrevTmp, vAxCurrTmp, b3Raws) ; // se interferisce if ( bForcedZMax || ! TestCollisionAvoid( vAxPrevTmp, vAxCurrTmp)) { // recupero HomeZ @@ -3112,7 +3141,7 @@ Operation::GetRotationAtZmax( void) const //---------------------------------------------------------------------------- bool -Operation::ForcedZmax( const DBLVECTOR& vAxStart, const DBLVECTOR& vAxEnd) const +Operation::ForcedZmax( const DBLVECTOR& vAxStart, const DBLVECTOR& vAxEnd, const BBox3d& b3Raws) const { // Recupero macchina corrente Machine* pMch = ( m_pMchMgr != nullptr ? m_pMchMgr->GetCurrMachine() : nullptr) ; @@ -3130,6 +3159,13 @@ Operation::ForcedZmax( const DBLVECTOR& vAxStart, const DBLVECTOR& vAxEnd) const int nHeadId = pMch->GetCurrHead() ; DBLVECTOR vdVal ; if ( m_pGeomDB->GetInfo( nHeadId, MCH_ZMAXONROT, vdVal) && vdVal.size() >= 1 && lround(vdVal[0]) > 0) { + // controllo altezza minima grezzi + double dHmin = 100 * EPS_SMALL ; + if ( vdVal.size() >= 3) + dHmin = max( vdVal[2], dHmin) ; + if ( b3Raws.GetDimZ() < dHmin) + return false ; + // controllo variazione angolare minima double dAngTol = 100 * EPS_ANG_SMALL ; if ( vdVal.size() >= 2) dAngTol = max( vdVal[1], dAngTol) ; diff --git a/Operation.h b/Operation.h index b98a570..7a02b3f 100644 --- a/Operation.h +++ b/Operation.h @@ -99,6 +99,7 @@ class Operation : public IUserObj bool GetDistanceFromRawBottom( int nPhase, int nPathId, double dToler, double& dRbDist, double& dAllRbDist) const ; bool GetRawGlobBox( int nPhase, int nPathId, double dToler, BBox3d& b3Raw) const ; bool GetRawGlobBox( int nPhase, const BBox3d& b3Test, double dToler, BBox3d& b3Raw) const ; + bool GetCurrRawsGlobBox( BBox3d& b3Raw) const ; bool AdjustCurveFromSurf( ICurveComposite* pCrvCompo, int nToolDir, int nFaceUse, double dToolThick, int nGrade = 3) ; bool ApproxWithArcsIfUseful( ICurveComposite* pCompo, bool bCareTempProp = false) const ; @@ -144,7 +145,7 @@ class Operation : public IUserObj const DBLVECTOR& vAx2, const Vector3d& vtTool2, double& dMaxZ) const ; bool GetRotationAtZmax( void) const ; - bool ForcedZmax( const DBLVECTOR& vAxStart, const DBLVECTOR& vAxEnd) const ; + bool ForcedZmax( const DBLVECTOR& vAxStart, const DBLVECTOR& vAxEnd, const BBox3d& b3Raws) const ; int GetUserNotesZmax( void) const ; bool GetZHomeDown( void) const ; bool TestCollisionAvoid( const DBLVECTOR& vAxStart, const DBLVECTOR& vAxEnd) const ;