From 0ff791c8c287c6ee2402df69aed173ae7b39e382 Mon Sep 17 00:00:00 2001 From: Dario Sassi Date: Thu, 19 Dec 2019 17:00:37 +0000 Subject: [PATCH] =?UTF-8?q?EgtMachkernel=20:=20-=20in=20fresatura=20corret?= =?UTF-8?q?to=20riconoscimento=20se=20inizio=20attacco=20=C3=A8=20sopra=20?= =?UTF-8?q?il=20grezzo.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Milling.cpp | 33 ++++++++++++++++++++------------- Milling.h | 2 +- 2 files changed, 21 insertions(+), 14 deletions(-) diff --git a/Milling.cpp b/Milling.cpp index 880b8c1..9439ab6 100644 --- a/Milling.cpp +++ b/Milling.cpp @@ -2097,7 +2097,7 @@ Milling::AddStandardMilling( const ICurveComposite* pCompo, const Vector3d& vtTo // determino se l'inizio dell'attacco è fuori dal grezzo bool bOutStart = GetPointOutOfRaw( ptP1, vtTool, dElev) ; // determino se l'inizio dell'attacco è sopra il grezzo - bool bAboveStart = m_bAboveHead && GetPointAboveRaw( ptP1) ; + bool bAboveStart = m_bAboveHead && GetPointAboveRaw( ptP1, vtTool) ; // determino se l'inizio dell'attacco è esattamente sotto il grezzo, nel qual caso ricalcolo l'elevazione bool bUnderStart = m_bAboveHead && GetPointUnderRaw( ptP1, vtTool, dStElev) ; // imposto versore correzione e ausiliario sul punto di partenza @@ -2197,7 +2197,7 @@ Milling::AddStandardMilling( const ICurveComposite* pCompo, const Vector3d& vtTo else dEndElev -= ( ptP1 - ptEnd) * vtTool ; // determino se la fine dell'uscita è sopra il grezzo - bool bAboveEnd = m_bAboveHead && GetPointAboveRaw( ptP1) ; + bool bAboveEnd = m_bAboveHead && GetPointAboveRaw( ptP1, vtTool) ; // aggiungo retrazione if ( ! AddRetract( ptP1, vtTool, dSafeZ, dSafeAggrBottZ, dEndElev, dAppr, bAboveEnd)) { m_pMchMgr->SetLastError( 2312, "Error in Milling : Retract not computable") ; @@ -2271,7 +2271,7 @@ Milling::AddZigZagMilling( const ICurveComposite* pCompo, const Vector3d& vtTool // determino se l'inizio dell'attacco è fuori dal grezzo bool bOutStart = GetPointOutOfRaw( ptP1, vtTool, dElev) ; // determino se l'inizio dell'attacco è sopra il grezzo - bool bAboveStart = m_bAboveHead && GetPointAboveRaw( ptP1) ; + bool bAboveStart = m_bAboveHead && GetPointAboveRaw( ptP1, vtTool) ; // determino se l'inizio dell'attacco è esattamente sotto il grezzo, nel qual caso ricalcolo l'elevazione if ( j == 1) bool bUnderStart = m_bAboveHead && GetPointUnderRaw( ptP1, vtTool, dStElev) ; @@ -2386,7 +2386,7 @@ Milling::AddZigZagMilling( const ICurveComposite* pCompo, const Vector3d& vtTool else dEndElev -= ( ptP1 - ptEnd) * vtTool ; // determino se la fine dell'uscita è sopra il grezzo - bool bAboveEnd = m_bAboveHead && GetPointAboveRaw( ptP1) ; + bool bAboveEnd = m_bAboveHead && GetPointAboveRaw( ptP1, vtTool) ; // aggiungo retrazione if ( ! AddRetract( ptP1, vtTool, dSafeZ, dSafeAggrBottZ, dEndElev, dAppr, bAboveEnd)) { m_pMchMgr->SetLastError( 2312, "Error in Milling : Retract not computable") ; @@ -2444,7 +2444,7 @@ Milling::AddOneWayMilling( const ICurveComposite* pCompo, const Vector3d& vtTool Point3d ptEnd ; pCompo->GetEndPoint( ptEnd) ; ptEnd -= vtTool * dDepth ; - bool bAboveStartEnd = m_bAboveHead && GetPointAboveRaw( ptStart) && GetPointAboveRaw( ptEnd) ; + bool bAboveStartEnd = m_bAboveHead && GetPointAboveRaw( ptStart, vtTool) && GetPointAboveRaw( ptEnd, vtTool) ; // determino numero e affondamento degli step int nStep = max( 1, static_cast( ceil( dElev / dOkStep))) ; @@ -2676,7 +2676,7 @@ Milling::AddSpiralMilling( const ICurveComposite* pCompo, const Vector3d& vtTool // determino se l'inizio dell'attacco è fuori dal grezzo bool bOutStart = GetPointOutOfRaw( ptP1, vtTool, dElev) ; // determino se l'inizio dell'attacco è sopra il grezzo - bool bAboveStart = m_bAboveHead && GetPointAboveRaw( ptP1) ; + bool bAboveStart = m_bAboveHead && GetPointAboveRaw( ptP1, vtTool) ; // determino se l'inizio dell'attacco è esattamente sotto il grezzo, nel qual caso ricalcolo l'elevazione bool bUnderStart = m_bAboveHead && GetPointUnderRaw( ptP1, vtTool, dStElev) ; // imposto versore correzione e ausiliario sul punto di partenza @@ -2783,7 +2783,7 @@ Milling::AddSpiralMilling( const ICurveComposite* pCompo, const Vector3d& vtTool else dEndElev -= ( ptP1 - ptEnd) * vtTool ; // determino se la fine dell'uscita è sopra il grezzo - bool bAboveEnd = m_bAboveHead && GetPointAboveRaw( ptP1) ; + bool bAboveEnd = m_bAboveHead && GetPointAboveRaw( ptP1, vtTool) ; // aggiungo retrazione if ( ! AddRetract( ptP1, vtTool, dSafeZ, dSafeAggrBottZ, dEndElev, dAppr, bAboveEnd)) { m_pMchMgr->SetLastError( 2312, "Error in Milling : Retract not computable") ; @@ -2849,7 +2849,7 @@ Milling::AddSpiralMilling( const ICurveComposite* pCompo, const Vector3d& vtTool // determino se l'inizio dell'attacco è fuori dal grezzo bool bOutStart = GetPointOutOfRaw( ptP1, vtTool, dElev) ; // determino se l'inizio dell'attacco è sopra il grezzo - bool bAboveStart = m_bAboveHead && GetPointAboveRaw( ptP1) ; + bool bAboveStart = m_bAboveHead && GetPointAboveRaw( ptP1, vtTool) ; // determino se l'inizio dell'attacco è esattamente sotto il grezzo, nel qual caso ricalcolo l'elevazione bool bUnderStart = m_bAboveHead && GetPointUnderRaw( ptP1, vtTool, dStElev) ; // approccio al punto iniziale @@ -2942,7 +2942,7 @@ Milling::AddSpiralMilling( const ICurveComposite* pCompo, const Vector3d& vtTool else dEndElev -= ( ptP1 - ptEnd) * vtTool ; // determino se la fine dell'uscita è sopra il grezzo - bool bAboveEnd = m_bAboveHead && GetPointAboveRaw( ptP1) ; + bool bAboveEnd = m_bAboveHead && GetPointAboveRaw( ptP1, vtTool) ; // aggiungo retrazione if ( ! AddRetract( ptP1, vtTool, dSafeZ, dSafeAggrBottZ, dEndElev, dAppr, bAboveEnd)) { m_pMchMgr->SetLastError( 2312, "Error in Milling : Retract not computable") ; @@ -3053,7 +3053,7 @@ Milling::AddSawZigZagMilling( const ICurveComposite* pCompo, const Vector3d& vtT // determino se l'inizio dell'attacco è fuori dal grezzo bool bOutStart = GetPointOutOfRaw( ptP1, vtTool, dElev) ; // determino se l'inizio dell'attacco è sopra il grezzo - bool bAboveStart = m_bAboveHead && GetPointAboveRaw( ptP1) ; + bool bAboveStart = m_bAboveHead && GetPointAboveRaw( ptP1, vtTool) ; // imposto versore correzione e ausiliario sul punto di partenza CalcAndSetCorrAuxDir( pCompo, ( bInvert ? nMaxInd - i + 1 : i)) ; // se primo step @@ -4056,9 +4056,13 @@ Milling::GetPointOutOfRaw( const Point3d& ptP, const Vector3d& vtTool, double dE //---------------------------------------------------------------------------- bool -Milling::GetPointAboveRaw( const Point3d& ptP) const +Milling::GetPointAboveRaw( const Point3d& ptP, const Vector3d& vtTool) const { - // determino la posizione del punto rispetto al grezzo + // derivo punti più bassi dell'utensile + Vector3d vtDown = - FromUprightOrtho( vtTool) ; + Point3d ptP1 = ptP + vtDown * 0.5 * m_TParams.m_dTDiam ; + Point3d ptP2 = ptP1 + vtTool * ((( m_TParams.m_nType & TF_SAWBLADE) == 0) ? m_TParams.m_dLen : m_TParams.m_dThick) ; + // determino la posizione dei punti rispetto al grezzo // ciclo sui grezzi int nRawId = m_pMchMgr->GetFirstRawPart() ; while ( nRawId != GDB_ID_NULL) { @@ -4067,8 +4071,11 @@ Milling::GetPointAboveRaw( const Point3d& ptP) const int nStmId = m_pGeomDB->GetFirstNameInGroup( nRawId, MACH_RAW_SOLID) ; BBox3d b3Raw ; m_pGeomDB->GetGlobalBBox( nStmId, b3Raw) ; - if ( ! b3Raw.IsEmpty() && ptP.z < b3Raw.GetMax().z + 10 * EPS_SMALL) + if ( ! b3Raw.IsEmpty()) { + if ( ptP1.z < b3Raw.GetMax().z + 10 * EPS_SMALL || + ptP2.z < b3Raw.GetMax().z + 10 * EPS_SMALL) return false ; + } } nRawId = m_pMchMgr->GetNextRawPart( nRawId) ; } diff --git a/Milling.h b/Milling.h index 31af612..7edfab7 100644 --- a/Milling.h +++ b/Milling.h @@ -104,7 +104,7 @@ class Milling : public Machining bool AddOscillArc( const ICurveArc* pArc, const Vector3d& vtTool, double dRampLen, double dFlatLen) ; double GetRadiusForStartEndElevation( void) const ; bool GetPointOutOfRaw( const Point3d& ptP, const Vector3d& vtTool, double dElev) const ; - bool GetPointAboveRaw( const Point3d& ptP) const ; + bool GetPointAboveRaw( const Point3d& ptP, const Vector3d& vtTool) const ; bool GetPointUnderRaw( const Point3d& ptP, const Vector3d& vtTool, double& dElev) const ; bool CalcAndSetCorrAuxDir( const ICurveComposite* pCompo, double dU) ; Vector3d CalcCorrDir( const ICurveComposite* pCompo, double dU) ;