From 52fa86e77e844360c0875f78022b20e38c8dba4b Mon Sep 17 00:00:00 2001 From: Dario Sassi Date: Mon, 25 Nov 2019 08:03:38 +0000 Subject: [PATCH] EgtMachKernel : - modifica a SplitFlatRawPartWithMachinings per ignorare eventuale errore ininfluente con Kerf - in tagli con lama su curve allontanate di poco dal pezzo le regioni di ingombro degli attacchi e uscite. --- MachMgrRawParts.cpp | 5 ++--- Sawing.cpp | 16 ++++++++++------ Sawing.h | 4 ++-- 3 files changed, 14 insertions(+), 11 deletions(-) diff --git a/MachMgrRawParts.cpp b/MachMgrRawParts.cpp index 428b7cf..98a5868 100644 --- a/MachMgrRawParts.cpp +++ b/MachMgrRawParts.cpp @@ -969,9 +969,8 @@ MachMgr::SplitFlatRawPartWithMachinings( int nRawId, const INTVECTOR& vMchId) PtrOwner pSfrNewKerf( SfrCntr.GetSurf()) ; if ( IsNull( pSfrNewKerf)) return GDB_ID_NULL ; - // la limito con la regione di kerf - if ( ! pSfrNewKerf->Intersect( *pSfrKerf)) - return GDB_ID_NULL ; + // la limito con la regione di kerf precedente (va bene anche se fallisce) + pSfrNewKerf->Intersect( *pSfrKerf) ; // se risultato non vuoto if ( pSfrNewKerf->IsValid()) { // riferimento del nuovo grezzo diff --git a/Sawing.cpp b/Sawing.cpp index 2a8b806..46e8006 100644 --- a/Sawing.cpp +++ b/Sawing.cpp @@ -2231,7 +2231,7 @@ Sawing::GenerateExtCurvePv( const ICurveComposite* pCrv, m_pGeomDB->SetMaterial( nId, LIME) ; // contorno per parte iniziale di taglio - PtrOwner pCompo2( GenerateExtArcPvPreCut( pArc, dIntRad, dExtRad, dDeltaT, 0)) ; + PtrOwner pCompo2( GenerateExtArcPvPreCut( pArc, dIntRad, dExtRad, dDeltaT, 0, 0)) ; if ( IsNull( pCompo2)) return false ; pCompo2->Translate( dElev * vtCorr) ; @@ -2240,7 +2240,7 @@ Sawing::GenerateExtCurvePv( const ICurveComposite* pCrv, m_pGeomDB->SetMaterial( nId2, ( bFirst ? BLUE : LIME)) ; // contorno per parte finale di taglio - PtrOwner pCompo3( GenerateExtArcPvPostCut( pArc, dIntRad, dExtRad, dDeltaT, 0)) ; + PtrOwner pCompo3( GenerateExtArcPvPostCut( pArc, dIntRad, dExtRad, dDeltaT, 0, 0)) ; if ( IsNull( pCompo3)) return false ; pCompo3->Translate( dElev * vtCorr) ; @@ -2263,7 +2263,7 @@ Sawing::GenerateExtCurvePv( const ICurveComposite* pCrv, m_pGeomDB->SetMaterial( nRrId, INVISIBLE) ; // regione di pre-taglio - PtrOwner pCmpRs( GenerateExtArcPvPreCut( pArc, dIntRad, dExtRad, dDeltaT, dExtraL)) ; + PtrOwner pCmpRs( GenerateExtArcPvPreCut( pArc, dIntRad, dExtRad, dDeltaT, 10 * EPS_SMALL, dExtraL)) ; if ( IsNull( pCmpRs)) return false ; SurfFlatRegionByContours SfrCntrRs ; @@ -2277,7 +2277,7 @@ Sawing::GenerateExtCurvePv( const ICurveComposite* pCrv, m_pGeomDB->SetMaterial( nRsId, INVISIBLE) ; // regione di post-taglio - PtrOwner pCmpRe( GenerateExtArcPvPostCut( pArc, dIntRad, dExtRad, dDeltaT, dExtraL)) ; + PtrOwner pCmpRe( GenerateExtArcPvPostCut( pArc, dIntRad, dExtRad, dDeltaT, 10 * EPS_SMALL, dExtraL)) ; if ( IsNull( pCmpRe)) return false ; SurfFlatRegionByContours SfrCntrRe ; @@ -2356,7 +2356,7 @@ Sawing::GenerateExtArcPvTrueCut( const ICurveArc* pArc, double dIntRad, double d //---------------------------------------------------------------------------- ICurveComposite* Sawing::GenerateExtArcPvPreCut( const ICurveArc* pArc, double dIntRad, double dExtRad, - double dDeltaT, double dSafety) + double dDeltaT, double dIntOffs, double dSafety) { // direzione iniziale del taglio Vector3d vtStaDir ; @@ -2368,6 +2368,8 @@ Sawing::GenerateExtArcPvPreCut( const ICurveArc* pArc, double dIntRad, double dE pArc->GetStartPoint( ptStart) ; if ( ! AreHeadWorkOnSameSide()) ptStart -= vtStaVer * m_TParams.m_dThick ; + if ( dIntOffs > EPS_SMALL) + ptStart += vtStaVer * dIntOffs ; // punto prima di inizio Point3d ptPre = ptStart - vtStaDir * dDeltaT ; // punto fuori prima di inizio @@ -2416,7 +2418,7 @@ Sawing::GenerateExtArcPvPreCut( const ICurveArc* pArc, double dIntRad, double dE //---------------------------------------------------------------------------- ICurveComposite* Sawing::GenerateExtArcPvPostCut( const ICurveArc* pArc, double dIntRad, double dExtRad, - double dDeltaT, double dSafety) + double dDeltaT, double dIntOffs, double dSafety) { // direzione finale del taglio Vector3d vtEndDir ; @@ -2428,6 +2430,8 @@ Sawing::GenerateExtArcPvPostCut( const ICurveArc* pArc, double dIntRad, double d vtEndVer.Normalize() ; if ( ! AreHeadWorkOnSameSide()) ptEnd -= vtEndVer * m_TParams.m_dThick ; + if ( dIntOffs > EPS_SMALL) + ptEnd += vtEndVer * dIntOffs ; // punto dopo fine Point3d ptPost = ptEnd + vtEndDir * dDeltaT ; // punto fuori dopo fine diff --git a/Sawing.h b/Sawing.h index fc03887..d4fb8b6 100644 --- a/Sawing.h +++ b/Sawing.h @@ -94,9 +94,9 @@ class Sawing : public Machining ICurveComposite* GenerateExtArcPvTrueCut( const ICurveArc* pArc, double dIntRad, double dExtRad, double dSafety) ; ICurveComposite* GenerateExtArcPvPreCut( const ICurveArc* pArc, double dIntRad, double dExtRad, - double dDeltaT, double dSafety) ; + double dDeltaT, double dIntOffs, double dSafety) ; ICurveComposite* GenerateExtArcPvPostCut( const ICurveArc* pArc, double dIntRad, double dExtRad, - double dDeltaT, double dSafety) ; + double dDeltaT, double dIntOffs, double dSafety) ; bool GenerateExtCurveCl( const ICurveComposite* pCrv, double dElev, double dExtraCut, const std::string& sName, int nClId) ; bool ProcessIntArc( const ICurve* pCrvP, const ICurveArc* pArcC, const ICurve* pCrvN,