From 0095847b411bf75ec9ec73ddca8f9ff6675c2118 Mon Sep 17 00:00:00 2001 From: Dario Sassi Date: Wed, 4 Dec 2024 10:11:14 +0100 Subject: [PATCH] EgtMachKernel 2.6l2 : - modifiche a tagli con lama per eliminare approcci/retrazioni con attacco e uscita fuori grezzo e tipologia ToAndFrom - aggiunte gestione nuove costanti (SURFFIN_SUB_Z_CONST e SURFFIN_SUB_OPTIMAL) per tipo finitura superfici. --- EgtMachKernel.rc | Bin 11782 -> 11782 bytes GeoConst.h | 3 +++ Milling.cpp | 1 - Operation.cpp | 1 - Sawing.cpp | 42 ++++++++++++++++++++++++++++++++++-------- Sawing.h | 1 + SurfFinishingData.cpp | 3 ++- 7 files changed, 40 insertions(+), 11 deletions(-) diff --git a/EgtMachKernel.rc b/EgtMachKernel.rc index 99d26b7a6105c5a81f0325d242180c6527028aef..e64e2ead94a72bdc40aa88dbd72977bcd20b1cab 100644 GIT binary patch delta 97 zcmZpRX^YwLhmFx_^ItYwW=5mQj>5W|vxM9jH?QON0rG*u7nvrX5iEd9O=7{OSQ@Kh Hr8(RHP01iS delta 97 zcmZpRX^YwLhmFy2^ItYwW=6xwj>5W|vxM9jH?QON0rG*u7nvrX5iEd9O=7{OSQ@Kh Hr8(RHOf?`f diff --git a/GeoConst.h b/GeoConst.h index 4b3b058..f9667c7 100644 --- a/GeoConst.h +++ b/GeoConst.h @@ -16,6 +16,9 @@ //----------------- Costanti generali ---------------------------------------- #include "/EgtDev/Include/EGkGeoConst.h" +//----------- Minima distanza di sicurezza ---------------------------------- +const double MIN_SAFEDIST = 5.0 ; + //----------- Costanti per approssimazioni con polilinee o poliarchi -------- const double LIN_TOL_STD = 0.1 ; const double LIN_TOL_MID = 0.05 ; diff --git a/Milling.cpp b/Milling.cpp index 6574bda..ece3158 100644 --- a/Milling.cpp +++ b/Milling.cpp @@ -46,7 +46,6 @@ using namespace std ; //------------------------------ Constants ------------------------------------ const double OSC_MIN_LEN = 0.1 ; -const double MIN_SAFEDIST = 5.0 ; const double LIM_DOWN_APPRZ = -0.5 ; const double DELTA_ELEV_RAD = 4.0 ; const double LIM_SIN_DIFF_DIR = 0.175 ; diff --git a/Operation.cpp b/Operation.cpp index 18a6647..bb895f1 100644 --- a/Operation.cpp +++ b/Operation.cpp @@ -4172,7 +4172,6 @@ Operation::OneMoveTestCollisionAvoid( const STRVECTOR& vAxName, const DBLVECTOR& // distanza di sicurezza const double TOL_SAFEDIST = 5.0 ; - const double MIN_SAFEDIST = 5.0 ; double dSafeDist = GetSafeZ() ; dSafeDist = max( dSafeDist - TOL_SAFEDIST, MIN_SAFEDIST) ; // Vado nelle posizioni da controllare diff --git a/Sawing.cpp b/Sawing.cpp index 82c80c5..a54e82d 100644 --- a/Sawing.cpp +++ b/Sawing.cpp @@ -16,6 +16,7 @@ #include "MachMgr.h" #include "DllMain.h" #include "Sawing.h" +#include "GeoConst.h" #include "OperationConst.h" #include "/EgtDev/Include/EXeCmdLogOff.h" #include "/EgtDev/Include/EXeConst.h" @@ -98,6 +99,7 @@ Sawing::Clone( void) const pSaw->m_nPhase = m_nPhase ; pSaw->m_Params = m_Params ; pSaw->m_TParams = m_TParams ; + pSaw->m_bDownSE = m_bDownSE ; pSaw->m_nStatus = m_nStatus ; pSaw->m_nCuts = m_nCuts ; } @@ -211,6 +213,7 @@ Sawing::Sawing( void) m_Params.m_sToolName = "*" ; m_TParams.m_sName = "*" ; m_TParams.m_sHead = "*" ; + m_bDownSE = false ; m_nStatus = MCH_ST_TO_VERIFY ; m_nCuts = 0 ; } @@ -689,6 +692,11 @@ Sawing::Apply( bool bRecalc, bool bPostApply) if ( ! VerifySideAngle()) return false ; + // verifiche per attacchi/uscite senza approcci e retrazioni + int nDownSE = 0 ; + FromString( ExtractInfo( m_Params.m_sUserNotes, "DownSE="), nDownSE) ; + m_bDownSE = ( nDownSE != 0 && m_Params.m_nStepType == SAW_ST_TOANDFROM) ; + // recupero gruppo per geometria di lavorazione (Cutter Location) int nClId = m_pGeomDB->GetFirstNameInGroup( m_nOwnerId, MCH_CL) ; // se non c'è, lo aggiungo @@ -3822,8 +3830,16 @@ Sawing::GenerateIntArcCl( const ICurveArc* pArc, bool Sawing::AddApproach( const Point3d& ptP, const Vector3d& vtCorr, double dSafeZ, double dElev, double dAppr) { - // se distanza di sicurezza minore di distanza di inizio - if ( dSafeZ < m_Params.m_dStartPos + 10 * EPS_SMALL) { + // se abilitato approccio diretto fuori dal grezzo (solo per lavorazione ToAndFrom) + if ( m_bDownSE) { + // 1 -> punto sopra inizio + SetFlag( 1) ; + Point3d ptP1 = ptP + vtCorr * ( dElev / 2 + dAppr / vtCorr.z) ; + if ( AddRapidStart( ptP1) == GDB_ID_NULL) + return false ; + } + // se distanza di sicurezza minore di distanza di inizio + else if ( dSafeZ < m_Params.m_dStartPos + 10 * EPS_SMALL) { // 1 -> punto sopra inizio SetFlag( 1) ; Point3d ptP1 = ptP + vtCorr * ( dElev + dAppr / vtCorr.z) ; @@ -3849,7 +3865,17 @@ Sawing::AddApproach( const Point3d& ptP, const Vector3d& vtCorr, double dSafeZ, bool Sawing::AddRetract( const Point3d& ptP, const Vector3d& vtCorr, double dSafeZ, double dElev, double dAppr) { - if ( dSafeZ < m_Params.m_dStartPos + 10 * EPS_SMALL) { + // se abilitato retrazione diretta fuori dal grezzo (solo per lavorazione ToAndFrom) + if ( m_bDownSE) { + // 4 -> movimento di risalita sopra il punto finale + SetFeed( GetEndFeed()) ; + Point3d ptP4 = ptP + vtCorr * ( dElev / 2 + dAppr / vtCorr.z) ; + if ( AddRapidMove( ptP4) == GDB_ID_NULL) + return false ; + // elevazione da considerare nella retrazione + double dRtrElev = ( m_bDownSE ? 0 : dElev) ; + } + else if ( dSafeZ < m_Params.m_dStartPos + 10 * EPS_SMALL) { // 4 -> movimento di risalita sopra il punto finale SetFeed( GetEndFeed()) ; Point3d ptP4 = ptP + vtCorr * ( dElev + dAppr / vtCorr.z) ; @@ -3964,7 +3990,7 @@ Sawing::AdjustLineForEdges( ICurveLine* pLine, double dElev, const Vector3d& vtC bool& bToSkip, double& dDeltaLiExt, double& dDeltaLoExt) { // distanza XY tra centro e bordo taglio - double dDeltaT = (( dElev < 0.5 * m_TParams.m_dDiam) ? sqrt( dElev * m_TParams.m_dDiam - dElev * dElev) : 0) ; + double dDeltaT = (( dElev < 0.5 * m_TParams.m_dDiam) ? sqrt( dElev * m_TParams.m_dDiam - dElev * dElev) : 0.5 * m_TParams.m_dDiam) ; // lunghezza aggiuntiva per attacco speciale a zigzag double dDeltaLi = 0 ; if ( dLiElev > EPS_SMALL) @@ -4000,7 +4026,7 @@ Sawing::AdjustLineForEdges( ICurveLine* pLine, double dElev, const Vector3d& vtC for ( int i = 0 ; i < 4 ; ++i) dDeltaI = max( dDeltaI, dDist[i]) ; if ( m_Params.m_nLeadInType == SAW_LI_EXT_OUT) - dDeltaI += dDeltaT ; + dDeltaI += dDeltaT + ( m_bDownSE ? MIN_SAFEDIST : 0) ; dDeltaLiExt = dDeltaI ; } } @@ -4024,7 +4050,7 @@ Sawing::AdjustLineForEdges( ICurveLine* pLine, double dElev, const Vector3d& vtC for ( int i = 0 ; i < 4 ; ++i) dDeltaI = max( dDeltaI, dDist[i]) ; if ( m_Params.m_nLeadInType == SAW_LI_EXT_OUT) - dDeltaI += dDeltaT ; + dDeltaI += dDeltaT + ( m_bDownSE ? MIN_SAFEDIST : 0) ; dDeltaLiExt = dDeltaI ; } } @@ -4059,7 +4085,7 @@ Sawing::AdjustLineForEdges( ICurveLine* pLine, double dElev, const Vector3d& vtC for ( int i = 0 ; i < 4 ; ++i) dDeltaF = max( dDeltaF, dDist[i]) ; if ( m_Params.m_nLeadOutType == SAW_LO_EXT_OUT) - dDeltaF += dDeltaT ; + dDeltaF += dDeltaT + ( m_bDownSE ? MIN_SAFEDIST : 0) ; dDeltaLoExt = dDeltaF ; } } @@ -4084,7 +4110,7 @@ Sawing::AdjustLineForEdges( ICurveLine* pLine, double dElev, const Vector3d& vtC dDeltaF = max( dDeltaF, dDist[i]) ; // se LeadOut EXT_OUT vado all'esterno if ( m_Params.m_nLeadOutType == SAW_LO_EXT_OUT) - dDeltaF += dDeltaT ; + dDeltaF += dDeltaT + ( m_bDownSE ? MIN_SAFEDIST : 0) ; dDeltaLoExt = dDeltaF ; } } diff --git a/Sawing.h b/Sawing.h index 666efb8..a44fc58 100644 --- a/Sawing.h +++ b/Sawing.h @@ -164,6 +164,7 @@ class Sawing : public Machining SELVECTOR m_vId ; // identificativi entità geometriche da lavorare SawingData m_Params ; // parametri lavorazione ToolData m_TParams ; // parametri utensile + bool m_bDownSE ; // flag per attacco/uscita senza risalite se fuori dal grezzo int m_nStatus ; // stato di aggiornamento della lavorazione int m_nCuts ; // numero di tagli generati } ; diff --git a/SurfFinishingData.cpp b/SurfFinishingData.cpp index 8ac83d8..fac40bc 100644 --- a/SurfFinishingData.cpp +++ b/SurfFinishingData.cpp @@ -390,7 +390,8 @@ bool SurfFinishingData::VerifySubType( int nVal) const { return ( nVal == SURFFIN_SUB_ZIGZAG || nVal == SURFFIN_SUB_ONEWAY || - nVal == SURFFIN_SUB_SPIRALIN || nVal == SURFFIN_SUB_SPIRALOUT) ; + nVal == SURFFIN_SUB_SPIRALIN || nVal == SURFFIN_SUB_SPIRALOUT || + nVal == SURFFIN_SUB_Z_CONST || nVal == SURFFIN_SUB_OPTIMAL) ; } //----------------------------------------------------------------------------