From 5c1065538f3bc3ee397cd331e8cffcd113264091 Mon Sep 17 00:00:00 2001 From: Dario Sassi Date: Thu, 9 May 2019 08:31:15 +0000 Subject: [PATCH] EgtMachKernel : - correzioni e migliorie a sgrossature e finiture con lame di cornici. --- SawFinishing.cpp | 33 +++++++++++++++++++++++++++++---- SawRoughing.cpp | 5 +++-- 2 files changed, 32 insertions(+), 6 deletions(-) diff --git a/SawFinishing.cpp b/SawFinishing.cpp index d4543a1..227b334 100644 --- a/SawFinishing.cpp +++ b/SawFinishing.cpp @@ -2187,9 +2187,10 @@ SawFinishing::CalcCurvedAlongVerticalCuts( ICurve* pSect, int nUmin, int nUmax, Vector3d vtMove = ( dY - m_TParams.m_dThick / 2) * Z_AX ; OffsetCurve OffsCrv ; OffsCrv.Make( pGuide, dOffs, ICurve::OFF_FILLET) ; - PtrOwner pCut( OffsCrv.GetLongerCurve()) ; - if ( IsNull( pCut)) + PtrOwner pCut( CreateCurveComposite()) ; + if ( IsNull( pCut) || ! pCut->AddCurve( OffsCrv.GetLongerCurve())) return false ; + VerifyArcs( pCut) ; pCut->SimpleOffset( SAWRF_OFFS, ICurve::OFF_FORCE_OPEN) ; pCut->Translate( vtMove) ; Point3d ptStart ; pCut->GetStartPoint( ptStart) ; @@ -2261,9 +2262,10 @@ SawFinishing::CalcCurvedAlongStdCuts( ICurve* pSect, double dUmin, double dUmax, Vector3d vtMove = ( ptP.y - m_TParams.m_dThick / 2) * Z_AX ; OffsetCurve OffsCrv ; OffsCrv.Make( pGuide, dOffs, ICurve::OFF_FILLET) ; - PtrOwner pCut( OffsCrv.GetLongerCurve()) ; - if ( IsNull( pCut)) + PtrOwner pCut( CreateCurveComposite()) ; + if ( IsNull( pCut) || ! pCut->AddCurve( OffsCrv.GetLongerCurve())) return false ; + VerifyArcs( pCut) ; pCut->SimpleOffset( SAWRF_OFFS, ICurve::OFF_FORCE_OPEN) ; pCut->Translate( vtMove) ; Point3d ptStart ; pCut->GetStartPoint( ptStart) ; @@ -2364,6 +2366,29 @@ SawFinishing::CalcCurvedAlongZigZagCut( const ICurve* pCut, const Vector3d& vtTo if ( ! AddApproach( ptNewStart, vtOrtStart, dSafeZ, dOrtElevStart, dAppr)) return false ; } + else if ( m_Params.m_nLeadLinkType == SAWFIN_LL_STD) { + // recupero ultimo punto inserito + Point3d ptCurr ; + GetCurrPos( ptCurr) ; + // differenza tra corrente e nuovo lungo direzione ortogonale + double dOrtStartDiff = ( ptNewStart - ptCurr) * vtOrtStart ; + // se punto corrente pił fuori, aggiungo punto fuori allo stesso modo sul nuovo + if ( dOrtStartDiff < - 10 * EPS_SMALL) { + Point3d ptOut = ptNewStart + ( - dOrtStartDiff * vtOrtStart) ; + SetFlag( 0) ; + SetFeed( ( bVert ? GetVertFeed() : GetFeed())) ; + if ( ! SameAsCurrPos( ptOut) && AddLinearMove( ptOut) == GDB_ID_NULL) + return false ; + } + // se altrimenti pił dentro, aggiungo punto fuori allo stesso modo sul corrente + else if ( dOrtStartDiff > 10 * EPS_SMALL) { + Point3d ptOut = ptCurr + ( dOrtStartDiff * vtOrtStart) ; + SetFlag( 0) ; + SetFeed( ( bVert ? GetVertFeed() : GetFeed())) ; + if ( ! SameAsCurrPos( ptOut) && AddLinearMove( ptOut) == GDB_ID_NULL) + return false ; + } + } // 2 -> movimento in affondo al punto iniziale SetFlag( 0) ; // con attacco centrato sono sul materiale e devo usare feed di testa diff --git a/SawRoughing.cpp b/SawRoughing.cpp index 7f21eb5..e7a32ea 100644 --- a/SawRoughing.cpp +++ b/SawRoughing.cpp @@ -1295,9 +1295,10 @@ SawRoughing::CalculateCurvedToolPath( int nAuxId, int nClId) // creo la curva di taglio OffsetCurve OffsCrv ; OffsCrv.Make( pGuide, dX, ICurve::OFF_FILLET) ; - PtrOwner pCut( OffsCrv.GetLongerCurve()) ; - if ( IsNull( pCut)) + PtrOwner pCut( CreateCurveComposite()) ; + if ( IsNull( pCut) || ! pCut->AddCurve( OffsCrv.GetLongerCurve())) return false ; + VerifyArcs( pCut) ; Vector3d vtMove = ( dY - m_TParams.m_dThick / 2) * Z_AX ; pCut->Translate( vtMove) ; // ne determino la massima elevazione