From 01854f30ed08fa67ae99a082cd762172a5b87844 Mon Sep 17 00:00:00 2001 From: DarioS Date: Fri, 7 Jul 2023 17:08:56 +0200 Subject: [PATCH] EgtMachKernel 2.5g1 : - in svuotatura corretta gestione forzatura contorni chiusi (Open=0 in UserNotes della lavorazione) con i casi ottimizzati. --- EgtMachKernel.rc | Bin 11774 -> 11774 bytes Pocketing.cpp | 57 +++++++++++++++++++++++++++-------------------- Pocketing.h | 3 ++- 3 files changed, 35 insertions(+), 25 deletions(-) diff --git a/EgtMachKernel.rc b/EgtMachKernel.rc index a2cd5a3667db460d70d3791739ce2127011b1521..19ed852938d01be548bdfa04a69601dd23370867 100644 GIT binary patch delta 121 zcmewt{V#gMH#Syt1|0^&&A-{KnVHiW3@1O7)ZLuM)x!c8zsNNCgkT;*P6$a3MUMyL R=2g-z%(yjz6ex#q0RVBoCa3@a delta 121 zcmewt{V#gMH#Sx?1|0_D&A-{KnVHiVj3+;o)ZLuM)x!c8zsNNCgkT;*P6$a3MUMyL R=2g-z%(yjz6ex#q0RVHUCa?ei diff --git a/Pocketing.cpp b/Pocketing.cpp index 3499e53..c4e10ef 100644 --- a/Pocketing.cpp +++ b/Pocketing.cpp @@ -1087,7 +1087,7 @@ Pocketing::GetCurves( SelData Id, ICURVEPLIST& lstPC) // la duplico pCurve.Set( pOriCurve->Clone()) ; // recupero eventuali informazioni per lati aperti - SetCurveAllTempProp( Id.nId, pCurve) ; + SetCurveAllTempProp( Id.nId, false, pCurve) ; // se estrusione mancante, imposto default Vector3d vtExtr ; if ( ! pCurve->GetExtrusion( vtExtr) || vtExtr.IsSmall()) @@ -1249,14 +1249,16 @@ Pocketing::GetCurves( SelData Id, ICURVEPLIST& lstPC) //---------------------------------------------------------------------------- bool -Pocketing::SetCurveAllTempProp( int nCrvId, ICurve* pCurve) +Pocketing::SetCurveAllTempProp( int nCrvId, bool bForcedClose, ICurve* pCurve, bool* pbSomeOpen) { if ( pCurve == nullptr) return false ; + if ( pbSomeOpen != nullptr) + *pbSomeOpen = false ; // reset proprietà temporanee ResetCurveAllTempProp( pCurve) ; - // verifico se presenti info per lati aperti - if ( ! m_pGeomDB->ExistsInfo( nCrvId, KEY_OPEN)) + // se forzato chiuso o non presenti info per lati aperti, esco + if ( bForcedClose || ! m_pGeomDB->ExistsInfo( nCrvId, KEY_OPEN)) return true ; // recupero info sui lati aperti INTVECTOR vOpen ; @@ -1264,13 +1266,20 @@ Pocketing::SetCurveAllTempProp( int nCrvId, ICurve* pCurve) // se curva composita ICurveComposite* pCC = GetCurveComposite( pCurve) ; if ( pCC != nullptr) { - for ( int j : vOpen) - pCC->SetCurveTempProp( j, 1) ; + for ( int j : vOpen) { + if ( pCC->SetCurveTempProp( j, 1)) { + if ( pbSomeOpen != nullptr) + *pbSomeOpen = true ; + } + } } // altrimenti else { - if ( ! vOpen.empty() && vOpen[0] == 0) + if ( ! vOpen.empty() && vOpen[0] == 0) { pCurve->SetTempProp( 1) ; + if ( pbSomeOpen != nullptr) + *pbSomeOpen = true ; + } } return true ; } @@ -1450,20 +1459,8 @@ Pocketing::ProcessPath( int nPathId, int nPvId, int nClId) pCompo->SetCurveTempProp( i, 0) ; // verifico se vanno gestiti i lati aperti - bool bSomeOpen = m_pGeomDB->ExistsInfo( nCrvId, KEY_OPEN) ; - if ( bSomeOpen) { - int nOpen ; - if ( FromString( ExtractInfo( m_Params.m_sUserNotes, "Open="), nOpen) && nOpen == 0) - bSomeOpen = false ; - } - - // aggiorno flag per lati aperti - if ( bSomeOpen) { - INTVECTOR vOpen ; - m_pGeomDB->GetInfo( nCrvId, KEY_OPEN, vOpen) ; - for ( int j : vOpen) - pCompo->SetCurveTempProp( j, 1) ; - } + bool bSomeOpen ; + SetCurveAllTempProp( nCrvId, GetForcedClosed(), pCompo, &bSomeOpen) ; // recupero estrusione e spessore Vector3d vtExtr = Z_AX ; @@ -2574,7 +2571,7 @@ Pocketing::OptimizedZigZag( int nPathId, const Vector3d& vtTool, double dDepth, if ( IsNull( pCrvPocket)) return false ; pCrvPocket->ToLoc( frPocket) ; - SetCurveAllTempProp( nCrvId, pCrvPocket) ; + SetCurveAllTempProp( nCrvId, GetForcedClosed(), pCrvPocket) ; pCrvPocket->MergeCurves( 10 * EPS_SMALL, 10 * EPS_ANG_SMALL) ; // sistemo senso antiorario visto dalla direzione di estrusione Vector3d vtPocket; pCrvPocket->GetExtrusion( vtPocket) ; @@ -3831,7 +3828,8 @@ Pocketing::CalcSpiral( const ICurveComposite* pCompo, int nReg, bool bSplitArcs, PtrOwner pCrvPocket( CloneCurveComposite( m_pGeomDB->GetGeoObj( nCrvId))) ; if ( IsNull( pCrvPocket)) return false ; - SetCurveAllTempProp( nCrvId, pCrvPocket) ; + bool bSomeOpen ; + SetCurveAllTempProp( nCrvId, GetForcedClosed(), pCrvPocket, &bSomeOpen) ; pCrvPocket->MergeCurves( 10 * EPS_SMALL, 10 * EPS_ANG_SMALL) ; Point3d pt ; @@ -3849,7 +3847,7 @@ Pocketing::CalcSpiral( const ICurveComposite* pCompo, int nReg, bool bSplitArcs, double dPocketSize = vtOrtho.Len() ; double dMaxOptSize ; FromString( ExtractInfo( m_Params.m_sUserNotes, "MaxOptSize="), dMaxOptSize) ; - if ( dPocketSize < m_TParams.m_dDiam + EPS_SMALL && + if ( ( ( bSomeOpen && dPocketSize < m_TParams.m_dDiam + EPS_SMALL) || abs( dPocketSize - m_TParams.m_dDiam) < EPS_SMALL) && ( ! FromString( ExtractInfo( m_Params.m_sUserNotes, "MaxOptSize="), dMaxOptSize) || dPocketSize < dMaxOptSize)) { if ( nReg == 0) { CalcTrapezoidSpiral( pCrvPocket, vtDir, dPocketSize, pMCrv, pRCrv, bOptimizedTrap) ; @@ -5448,6 +5446,17 @@ Pocketing::GetRadiusForStartEndElevation( void) const return ( 0.5 * m_TParams.m_dTDiam + dDeltaRad) ; } +//---------------------------------------------------------------------------- +bool +Pocketing::GetForcedClosed( void) +{ + int nOpen ; + if ( FromString( ExtractInfo( m_Params.m_sUserNotes, "Open="), nOpen) && nOpen == 0) + return true ; + else + return false ; +} + //---------------------------------------------------------------------------- bool Pocketing::GetMidOfLongestOpenSide( const ICurveComposite* pCompo, Point3d& ptMid, Vector3d& vtMidOrt) diff --git a/Pocketing.h b/Pocketing.h index db36135..c62df12 100644 --- a/Pocketing.h +++ b/Pocketing.h @@ -68,7 +68,7 @@ class Pocketing : public Machining private : bool VerifyGeometry( SelData Id, int& nSubs, int& nType) ; bool GetCurves( SelData Id, ICURVEPLIST& lstPC) ; - bool SetCurveAllTempProp( int nCrvId, ICurve* pCurve) ; + bool SetCurveAllTempProp( int nCrvId, bool bForcedClose, ICurve* pCurve, bool* pbSomeOpen = nullptr) ; bool ResetCurveAllTempProp( ICurve* pCurve) ; bool Chain( int nGrpDestId) ; bool ProcessPath( int nPathId, int nPvId, int nClId) ; @@ -135,6 +135,7 @@ class Pocketing : public Machining const ICurveComposite* pRCrv, bool bSplitArcs, bool bNoneForced, Point3d& ptP1, double& dElev, bool& bOppositeHome) ; double GetRadiusForStartEndElevation( void) const ; + bool GetForcedClosed( void) ; bool GetMidOfLongestOpenSide( const ICurveComposite* pCompo, Point3d& ptMid, Vector3d& vtMidOut) ; bool AdjustContourWithOpenEdges( ICurveComposite* pCompo) ; bool AdjustContourStart( ICurveComposite* pCompo) ;