From cb493b60ba8fcd181c8a742531df265c5fb49ac5 Mon Sep 17 00:00:00 2001 From: DarioS Date: Tue, 1 Sep 2026 09:19:30 +0200 Subject: [PATCH] EgtMachkernel : - in finitura superfici tipo proiezione uniformato calcolo direzione fresa da angoli a quello degli altri tipi. --- SurfFinishing.cpp | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/SurfFinishing.cpp b/SurfFinishing.cpp index e5bd68e..cc26225 100644 --- a/SurfFinishing.cpp +++ b/SurfFinishing.cpp @@ -1406,7 +1406,7 @@ SurfFinishing::UpdateFrameAndToolDir( int nAuxId, bool& bRecalc) bRecalc = true ; Frame3d FrOld = m_Frame ; - // se lavorazione con superficie + // se lavorazione con regione if ( m_Params.m_nSubType == SURFFIN_SUB_ZIGZAG || m_Params.m_nSubType == SURFFIN_SUB_ONEWAY || m_Params.m_nSubType == SURFFIN_SUB_SPIRALIN || m_Params.m_nSubType == SURFFIN_SUB_SPIRALOUT || m_Params.m_nSubType == SURFFIN_SUB_Z_CONST || m_Params.m_nSubType == SURFFIN_SUB_OPTIMAL || @@ -1414,7 +1414,7 @@ SurfFinishing::UpdateFrameAndToolDir( int nAuxId, bool& bRecalc) PtrOwner pSfr( nullptr) ; int nPathId = m_pGeomDB->GetFirstGroupInGroup( nAuxId) ; while ( nPathId != GDB_ID_NULL) { - // recupero la superficie + // recupero la regione int nSfrId = m_pGeomDB->GetFirstInGroup( nPathId) ; if ( m_pGeomDB->GetGeoType( nSfrId) != SRF_FLATRGN) return false ; @@ -1484,7 +1484,7 @@ SurfFinishing::UpdateFrameAndToolDir( int nAuxId, bool& bRecalc) Frame3d frLoc ; if ( ! frLoc.Set( ptCentroid, vtExtrusion)) return false ; - // recupero la PolyLine assocuata alla prima curva in locale al frame creato + // recupero la PolyLine associata alla prima curva in locale al frame creato PolyLine PLLoc ; if ( IsNull( vCrv[0]) || ! vCrv[0]->IsValid() || ! vCrv[0]->ApproxWithLines( EPS_SMALL, EPS_ANG_ZERO, ICurve::APL_SPECIAL, PLLoc) || @@ -1495,6 +1495,12 @@ SurfFinishing::UpdateFrameAndToolDir( int nAuxId, bool& bRecalc) double dDimX, dDimY ; if ( ! PLLoc.GetMinAreaRectangleXY( ptFrCenter, vtFrX, dDimX, dDimY)) return false ; + // oriento il frame in modo opportuno rispetto all'asse X + if ( vtFrX.x < - SQRT1_2) + vtFrX.Invert() ; + else if ( abs( vtFrX.x) < SQRT1_2 && vtFrX.y < - SQRT1_2) + vtFrX.Invert() ; + // definisco il frame ptFrCenter.ToGlob( frLoc) ; vtFrX.ToGlob( frLoc) ; if ( ! m_Frame.Set( ptFrCenter, vtExtrusion, vtFrX))