From 71f3bf88093ffa599bb90afdadc0a9b1b8b68e89 Mon Sep 17 00:00:00 2001 From: Riccardo Elitropi Date: Mon, 22 Jul 2024 11:46:39 +0200 Subject: [PATCH] EgtMachKernel : - in calcPocketing, migliorata la gestione di superfici con isole sia aperte che chiuse, gestito caso di circonferenza tutta aperta e modifica del parametro MinSafe. --- CalcPocketing.cpp | 23 ++++++++++++++++++----- 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/CalcPocketing.cpp b/CalcPocketing.cpp index 43cdea4..86fb4b8 100644 --- a/CalcPocketing.cpp +++ b/CalcPocketing.cpp @@ -51,7 +51,7 @@ struct PocketParams { double dRadialOffset = 0. ; // offset radiale double dRadialOffset_prec = -1. ; // offset radiale precedente double dOpenEdgeRad = 0. ; // massimo raggio per estensione lati aperti - double dOpenMinSafe = 2. ; // estensione minima di sicurezza + double dOpenMinSafe = 5. ; // estensione minima di sicurezza double dMaxOptSize = 0. ; // dimensione per ottimizzazione double dAngle = 0. ; // angolo per orientare le passate OneWay e ZigZag bool bOptOffsets = true ; // flag per evitare Offset non necessari in SpiralIn/Out @@ -1858,7 +1858,7 @@ AdjustOpenCurves( ICRVCOMPOPOVECTOR& vCrvCompo, const PocketParams& PockParams, Point3d ptStart ; vCrvCompo[i]->GetStartPoint( ptStart) ; Vector3d vtStart ; vCrvCompo[i]->GetStartDir( vtStart) ; // recupero il punto di caduta dell'utensile - Point3d ptFall = ptStart - vtStart * ( 2 * PockParams.dRad + PockParams.dOpenMinSafe) ; + Point3d ptFall = ptStart - vtStart * ( PockParams.dRad + PockParams.dOpenMinSafe) ; // controllo che il tool non sia interno alla regione limite bool bAllowLeadIn = ( ! pSfrLimit->IsValid()) ; if ( ! bAllowLeadIn) { @@ -1872,7 +1872,7 @@ AdjustOpenCurves( ICRVCOMPOPOVECTOR& vCrvCompo, const PocketParams& PockParams, // se esiste intersezione con la limite Offsettata, provo a ruotare di 90° il tratto lineare if ( ! bAllowLeadIn) { vtStart.Rotate( Z_AX, PockParams.bInvert ? - ANG_RIGHT : ANG_RIGHT) ; - ptFall = ptStart + vtStart * ( 2 * PockParams.dRad + PockParams.dOpenMinSafe) ; + ptFall = ptStart + vtStart * ( PockParams.dRad + PockParams.dOpenMinSafe) ; if ( ! pCrvToolShape->Set( ptFall, Z_AX, PockParams.dRad - 100 * EPS_SMALL)) return false ; ccClass.clear() ; @@ -2208,8 +2208,13 @@ ModifySurfByOpenEdges( ISurfFlatRegion* pSfr, PocketParams& PockParams, ICRVCOMP if ( dMaxOffs < 2 * PockParams.dRad + 2 * PockParams.dRadialOffset) continue ; // altrimenti, estendo l'isola aperta - ICRVCOMPOPOVECTOR vCrvExtLoop ; vCrvExtLoop.emplace_back( pCrvEL->Clone()) ; - if ( ! AdjustContourWithOpenEdges( pCrvIsl, vCrvExtLoop, PockParams)) + ICRVCOMPOPOVECTOR vCrvOther ; + vCrvOther.emplace_back( pCrvEL->Clone()) ; + for ( int nII = 0 ; nII < int( vCrvIsl.size()) ; ++ nII) { + if ( nII != nI) + vCrvOther.emplace_back( vCrvIsl[nII]->Clone()) ; + } + if ( ! AdjustContourWithOpenEdges( pCrvIsl, vCrvOther, PockParams)) return false ; bIsChunkModified = true ; } @@ -6187,6 +6192,14 @@ CalcSpiral( const ISurfFlatRegion* pSrfPock, const PocketParams& PockParams, int bool bOk = CalcCircleSpiral( ptCen, vtN, dRad - dOffs, dIntRad, PockParams, pMCrv, pRCrv) ; if ( bOk) { pMCrv->GetStartPoint( ptStart) ; + for ( int u = 0 ; u < pCrvBorder->GetCurveCount() ; ++ u) { + if ( pCrvBorder->GetCurve( u)->GetTempProp( 0) == TEMP_PROP_OPEN_EDGE) { + bMidOut = true ; + pMCrv->GetStartDir( vtMidOut) ; + vtMidOut.Rotate( pSrfPock->GetNormVersor(), PockParams.bInvert ? ANG_RIGHT : - ANG_RIGHT) ; + break ; + } + } nReg = 1 ; return true ; }