From b951536dfbbbb249acec08e71c4e042d37759364 Mon Sep 17 00:00:00 2001 From: SaraP Date: Tue, 17 Sep 2024 10:43:51 +0200 Subject: [PATCH] =?UTF-8?q?EgtMachKernel=20:=20-=20in=20svuotature=20a=20s?= =?UTF-8?q?pirale=20corretti=20i=20casi=20in=20cui=20il=20valore=20dell'of?= =?UTF-8?q?fset=20=C3=A8=20pari=20al=20valore=20limite=20per=20la=20curva.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Pocketing.cpp | 212 ++++++++++++++++++++++++++------------------------ 1 file changed, 111 insertions(+), 101 deletions(-) diff --git a/Pocketing.cpp b/Pocketing.cpp index 37239fd..26858d9 100644 --- a/Pocketing.cpp +++ b/Pocketing.cpp @@ -501,15 +501,15 @@ Pocketing::SetParam( int nType, const string& sVal) bool Pocketing::SetGeometry( const SELVECTOR& vIds) { - // verifico validità gestore DB geometrico + // verifico validità gestore DB geometrico if ( m_pGeomDB == nullptr) return false ; // reset della geometria corrente m_vId.clear() ; - // verifico che gli identificativi rappresentino delle entità ammissibili (tutte curve o tutte facce) + // verifico che gli identificativi rappresentino delle entità ammissibili (tutte curve o tutte facce) int nType = GEO_NONE ; for ( const auto& Id : vIds) { - // test sull'entità + // test sull'entità int nSubs ; if ( ! VerifyGeometry( Id, nSubs, nType)) { string sInfo = "Warning in Pocketing : Skipped entity " + ToString( Id) ; @@ -532,14 +532,14 @@ Pocketing::Preview( bool bRecalc) // reset numero percorsi di svuotatura generati m_nPockets = 0 ; - // verifico validità gestore DB geometrico e Id del gruppo + // verifico validità gestore DB geometrico e Id del gruppo if ( m_pGeomDB == nullptr || ! m_pGeomDB->ExistsObj( m_nOwnerId)) return false ; // recupero gruppo per geometria ausiliaria int nAuxId = m_pGeomDB->GetFirstNameInGroup( m_nOwnerId, MCH_AUX) ; bool bChain = false ; - // se non c'è, lo aggiungo + // se non c'è, lo aggiungo if ( nAuxId == GDB_ID_NULL) { nAuxId = m_pGeomDB->AddGroup( GDB_ID_NULL, m_nOwnerId, Frame3d()) ; if ( nAuxId == GDB_ID_NULL) @@ -582,7 +582,7 @@ Pocketing::Preview( bool bRecalc) // recupero gruppo per geometria di Preview int nPvId = m_pGeomDB->GetFirstNameInGroup( m_nOwnerId, MCH_PV) ; - // se non c'è, lo aggiungo + // se non c'è, lo aggiungo if ( nPvId == GDB_ID_NULL) { nPvId = m_pGeomDB->AddGroup( GDB_ID_NULL, m_nOwnerId, Frame3d()) ; if ( nPvId == GDB_ID_NULL) @@ -615,7 +615,7 @@ Pocketing::Apply( bool bRecalc, bool bPostApply) // reset raggio massimo attacco ad elica nel caso di cerchi m_dMaxHelixRad = INFINITO ; - // verifico validità gestore DB geometrico e Id del gruppo + // verifico validità gestore DB geometrico e Id del gruppo if ( m_pGeomDB == nullptr || ! m_pGeomDB->ExistsObj( m_nOwnerId)) return false ; @@ -644,7 +644,7 @@ Pocketing::Apply( bool bRecalc, bool bPostApply) // recupero gruppo per geometria ausiliaria int nAuxId = m_pGeomDB->GetFirstNameInGroup( m_nOwnerId, MCH_AUX) ; bool bChain = false ; - // se non c'è, lo aggiungo + // se non c'è, lo aggiungo if ( nAuxId == GDB_ID_NULL) { nAuxId = m_pGeomDB->AddGroup( GDB_ID_NULL, m_nOwnerId, Frame3d()) ; if ( nAuxId == GDB_ID_NULL) @@ -675,7 +675,7 @@ Pocketing::Apply( bool bRecalc, bool bPostApply) // recupero gruppo per geometria di lavorazione (Cutter Location) int nClId = m_pGeomDB->GetFirstNameInGroup( m_nOwnerId, MCH_CL) ; - // se non c'è, lo aggiungo + // se non c'è, lo aggiungo if ( nClId == GDB_ID_NULL) { nClId = m_pGeomDB->AddGroup( GDB_ID_NULL, m_nOwnerId, Frame3d()) ; if ( nClId == GDB_ID_NULL) @@ -737,7 +737,7 @@ Pocketing::Apply( bool bRecalc, bool bPostApply) bool Pocketing::Update( bool bPostApply) { - // verifico validità gestore DB geometrico e Id del gruppo + // verifico validità gestore DB geometrico e Id del gruppo if ( m_pGeomDB == nullptr || ! m_pGeomDB->ExistsObj( m_nOwnerId)) return false ; @@ -747,7 +747,7 @@ Pocketing::Update( bool bPostApply) return true ; } - // elimino le entità CLIMB, RISE e HOME della lavorazione, potrebbero falsare i calcoli degli assi (in ogni casi vengono riaggiunte dopo) + // elimino le entità CLIMB, RISE e HOME della lavorazione, potrebbero falsare i calcoli degli assi (in ogni casi vengono riaggiunte dopo) RemoveClimbRiseHome() ; // imposto eventuale asse bloccato da lavorazione @@ -994,7 +994,7 @@ Pocketing::UpdateToolData( bool* pbChanged) bool Pocketing::GetGeometry( SELVECTOR& vIds) const { - // restituisco l'elenco delle entità + // restituisco l'elenco delle entità vIds = m_vId ; return true ; } @@ -1007,7 +1007,7 @@ Pocketing::VerifyGeometry( SelData Id, int& nSubs, int& nType) const IGeoObj* pGObj = m_pGeomDB->GetGeoObj( Id.nId) ; if ( pGObj == nullptr) return false ; - // se ammesse curve ed è tale + // se ammesse curve ed è tale if ( ( nType == GEO_NONE || nType == GEO_CURVE) && ( pGObj->GetType() & GEO_CURVE) != 0) { nType = GEO_CURVE ; const ICurve* pCurve = nullptr ; @@ -1031,7 +1031,7 @@ Pocketing::VerifyGeometry( SelData Id, int& nSubs, int& nType) } return true ; } - // se altrimenti ammessi testi ed è tale + // se altrimenti ammessi testi ed è tale else if ( ( nType == GEO_NONE || nType == EXT_TEXT) && pGObj->GetType() == EXT_TEXT) { nType = EXT_TEXT ; const IExtText* pText = ::GetExtText( pGObj) ; @@ -1040,7 +1040,7 @@ Pocketing::VerifyGeometry( SelData Id, int& nSubs, int& nType) nSubs = 0 ; return true ; } - // se altrimenti ammesse superfici trimesh ed è tale + // se altrimenti ammesse superfici trimesh ed è tale else if ( ( nType == GEO_NONE || nType == SRF_TRIMESH) && pGObj->GetType() == SRF_TRIMESH) { nType = SRF_TRIMESH ; const ISurfTriMesh* pSurf = ::GetSurfTriMesh( pGObj) ; @@ -1062,7 +1062,7 @@ Pocketing::VerifyGeometry( SelData Id, int& nSubs, int& nType) } return true ; } - // se altrimenti ammesse regioni ed è tale + // se altrimenti ammesse regioni ed è tale else if ( ( nType == GEO_NONE || nType == SRF_FLATRGN) && pGObj->GetType() == SRF_FLATRGN) { nType = SRF_FLATRGN ; const ISurfFlatRegion* pReg = ::GetSurfFlatRegion( pGObj) ; @@ -1129,7 +1129,7 @@ Pocketing::GetCurves( SelData Id, ICURVEPLIST& lstPC) return false ; // la duplico pCurve.Set( pOriCurve->Clone()) ; - // reset proprietà temporanee + // reset proprietà temporanee ResetCurveAllTempProp( pCurve) ; // recupero estrusione e spessore Vector3d vtExtr ; @@ -1157,7 +1157,7 @@ Pocketing::GetCurves( SelData Id, ICURVEPLIST& lstPC) // recupero l'outline del testo if ( ! pText->GetOutline( lstPC)) return false ; - // reset proprietà temporanee + // reset proprietà temporanee for ( auto pCrv : lstPC) ResetCurveAllTempProp( pCrv) ; // porto le curve in globale @@ -1184,16 +1184,16 @@ Pocketing::GetCurves( SelData Id, ICURVEPLIST& lstPC) pCrvCompo->FromPolyLine( vPL[0]) ; if ( ! pCrvCompo->IsValid()) return false ; - // reset proprietà temporanee + // reset proprietà temporanee ResetCurveAllTempProp( pCrvCompo) ; - // determino eventuali lati aperti e aggiorno proprietà del contorno + // determino eventuali lati aperti e aggiorno proprietà del contorno int nInd = 0 ; double dPar ; bool bFound = vPL[0].GetFirstU( dPar, true) ; while ( bFound) { // recupero il flag int nFlag = int( dPar) ; - // se non c'è nulla di adiacente, lato aperto + // se non c'è nulla di adiacente, lato aperto if ( nFlag == SVT_NULL) pCrvCompo->SetCurveTempProp( nInd, 1) ; // altrimenti verifico se la faccia adiacente forma diedro convesso o concavo @@ -1250,7 +1250,7 @@ Pocketing::GetCurves( SelData Id, ICURVEPLIST& lstPC) PtrOwner pCrvCompo ; if ( ! pCrvCompo.Set( ConvertCurveToComposite( pReg->GetLoop( nC, nL)))) return false ; - // reset proprietà temporanee + // reset proprietà temporanee ResetCurveAllTempProp( pCrvCompo) ; // assegno l'estrusione dalla normale alla regione pCrvCompo->SetExtrusion( vtN) ; @@ -1279,7 +1279,7 @@ Pocketing::SetCurveAllTempProp( int nCrvId, bool bForcedClose, ICurve* pCurve, b return false ; if ( pbSomeOpen != nullptr) *pbSomeOpen = false ; - // reset proprietà temporanee + // reset proprietà temporanee ResetCurveAllTempProp( pCurve) ; // se forzato chiuso o non presenti info per lati aperti, esco if ( bForcedClose || ! m_pGeomDB->ExistsInfo( nCrvId, KEY_OPEN)) @@ -1448,7 +1448,7 @@ Pocketing::ProcessPath( int nPathId, int nPvId, int nClId) // recupero gruppo per geometria temporanea const string GRP_TEMP = "Temp" ; int nTempId = m_pGeomDB->GetFirstNameInGroup( m_nOwnerId, GRP_TEMP) ; - // se non c'è, lo aggiungo + // se non c'è, lo aggiungo if ( nTempId == GDB_ID_NULL) { nTempId = m_pGeomDB->AddGroup( GDB_ID_NULL, m_nOwnerId, Frame3d()) ; if ( nTempId == GDB_ID_NULL) @@ -1530,7 +1530,7 @@ Pocketing::ProcessPath( int nPathId, int nPvId, int nClId) Point3d ptMidOpen ; Vector3d vtMidOut ; if ( bSomeOpen) { - // ricerca del punto medio del lato aperto più lungo + // ricerca del punto medio del lato aperto più lungo bMidOpen = GetMidOfLongestOpenSide( pCompo, ptMidOpen, vtMidOut) ; // sistemazioni per eventuali lati aperti if ( ! AdjustContourWithOpenEdges( pCompo)) { @@ -1539,7 +1539,7 @@ Pocketing::ProcessPath( int nPathId, int nPvId, int nClId) } } - // sposto l'inizio a metà del tratto più lungo ( o aperto più lungo) + // sposto l'inizio a metà del tratto più lungo ( o aperto più lungo) if ( bMidOpen) { const double LEN_OUT = 5 ; double dPar ; int nFlag ; @@ -1623,7 +1623,7 @@ Pocketing::ProcessPath( int nPathId, int nPvId, int nClId) } // verifico di non superare il massimo materiale - // se lo step supera la capacità dell'utensile + // se lo step supera la capacità dell'utensile if ( m_Params.m_dStep > m_TParams.m_dMaxMat + EPS_SMALL) { dOkStep = m_TParams.m_dMaxMat + EPS_SMALL ; string sInfo = "Warning in Pocketing : machining step (" + ToString( m_Params.m_dStep, 1) + @@ -1632,7 +1632,7 @@ Pocketing::ProcessPath( int nPathId, int nPvId, int nClId) } // se lavorazione singola if ( dOkStep < EPS_SMALL || dOkStep > dElev) { - // se l'elevazione supera la capacità dell'utensile + // se l'elevazione supera la capacità dell'utensile if ( dElev > m_TParams.m_dMaxMat + EPS_SMALL) { string sInfo = "Warning in Pocketing : machining depth (" + ToString( dElev, 1) + ") bigger than MaxMaterial (" + ToString( m_TParams.m_dMaxMat, 1) + ")" ; @@ -1830,10 +1830,10 @@ Pocketing::CalcRegionElevation( const ICurveComposite* pCompo, const Vector3d& v bool Pocketing::VerifyPathFromBottom( const ICurveComposite* pCompo, const Vector3d& vtTool) { - // se non è svuotatura dal basso in alto, esco + // se non è svuotatura dal basso in alto, esco if ( vtTool.z > MIN_ZDIR_TOP_TOOL) return true ; - // se c'è testa non dall'alto o tavola basculante, esco + // se c'è testa non dall'alto o tavola basculante, esco if ( ! m_bAboveHead || m_bTiltingTab) return true ; // recupero dati di eventuale rinvio da sotto @@ -1855,7 +1855,7 @@ Pocketing::VerifyPathFromBottom( const ICurveComposite* pCompo, const Vector3d& ! vtCurrDir.IsSmallXY()) { if ( dCurrDist < dMinDist - 10 * EPS_SMALL && find_if( vDir.begin(), vDir.end(), [&](const Vector3d& vtV){ return vtCurrDir * vtV > cos( 15 * DEGTORAD) ; }) == vDir.end()) { - // inserisco la direzione tra quelle già esplorate + // inserisco la direzione tra quelle già esplorate vDir.emplace_back( vtCurrDir) ; // determino la distanza di tutti gli altri punti dal contorno del grezzo lungo questa direzione for ( double dPar2 = dParS ; dPar2 < dParE + EPS_PARAM ; dPar2 += 0.5) { @@ -1867,7 +1867,7 @@ Pocketing::VerifyPathFromBottom( const ICurveComposite* pCompo, const Vector3d& dCurrDist = dQDist ; } } - // se la massima distanza trovata è inferiore al minimo, lo aggiorno + // se la massima distanza trovata è inferiore al minimo, lo aggiorno if ( dCurrDist < dMinDist) { dMinDist = dCurrDist ; vtMinDir = vtCurrDir ; @@ -2008,7 +2008,7 @@ Pocketing::AddZigZag( const ICurveComposite* pCompo, const Vector3d& vtTool, con vpCrvs[0]->ExtendStartByLen( m_TParams.m_dDiam / 2 - dOptZigZagOffs + dSafeZ) ; } - // se non ottimizzato e utensile che non lavora di testa poichè ingresso non fuori dal pezzo, errore + // se non ottimizzato e utensile che non lavora di testa poichè ingresso non fuori dal pezzo, errore if ( ( ! bOptimizedZigZag || ! ( bOutRawLeadIn || m_bOpenOutRaw)) && m_TParams.m_nType == TT_MILL_NOTIP) { if ( ! LeadInRawIsOk()) { m_pMchMgr->SetLastError( 2431, "Error in Pocketing : LeadIn with Mill NoTip in material") ; @@ -2106,9 +2106,9 @@ Pocketing::AddZigZag( const ICurveComposite* pCompo, const Vector3d& vtTool, con pCurve->ToGlob( frPocket) ; // aggiungo affondamento pCurve->Translate( - vtTool * ( dDepth - dElev + j * dStep)) ; - // se prima entità + // se prima entità if ( i == 0 ) { - // dati inizio entità + // dati inizio entità Point3d ptStart ; pCurve->GetStartPoint( ptStart) ; Vector3d vtStart ; @@ -2180,9 +2180,9 @@ Pocketing::AddZigZag( const ICurveComposite* pCompo, const Vector3d& vtTool, con if ( AddArcMove( ptP3, ptCen, dAngCen, vtN) == GDB_ID_NULL) return false ; } - // se ultima entità + // se ultima entità if ( i == nMaxInd) { - // dati fine entità + // dati fine entità Point3d ptEnd ; pCurve->GetEndPoint( ptEnd) ; Vector3d vtEnd ; @@ -2251,7 +2251,7 @@ Pocketing::AddZigZag( const ICurveComposite* pCompo, const Vector3d& vtTool, con if ( m_Params.m_bInvert) pOffs2->Invert() ; - // sposto l'inizio a metà del tratto più lungo + // sposto l'inizio a metà del tratto più lungo AdjustContourStart( pOffs2) ; // aggiungo la lavorazione di questa curva @@ -2268,9 +2268,9 @@ Pocketing::AddZigZag( const ICurveComposite* pCompo, const Vector3d& vtTool, con return false ; // aggiungo affondamento pCurve->Translate( - vtTool * ( dDepth - dElev + j * dStep)) ; - // se prima entità + // se prima entità if ( i == 0 ) { - // dati inizio entità + // dati inizio entità Point3d ptStart ; pCurve->GetStartPoint( ptStart) ; Vector3d vtStart ; @@ -2342,11 +2342,11 @@ Pocketing::AddZigZag( const ICurveComposite* pCompo, const Vector3d& vtTool, con if ( AddArcMove( ptP3, ptCen, dAngCen, vtN) == GDB_ID_NULL) return false ; } - // se ultima entità + // se ultima entità if ( i == nMaxInd) { // se ultimo step, uscita e retrazione di collegamento if ( j == nStep) { - // dati fine entità + // dati fine entità Point3d ptEnd ; pCurve->GetEndPoint( ptEnd) ; Vector3d vtEnd ; @@ -2659,7 +2659,7 @@ Pocketing::OptimizedZigZag( int nPathId, const Vector3d& vtTool, double dDepth, ptTest.ToGlob( frPocket) ; ptTest += - vtTool * dDepth ; double dTestElev ; - // se è nel grezzo provo a ruotare di 90 gradi + // se è nel grezzo provo a ruotare di 90 gradi if ( GetElevation( m_nPhase, ptTest, vtTool, m_TParams.m_dDiam / 2 - dOffs, vtTool, dTestElev) && dTestElev > EPS_SMALL) { Vector3d vtDirO = vtDir ; vtDirO.Rotate( Z_AX, ( m_Params.m_bInvert ? -90 : 90)) ; @@ -2667,7 +2667,7 @@ Pocketing::OptimizedZigZag( int nPathId, const Vector3d& vtTool, double dDepth, ptTestO.ToGlob( frPocket) ; ptTestO += - vtTool * dDepth ; double dTestElevO ; - // se è fuori dal grezzo uso inizio ruotato + // se è fuori dal grezzo uso inizio ruotato if ( ! GetElevation( m_nPhase, ptTestO, vtTool, m_TParams.m_dDiam / 2 - dOffs, vtTool, dTestElevO) || dTestElevO < EPS_SMALL) { Point3d ptNewStart = ptStart + vtDirO ; vpCrvs[0]->AddLine( ptNewStart, false) ; @@ -2703,7 +2703,7 @@ Pocketing::OptimizedZigZag( int nPathId, const Vector3d& vtTool, double dDepth, bool Pocketing::ZigZagOptimizedNoClosedEdges( ICurveComposite* pCrvPocket, bool& bOptimizedZigZag, Vector3d& vtDir, double& dOffs) { - // individuo il segmento di retta più lungo + // individuo il segmento di retta più lungo int nMax = -1 ; double dMaxLen = 0 ; for ( int i = 0 ; i < int( pCrvPocket->GetCurveCount()) ; ++ i) { @@ -2751,7 +2751,7 @@ Pocketing::ZigZagOptimizedOneClosedEdge( ICurveComposite* pCrvPocket, int nClose pCrv->ExtendStartByLen( 300) ; pCrv->ExtendEndByLen( 300) ; - // sarà la prima curva del percorso + // sarà la prima curva del percorso if ( ! CutCurveWithLine( pCrvPocket, pCrv)) return false ; @@ -2797,7 +2797,7 @@ Pocketing::ZigZagOptimizedTwoClosedEdges( ICurveComposite* pCrvPocket, const INT pCrv1->SetExtrusion( vtExtr) ; pCrv2->SetExtrusion( vtExtr) ; - // determino la curva chiusa più lunga + // determino la curva chiusa più lunga double dLen1 ; pCrv1->GetLength( dLen1) ; double dLen2 ; pCrv2->GetLength( dLen2) ; @@ -2822,7 +2822,7 @@ Pocketing::ZigZagOptimizedTwoClosedEdges( ICurveComposite* pCrvPocket, const INT if ( ! CutCurveWithLine( pCrvPocket, pCrv1)) return false ; - // sarà la prima curva del percorso + // sarà la prima curva del percorso pCrv2->SimpleOffset( -dMyOffs) ; pCrv2->ExtendStartByLen( 300) ; pCrv2->ExtendEndByLen( 300) ; @@ -2910,7 +2910,7 @@ Pocketing::ZigZagOptimizedThreeClosedEdges( ICurveComposite* pCrvPocket, const I if ( ! CutCurveWithLine( pCrvPocket, pCrv3)) return false ; - // sarà la prima curva del percorso + // sarà la prima curva del percorso pCrv2->SimpleOffset( -dMyOffs) ; pCrv2->ExtendStartByLen( 300) ; pCrv2->ExtendEndByLen( 300) ; @@ -2926,7 +2926,7 @@ Pocketing::ZigZagOptimizedThreeClosedEdges( ICurveComposite* pCrvPocket, const I Pocketing::ZigZagOptimizedComputeOffset( ICurveComposite* pCrvPocket, const Vector3d& vtMainDir, int nOffsettedEdgesOnY, const INTVECTOR& vnClosedIds, double& dOffs) { - // calcolo il side step che verrà utilizzato in CalcZigZag + // calcolo il side step che verrà utilizzato in CalcZigZag Frame3d frLoc ; if ( ! frLoc.Set( ORIG, Z_AX, vtMainDir)) return true ; @@ -3048,7 +3048,7 @@ Pocketing::AddOneWay( const ICurveComposite* pCompo, const Vector3d& vtTool, con // lunghezza di approccio/retrazione double dAppr = m_Params.m_dStartPos ; - // se utensile che non lavora di testa poichè ingresso non fuori dal pezzo, errore + // se utensile che non lavora di testa poichè ingresso non fuori dal pezzo, errore if ( m_TParams.m_nType == TT_MILL_NOTIP) { if ( ! LeadInRawIsOk()) { m_pMchMgr->SetLastError( 2431, "Error in Pocketing : LeadIn with Mill NoTip in material") ; @@ -3084,7 +3084,7 @@ Pocketing::AddOneWay( const ICurveComposite* pCompo, const Vector3d& vtTool, con if ( m_Params.m_bInvert) pOffs->Invert() ; - // sposto l'inizio a metà del tratto più lungo + // sposto l'inizio a metà del tratto più lungo AdjustContourStart( pOffs) ; // se necessario, approssimo con rette @@ -3115,9 +3115,9 @@ Pocketing::AddOneWay( const ICurveComposite* pCompo, const Vector3d& vtTool, con return false ; // aggiungo affondamento pCurve->Translate( - vtTool * ( dDepth - dElev + j * dStep)) ; - // se prima entità + // se prima entità if ( i == 0 ) { - // dati inizio entità + // dati inizio entità Point3d ptStart ; pCurve->GetStartPoint( ptStart) ; Vector3d vtStart ; @@ -3188,11 +3188,11 @@ Pocketing::AddOneWay( const ICurveComposite* pCompo, const Vector3d& vtTool, con if ( AddArcMove( ptP3, ptCen, dAngCen, vtN) == GDB_ID_NULL) return false ; } - // se ultima entità + // se ultima entità if ( i == nMaxInd) { // se ultimo step, uscita e retrazione di collegamento if ( j == nStep) { - // dati fine entità + // dati fine entità Point3d ptEnd ; pCurve->GetEndPoint( ptEnd) ; Vector3d vtEnd ; @@ -3465,9 +3465,9 @@ Pocketing::AddSpiralIn( const ICurveComposite* pCompo, const Vector3d& vtTool, c return false ; // aggiungo affondamento pCurve->Translate( - vtTool * ( dDepth - dElev + j * dStep)) ; - // se prima entità + // se prima entità if ( i == 0 ) { - // dati inizio entità + // dati inizio entità Point3d ptStart ; pCurve->GetStartPoint( ptStart) ; Vector3d vtStart ; @@ -3477,7 +3477,7 @@ Pocketing::AddSpiralIn( const ICurveComposite* pCompo, const Vector3d& vtTool, c // determino inizio attacco if ( ! CalcLeadInStart( ptStart, vtStart, vtExtr, pRCrv, ptP1)) return false ; - // determino elevazione su inizio attacco (se non trovata, elevazione è step) + // determino elevazione su inizio attacco (se non trovata, elevazione è step) double dStElev ; if ( ! GetElevation( m_nPhase, ptStart - 10 * EPS_SMALL * vtTool, vtTool, GetRadiusForStartEndElevation(), vtTool, dStElev)) dStElev = dStep ; @@ -3538,7 +3538,7 @@ Pocketing::AddSpiralIn( const ICurveComposite* pCompo, const Vector3d& vtTool, c if ( AddArcMove( ptP3, ptCen, dAngCen, vtN) == GDB_ID_NULL) return false ; } - // se ultima entità + // se ultima entità if ( i == nMaxInd) { // se step intermedio, ritorno all'inizio direttamente if ( j < nStep) { @@ -3566,7 +3566,7 @@ Pocketing::AddSpiralIn( const ICurveComposite* pCompo, const Vector3d& vtTool, c } // atrimenti ultimo step, uscita e retrazione else { - // dati fine entità + // dati fine entità Point3d ptEnd ; pCurve->GetEndPoint( ptEnd) ; Vector3d vtEnd ; @@ -3661,7 +3661,7 @@ Pocketing::AddSpiralOut( const ICurveComposite* pCompo, const Vector3d& vtTool, } } - // inverto i percorsi, perchè sono calcolati dall'esterno all'interno (solo nel caso non ottimizzato) + // inverto i percorsi, perchè sono calcolati dall'esterno all'interno (solo nel caso non ottimizzato) if ( ! bOptimizedTrap) { pMCrv->Invert() ; pRCrv->Invert() ; @@ -3691,9 +3691,9 @@ Pocketing::AddSpiralOut( const ICurveComposite* pCompo, const Vector3d& vtTool, return false ; // aggiungo affondamento pCurve->Translate( -vtTool * ( dDepth - dElev + j * dStep)) ; - // se prima entità + // se prima entità if ( i == 0 ) { - // dati inizio entità + // dati inizio entità Point3d ptStart ; pCurve->GetStartPoint( ptStart) ; Vector3d vtStart ; @@ -3766,7 +3766,7 @@ Pocketing::AddSpiralOut( const ICurveComposite* pCompo, const Vector3d& vtTool, if ( AddArcMove( ptP3, ptCen, dAngCen, vtN) == GDB_ID_NULL) return false ; } - // se ultima entità + // se ultima entità if ( i == nMaxInd) { // se step intermedio if ( j < nStep) { @@ -3794,7 +3794,7 @@ Pocketing::AddSpiralOut( const ICurveComposite* pCompo, const Vector3d& vtTool, } // atrimenti ultimo step, uscita e retrazione else { - // dati fine entità + // dati fine entità Point3d ptEnd ; pCurve->GetEndPoint( ptEnd) ; Vector3d vtEnd ; @@ -3892,6 +3892,16 @@ Pocketing::CalcSpiral( const ICurveComposite* pCompo, int nReg, bool bSplitArcs, PtrOwner pOffs ; double dCurrRad = GetCurveRadius( pCompo) ; while ( nIter < MAX_ITER) { + // se l'offset richiesto è pari al valore limite per la curva ne modifico leggermente il valore per evitare problemi con + // le tolleranze di vroni + double dMaxOffs ; + if ( nIter == 0) + CalcCurveLimitOffset( *pCompo, dMaxOffs) ; + else + CalcCurveLimitOffset( *pOffs, dMaxOffs) ; + if ( abs( dMaxOffs - dOffs) < EPS_SMALL) + dOffs -= EPS_SMALL ; + // calcolo OffsetCurve OffsCrv ; if ( ! OffsCrv.Make( ( nIter == 0 ? (ICurve*) pCompo : pOffs), - dOffs, ICurve::OFF_FILLET) || @@ -4003,7 +4013,7 @@ Pocketing::CalcSpiral( const ICurveComposite* pCompo, int nReg, bool bSplitArcs, int nCrvsCount0 = pMCrv->GetCurveCount() ; // accodo nel percorso di lavorazione pMCrv->AddCurve( Release( vLinks[i])) ; - // nel caso di lucidatura setto proprietà alle curve di collegamento per poterle identificare + // nel caso di lucidatura setto proprietà alle curve di collegamento per poterle identificare if ( m_TParams.m_nType == TT_MILL_POLISHING) { for ( int j = nCrvsCount0 ; j < pMCrv->GetCurveCount() ; j ++) pMCrv->SetCurveTempProp( j, LINK_CURVE_PROP) ; @@ -4063,7 +4073,7 @@ Pocketing::CalcBoundedLink( const Point3d& ptStart, const Point3d& ptEnd, const CRVCVECTOR ccClass ; IntersCurveCurve intCC( *LineLoc, *CrvOutLoc) ; intCC.GetCurveClassification( 0, EPS_SMALL, ccClass) ; - // se nessuno o un solo tratto e interno, la retta è il collegamento + // se nessuno o un solo tratto e interno, la retta è il collegamento if ( ccClass.empty() || ( ccClass.size() == 1 && ccClass[0].nClass == CRVC_IN)) { pCrvLink->AddCurve( Release( pLine)) ; return true ; @@ -4085,7 +4095,7 @@ Pocketing::CalcBoundedLink( const Point3d& ptStart, const Point3d& ptEnd, const pLine->GetPointD1D2( ccClass[j].dParE, ICurve::FROM_MINUS, ptE) ; double dOffE ; pCrvBound->GetParamAtPoint( ptE, dOffE) ; - // recupero i due possibili percorsi e uso il più corto + // recupero i due possibili percorsi e uso il più corto PtrOwner pCrvA( pCrvBound->CopyParamRange( dOffS, dOffE)) ; PtrOwner pCrvB( pCrvBound->CopyParamRange( dOffE, dOffS)) ; if ( IsNull( pCrvA) || IsNull( pCrvB)) @@ -4122,7 +4132,7 @@ Pocketing::CalcBoundedLinkWithBiArcs( const Point3d& ptStart, const Vector3d& vt CRVCVECTOR ccClass ; IntersCurveCurve intCC( *pBiArcLink, *pCrvBound) ; intCC.GetCurveClassification( 0, EPS_SMALL, ccClass) ; - // se nessuno o un solo tratto e interno, il biarco è il collegamento + // se nessuno o un solo tratto e interno, il biarco è il collegamento if ( ccClass.empty() || ( ccClass.size() == 1 && ccClass[0].nClass == CRVC_IN)) { pCrvLink->AddCurve( Release( pBiArcLink)) ; } @@ -4301,7 +4311,7 @@ Pocketing::CalcTrapezoidSpiral( ICurveComposite* pCrvPocket, const Vector3d& vtD double dMaxLarg = b3Dim.GetDimY() ; // calcolo percorso di svuotatura - // se lati obliqui sono entrambi chiusi e dimensione svuotatura è maggiore di diametro fresa e minore del doppio gestione speciale + // se lati obliqui sono entrambi chiusi e dimensione svuotatura è maggiore di diametro fresa e minore del doppio gestione speciale if ( vnProp[0] != 0 && vnProp[2] != 0 && vnProp[3] == 0 && vnProp[1] == 0 && dMaxLarg > m_TParams.m_dDiam + 10 * EPS_SMALL && max( dLen0, dLen2) < 2 * m_TParams.m_dDiam + EPS_SMALL) { if ( ! SpecialAdjustTrapezoidSpiralForAngles( pMCrv, pCrvPocket)) { @@ -4314,7 +4324,7 @@ Pocketing::CalcTrapezoidSpiral( ICurveComposite* pCrvPocket, const Vector3d& vtD if ( vnProp[0] != 0) dYCoord -= GetOffsR() ; if ( vnProp[0] != 0 && vnProp[2] != 0) - dYCoord = 0.5 * dPocketSize ; // se entrambi i lati paralleli sono aperti mi posiziono a metà della svuotatura + dYCoord = 0.5 * dPocketSize ; // se entrambi i lati paralleli sono aperti mi posiziono a metà della svuotatura double dXCoordStart, dXCoordEnd ; if ( ! CalcTrapezoidSpiralXCoord( pCrvPocket, true, dYCoord, dXCoordStart, dPocketSize)) @@ -4330,7 +4340,7 @@ Pocketing::CalcTrapezoidSpiral( ICurveComposite* pCrvPocket, const Vector3d& vtD Vector3d vtDir1, vtDir3 ; pCrvPocket->GetCurve( 1)->GetStartDir( vtDir1) ; pCrvPocket->GetCurve( 3)->GetStartDir( vtDir3) ; - // gestisco il caso speciale di un parallelogramma in cui anche l'altra dimensione della svuotatura è pari al diametro utensile + // gestisco il caso speciale di un parallelogramma in cui anche l'altra dimensione della svuotatura è pari al diametro utensile if ( AreOppositeVectorApprox( vtDir1, vtDir3)) { PtrOwner pLine1( GetCurveLine( pCrvPocket->GetCurve( 1)->Clone())) ; PtrOwner pLine3( GetCurveLine( pCrvPocket->GetCurve( 3)->Clone())) ; @@ -4385,7 +4395,7 @@ Pocketing::CalcTrapezoidSpiral( ICurveComposite* pCrvPocket, const Vector3d& vtD pMCrv->ToGlob( frLoc) ; if ( ! m_Params.m_bInvert) { pMCrv->Invert() ; - // inverto le proprietà in modo che nProp3 sia sempre legata al punto iniziale e nProp1 a quello finale + // inverto le proprietà in modo che nProp3 sia sempre legata al punto iniziale e nProp1 a quello finale swap( vnProp[1], vnProp[3]) ; } // segno i lati aperti come temp prop della curva @@ -4540,7 +4550,7 @@ Pocketing::AdjustTrapezoidSpiralForAngles( ICurveComposite* pMCrv, const ICurveC pMCrv->TrimStartAtParam( dPar) ; if ( ptP1.y > dPocketSize) { - // se ptP1 è esterno alla svuotatura scambio i punti in modo da usare ptP2 per il biarco ( così da non farlo fuoriuscire troppo) + // se ptP1 è esterno alla svuotatura scambio i punti in modo da usare ptP2 per il biarco ( così da non farlo fuoriuscire troppo) swap( ptP1, ptP2) ; pCompo->Invert() ; } @@ -4569,9 +4579,9 @@ Pocketing::AdjustTrapezoidSpiralForAngles( ICurveComposite* pMCrv, const ICurveC } } - // caso 2 : pLine è completamente sopra/sotto la linea di svuotatura + // caso 2 : pLine è completamente sopra/sotto la linea di svuotatura else { - // se è sopra modifiche per ricondurmi al caso in cui è sotto + // se è sopra modifiche per ricondurmi al caso in cui è sotto if ( ptP2.y > dYCoord) { pLine->Invert() ; swap( ptP1, ptP2) ; @@ -4598,7 +4608,7 @@ Pocketing::AdjustTrapezoidSpiralForAngles( ICurveComposite* pMCrv, const ICurveC } } - // se il lato opposto a quello di riferimento è chiuso bisogna distinguere i casi + // se il lato opposto a quello di riferimento è chiuso bisogna distinguere i casi else { bool bStartPnt = false ; if ( ptP2.y < dYCoord) { @@ -4620,7 +4630,7 @@ Pocketing::AdjustTrapezoidSpiralForAngles( ICurveComposite* pMCrv, const ICurveC } } - // setto temp prop per ricordare che è curva aggiuntiva per pulire angoli + // setto temp prop per ricordare che è curva aggiuntiva per pulire angoli for ( int i = 0 ; i < pCompo->GetCurveCount() ; i++) pCompo->SetCurveTempProp( i, 1) ; @@ -4687,7 +4697,7 @@ Pocketing::SpecialAdjustTrapezoidSpiralForAngles( ICurveComposite* pMCrv, const } } - // se non è stato possibile creare raccordo, unisco linearmente + // se non è stato possibile creare raccordo, unisco linearmente if ( ! bUseBiArcs) pMCrv->AddCurve( Release( pLineLink)) ; @@ -4711,7 +4721,7 @@ Pocketing::AdjustTrapezoidSpiralForLeadInLeadOut( ICurveComposite* pCompo, ICurv for ( int i = 0 ; i < pCompo->GetCurveCount() ; i++) { int nProp ; if ( pCompo->GetCurveTempProp( i, nProp) && nProp == 0) { - // se non è lato aggiuntivo per la pulitura angoli recupero la sua direzione + // se non è lato aggiuntivo per la pulitura angoli recupero la sua direzione pCompo->GetCurve( i)->GetStartDir( vtMainDir) ; break ; } @@ -4773,7 +4783,7 @@ Pocketing::ComputeTrapezoidSpiralLeadInLeadOut( ICurveComposite* pCompo, const V double dSafeZ = GetSafeZ() ; - // tento con allungamento se lato inclinato è aperto oppure se sto considerando un lato aggiuntivo per pulire angoli + // tento con allungamento se lato inclinato è aperto oppure se sto considerando un lato aggiuntivo per pulire angoli if ( bEdgeOpen || nExtraEdge == 1) { Vector3d vtDirP = ( bLeadIn ? -vtDir : vtDir) ; @@ -4814,7 +4824,7 @@ Pocketing::ComputeTrapezoidSpiralLeadInLeadOut( ICurveComposite* pCompo, const V Point3d ptTest = ptP + vtDirP * ( dDist + ( m_TParams.m_dDiam / 2 + max( dSafeZ, m_dOpenMinSafe)) * dCorr) ; ptTest += - vtTool * dDepth ; double dTestElev ; - // se è fuori dal grezzo + // se è fuori dal grezzo if ( ! GetElevation( m_nPhase, ptTest, vtTool, m_TParams.m_dDiam / 2, vtTool, dTestElev) || dTestElev < EPS_SMALL) { Point3d ptNewStart = ptP + vtDirP * ( dDist + ( m_TParams.m_dDiam / 2 + max( dSafeZ, m_dOpenMinSafe)) * dCorr) ; pCompo->AddLine( ptNewStart, ! bLeadIn) ; @@ -4823,7 +4833,7 @@ Pocketing::ComputeTrapezoidSpiralLeadInLeadOut( ICurveComposite* pCompo, const V } } - // tento con attacco ruotato di 90° se non sto considerando un tratto aggiuntivo per pulire angoli + // tento con attacco ruotato di 90° se non sto considerando un tratto aggiuntivo per pulire angoli if ( bBaseOpen && ! bIsOutsideRaw && nExtraEdge == 0) { Vector3d vtDirO = vtDir ; @@ -4839,7 +4849,7 @@ Pocketing::ComputeTrapezoidSpiralLeadInLeadOut( ICurveComposite* pCompo, const V Point3d ptTestO = ptP + vtDirO * ( dDist + m_TParams.m_dDiam / 2 + max( dSafeZ, m_dOpenMinSafe)) ; ptTestO += - vtTool * dDepth ; double dTestElevO ; - // se è fuori dal grezzo uso inizio ruotato + // se è fuori dal grezzo uso inizio ruotato if ( ! GetElevation( m_nPhase, ptTestO, vtTool, m_TParams.m_dDiam / 2, vtTool, dTestElevO) || dTestElevO < EPS_SMALL) { Point3d ptNewStart = ptP + vtDirO * ( dDist + m_TParams.m_dDiam / 2 + max( dSafeZ, m_dOpenMinSafe)) ; pCompo->AddLine( ptNewStart, ! bLeadIn) ; @@ -4868,11 +4878,11 @@ Pocketing::ComputePolishingPath( ICurveComposite* pMCrv, ICurveComposite* pRCrv, if ( ! pMCrv->GetCurveTempProp( i, nProp)) return false ; - // se è un tratto di collegamento ho concluso percorso su cui aggiungere epicicli + // se è un tratto di collegamento ho concluso percorso su cui aggiungere epicicli if ( nProp == LINK_CURVE_PROP) { if ( pCompo->IsValid()) { PtrOwner pCrvEp( CreateCurveComposite()) ; - // la curva di bound è l'offset che calcolo in AddEpicycles per la prima curva compo trovata in pMCrv + // la curva di bound è l'offset che calcolo in AddEpicycles per la prima curva compo trovata in pMCrv bool bAddEp = ( ! pCrvBound->IsValid()) ? AddEpicycles( pCompo, pCrvEp, pCrvBound) : AddEpicycles( pCompo, pCrvEp) ; if ( ! bAddEp) return false ; @@ -4880,7 +4890,7 @@ Pocketing::ComputePolishingPath( ICurveComposite* pMCrv, ICurveComposite* pRCrv, pCompo.Set( CreateCurveComposite()) ; } } - // se non è tratto di collegamento lo aggiungo alla curva + // se non è tratto di collegamento lo aggiungo alla curva else { if ( ! pCompo->AddCurve( pMCrv->GetCurve(i)->Clone())) return false ; @@ -5052,7 +5062,7 @@ Pocketing::AddApproach( const Point3d& ptP, const Vector3d& vtTool, double dSafe // se con aggregato da sotto o equivalente (rinvio a 90 gradi su testa 5 assi) bool bBottomOutStart = false ; if ( m_bAggrBottom) { - // distanza dal bordo del pezzo (se negativa il punto è fuori dal grezzo) + // distanza dal bordo del pezzo (se negativa il punto è fuori dal grezzo) double dDistBottom ; if ( ! GetAggrBottDistanceFromRawSide( m_nPhase, ptP, m_vtAggrBottom, ( m_AggrBottom.dEncH + dSafeZ), dDistBottom)) dDistBottom = 0 ; @@ -5096,7 +5106,7 @@ Pocketing::AddApproach( const Point3d& ptP, const Vector3d& vtTool, double dSafe SetFlag( 0) ; } } - // se sopra attacco c'è spazio per sicurezza o approccio + // se sopra attacco c'è spazio per sicurezza o approccio double dSafeDist = ( m_bAggrBottom ? dSafeAggrBottZ : dSafeZ) ; if ( ! bBottomOutStart && dElev + max( dSafeDist, dAppr) > 10 * EPS_SMALL) { Point3d ptP1 = ptP + vtTool * ( dElev + dAppr) ; @@ -5141,7 +5151,7 @@ bool Pocketing::AddLinkApproach( const Point3d& ptP, const Vector3d& vtTool, double dSafeZ, double dSafeAggrBottZ, double dElev, double dAppr, bool bSplitArcs, bool bOutStart) { - // se sopra attacco c'è spazio per approccio + // se sopra attacco c'è spazio per approccio if ( ( dElev + dAppr) > 10 * EPS_SMALL) { // 1b -> punto appena sopra inizio Point3d ptP1b = ptP + vtTool * ( dElev + dAppr) ; @@ -5170,7 +5180,7 @@ bool Pocketing::AddLinkRetract( const Point3d& ptP, const Vector3d& vtTool, double dSafeZ, double dSafeAggrBottZ, double dElev, double dAppr, bool bSplitArcs) { - // se sopra uscita c'è spazio per approccio + // se sopra uscita c'è spazio per approccio if ( ( dElev + dAppr) > 10 * EPS_SMALL) { // 4 -> movimento di risalita sopra il punto finale SetFeed( GetEndFeed()) ; @@ -5195,7 +5205,7 @@ Pocketing::AddRetract( const Point3d& ptP, const Vector3d& vtTool, double dSafeZ dDistBottom = 0 ; bBottomOutStart = ( dDistBottom < - 10 * EPS_SMALL) ; } - // se sopra uscita c'è spazio per sicurezza o approccio + // se sopra uscita c'è spazio per sicurezza o approccio double dSafeDist = ( m_bAggrBottom ? dSafeAggrBottZ : dSafeZ) ; if ( ! bBottomOutStart && dElev + max( dSafeDist, dAppr) > 10 * EPS_SMALL) { if ( dSafeDist < dAppr + 10 * EPS_SMALL) { @@ -5509,7 +5519,7 @@ Pocketing::GetMidOfLongestOpenSide( const ICurveComposite* pCompo, Point3d& ptMi } pMyCrv = pCompo->GetNextCurve() ; } - // richiedo lunghezza superiore a diametro utensile più doppio offset radiale + // richiedo lunghezza superiore a diametro utensile più doppio offset radiale double dRefLen = ( bAllOpen ? 0 : m_TParams.m_dDiam + 2 * GetOffsR() - EPS_SMALL) ; double dMaxLen = dRefLen ; // ciclo sulle singole curve @@ -5530,7 +5540,7 @@ Pocketing::GetMidOfLongestOpenSide( const ICurveComposite* pCompo, Point3d& ptMi pNextCrv->GetLength( dLenNext) ; // verifico la curva corrente if ( pCrv->GetTempProp() == 1) { - // contributo dalle entità adiacenti (se non tutte aperte) + // contributo dalle entità adiacenti (se non tutte aperte) double dLenAgg = 0 ; if ( ! bAllOpen) { if ( pPrevCrv != nullptr && pPrevCrv->GetTempProp() == 1) { @@ -5544,7 +5554,7 @@ Pocketing::GetMidOfLongestOpenSide( const ICurveComposite* pCompo, Point3d& ptMi dLenAgg += max( 0.4, vtEnd * vtNextStart) * dLenNext ; } } - // entità corrente + // entità corrente double dLen = 0 ; if ( pCrv->GetLength( dLen)) { const double LEN_TOL = 1 ; @@ -5562,7 +5572,7 @@ Pocketing::GetMidOfLongestOpenSide( const ICurveComposite* pCompo, Point3d& ptMi vtMidOrt.Rotate( vtExtr, 0, -1) ; } } - // se più lunga + // se più lunga else if ( dLen + dLenAgg > dMaxLen) { dMaxLen = dLen + dLenAgg ; pCrv->GetMidPoint( ptMid) ; @@ -5594,14 +5604,14 @@ Pocketing::AdjustContourWithOpenEdges( ICurveComposite* pCompo) Frame3d frPocket ; Point3d ptStart ; pCompo->GetStartPoint( ptStart) ; frPocket.Set( ptStart, vtExtr) ; - // sposto l'inizio a metà del tratto più lungo + // sposto l'inizio a metà del tratto più lungo AdjustContourStart( pCompo) ; // raggio di riferimento per offset double dOutEdge = 0.5 * m_TParams.m_dDiam ; if ( m_Params.m_nSubType == POCKET_SUB_SPIRALIN || m_Params.m_nSubType == POCKET_SUB_ZIGZAG) dOutEdge = max( dOutEdge, m_TParams.m_dDiam - m_Params.m_dSideStep) ; double dRad = dOutEdge + GetOffsR() ; - // estraggo parti con proprietà uniforme in un vettore + // estraggo parti con proprietà uniforme in un vettore ICURVEPOVECTOR vpCrvs ; int nCurrTempProp ; int nParStart = 0 ; @@ -5750,7 +5760,7 @@ Pocketing::AdjustContourWithOpenEdges( ICurveComposite* pCompo) bool Pocketing::AdjustContourStart( ICurveComposite* pCompo) { - // cerco il tratto lineare più lungo che non sia aperto + // cerco il tratto lineare più lungo che non sia aperto int i = 0 ; int nMax = - 1 ; double dLenMax = 0 ; @@ -5764,7 +5774,7 @@ Pocketing::AdjustContourStart( ICurveComposite* pCompo) ++ i ; pCrv = pCompo->GetNextCurve() ; } - // se non trovato o troppo corto, cerco il tratto generico più lungo + // se non trovato o troppo corto, cerco il tratto generico più lungo if ( nMax < 0 || dLenMax < 1.25 * m_TParams.m_dDiam) { i = 0 ; pCrv = pCompo->GetFirstCurve() ;