From cfb8e0553d45f34e15f97f1ad9be595b57cf76c3 Mon Sep 17 00:00:00 2001 From: Riccardo Elitropi Date: Wed, 14 Jan 2026 10:20:10 +0100 Subject: [PATCH] EgtMachKernel : - in Sgrossature piccole migliore e semplificazioni. --- SurfRoughing.cpp | 39 ++++++++++++--------------------------- SurfRoughing.h | 14 ++++++-------- 2 files changed, 18 insertions(+), 35 deletions(-) diff --git a/SurfRoughing.cpp b/SurfRoughing.cpp index 6f27f34..ff7666b 100644 --- a/SurfRoughing.cpp +++ b/SurfRoughing.cpp @@ -1660,12 +1660,12 @@ SurfRoughing::ProcessPath( int nPathId, int nPvId, int nClId) // inserimento degli step ( ed eventuali PlaneZ se SubSteps non presenti) for ( int i = 0 ; i < nStep ; ++ i) { - vStepInfo.emplace_back( -1, - ( i + 1) * dStep, false, false, 1., nullptr, nullptr, nullptr) ; + vStepInfo.emplace_back( -1, - ( i + 1) * dStep, false, false, 1., nullptr, nullptr) ; // se non ho SubStep ma PlaneZ, inserisco i PlaneZ if ( nSubStep == -1) { for ( int j = 0 ; j < int( vPlaneZ.size()) ; ++ j) { if ( vPlaneZ[j].second > - ( i + 1) * dStep + STEP_TOL && vPlaneZ[j].second < - i * dStep - STEP_TOL) { - vStepInfo.emplace_back( i, vPlaneZ[j].second, false, true, -1., nullptr, nullptr, nullptr) ; + vStepInfo.emplace_back( i, vPlaneZ[j].second, false, true, -1., nullptr, nullptr) ; vStepInfo.back().pSfrPlaneZ = Release( vPlaneZ[j].first) ; } } @@ -1692,7 +1692,7 @@ SurfRoughing::ProcessPath( int nPathId, int nPvId, int nClId) int nMyInd = ( j == i - 1 ? nIndRef : int( vStepInfo.size()) - 1) ; bool bSS = ( vExtraStep[j].first == -1) ; vStepInfo.emplace_back( nMyInd, vExtraStep[j].second, bSS, ! bSS, - -1. , nullptr, nullptr, nullptr) ; + -1. , nullptr, nullptr) ; if ( ! bSS) vStepInfo.back().pSfrPlaneZ = Release( vPlaneZ[vExtraStep[j].first].first) ; } @@ -1870,21 +1870,6 @@ SurfRoughing::ProcessPath( int nPathId, int nPvId, int nClId) // aggiorno Regione piana per gestione lati aperti pSfrOpenClose->Subtract( *pSfrRemovedRef) ; } - - /* ******************** Regione di Corner ******************************** */ - // se presente una regione di Corner la aggiungo alla regione attuale da lavorare - // ( estendo quindi la regione ) - if ( vStepInfo[nIndRef].pSfrCorn != nullptr && vStepInfo[nIndRef].pSfrCorn->IsValid()) { - pSfr->Add( *vStepInfo[nIndRef].pSfrCorn) ; - // verifico sempre di non rovinare la regione di Silhouette e la regione al di fuori - // della curva di bordo di sgrossatura - if ( ! IsNull( pSfrOutCompo) && pSfrOutCompo->IsValid()) - pSfr->Subtract( *pSfrOutCompo) ; - if ( ! IsNull( pSfrSil) && pSfrSil->IsValid()) - pSfr->Subtract( *pSfrSil) ; - } - - } else if ( it->bPlaneZStep && ! IsNull( pSfrSil) && pSfrSil->IsValid()) { PtrOwner pSfrRef( CloneSurfFlatRegion( it->pSfrRemoved)) ; @@ -2021,8 +2006,11 @@ SurfRoughing::ProcessPath( int nPathId, int nPvId, int nClId) if ( bSfrCorner) { PtrOwner pSfrCorner( GetSfrCornerColl( pSfr, pSfrLimit, pSfrColl, pSfrSearchCorners)) ; if ( ! IsNull( pSfrCorner) && pSfrCorner->IsValid()) { - it->pSfrCorn = CreateSurfFlatRegion() ; - it->pSfrCorn->CopyFrom( pSfrCorner) ; + pSfr->Add( *pSfrCorner) ; + if ( ! ChooseCloseOrOpenEdge( pSfr, pSfrOpenClose)) { + m_pMchMgr->SetLastError( 3026, "Error in SurfRoughing : Detecting open edges failed") ; + return false ; + } } } @@ -2837,8 +2825,8 @@ SurfRoughing::GetSfrCornerColl( ISurfFlatRegion* pSfr, const ISurfFlatRegion* pS // rimuovo la regione da non rovinare, ho esteso i lati aperti mediante Offset semplice, // devo controllare di non rovinare altre regioni // regolarizzo la superficie - pSfrExtra->Offset( - m_TParams.m_dDiam / 8., ICurve::OFF_FILLET) ; pSfrExtra->Offset( m_TParams.m_dDiam / 8., ICurve::OFF_FILLET) ; + pSfrExtra->Offset( - m_TParams.m_dDiam / 8., ICurve::OFF_FILLET) ; if ( ! pSfrExtra->Subtract( *pSfrLimit)) return nullptr ; #if ENABLE_DEBUG_REMOVED_REGION @@ -2846,9 +2834,6 @@ SurfRoughing::GetSfrCornerColl( ISurfFlatRegion* pSfr, const ISurfFlatRegion* pS m_pGeomDB->SetMaterial( _nIdExtraSfr, FUCHSIA) ; #endif - // bisogna ricalcolare i lati aperti/chiusi in base alle nuove modifica della superficie - - return ( Release( pSfrExtra)) ; } @@ -4825,7 +4810,7 @@ SurfRoughing::GetHomogeneousParts( const ICurveComposite* pCrvCompo, ICRVCOMPOPO //---------------------------------------------------------------------------- void SurfRoughing::DrawLoopsSurf( const ISurfFlatRegion* pSfr, bool bUniform, Color Col, bool bAlphaCoverage, - string sName) + string sName) const { if ( pSfr == nullptr || ! pSfr->IsValid()) return ; @@ -4856,7 +4841,7 @@ SurfRoughing::DrawLoopsSurf( const ISurfFlatRegion* pSfr, bool bUniform, Color C //---------------------------------------------------------------------------- void -SurfRoughing::DrawFeed( const ICurve* pCrv, double dFeed) +SurfRoughing::DrawFeed( const ICurve* pCrv, double dFeed) const { if ( pCrv == nullptr) return ; @@ -4871,7 +4856,7 @@ SurfRoughing::DrawFeed( const ICurve* pCrv, double dFeed) //---------------------------------------------------------------------------- void -SurfRoughing::DrawNormalShaderSurfTm( const ISurfTriMesh* pStm, string sName) +SurfRoughing::DrawNormalShaderSurfTm( const ISurfTriMesh* pStm, string sName) const { if ( pStm == nullptr || ! pStm->IsValid()) return ; diff --git a/SurfRoughing.h b/SurfRoughing.h index 7a6c173..887593c 100644 --- a/SurfRoughing.h +++ b/SurfRoughing.h @@ -41,14 +41,13 @@ typedef std::vector PATHINFOSRVECTOR ; struct StepInfoSRTmp { StepInfoSRTmp( void) : nIndRef( -1), dDepth( 0), bSubStep( false), bPlaneZStep( false), dPercFeed( 0.), - pSfrRemoved( nullptr), pSfrPlaneZ( nullptr), pSfrCorn( nullptr) {} - StepInfoSRTmp( int nIR, double dD, bool bSS, bool bPZ, double dPF, ISurfFlatRegion* pSR, ISurfFlatRegion* pSPZ, ISurfFlatRegion* pSC) + pSfrRemoved( nullptr), pSfrPlaneZ( nullptr) {} + StepInfoSRTmp( int nIR, double dD, bool bSS, bool bPZ, double dPF, ISurfFlatRegion* pSR, ISurfFlatRegion* pSPZ) : nIndRef( nIR), dDepth( dD), bSubStep( bSS), bPlaneZStep( bPZ), dPercFeed( dPF), - pSfrRemoved( pSR), pSfrPlaneZ( pSPZ), pSfrCorn( pSC) {} + pSfrRemoved( pSR), pSfrPlaneZ( pSPZ) {} ~StepInfoSRTmp() { delete( pSfrRemoved) ; delete( pSfrPlaneZ) ; - delete( pSfrCorn) ; } int nIndRef ; // ( usato solo per step intermedi ) posizione step precedente double dDepth ; // profondità posizione piano di svuotatura ( in negativo) @@ -57,7 +56,6 @@ struct StepInfoSRTmp { double dPercFeed ; // percentuale degli extra steps relativa agli step base ( per Feed ZLoc) ISurfFlatRegion* pSfrRemoved ; // regione PROGRESSIVA rimossa attuale ISurfFlatRegion* pSfrPlaneZ ; // regione individuata da PlaneZDetection - ISurfFlatRegion* pSfrCorn ; // regione non svutata per presenza di lati chiusi definiti da tavola/ventose } ; // vettore associato typedef std::vector STEPINFOTMPSRVECTOR ; @@ -271,9 +269,9 @@ class SurfRoughing : public Machining return m_Params.m_nLeadOutType ; } /* debug functions */ - void DrawLoopsSurf( const ISurfFlatRegion* pSfr, bool bWithSurf, Color Col, bool bAlphaCoverage, std::string sName) ; - void DrawFeed( const ICurve* pCrv, double dFeed) ; - void DrawNormalShaderSurfTm( const ISurfTriMesh* pStm, std::string sName) ; + void DrawLoopsSurf( const ISurfFlatRegion* pSfr, bool bWithSurf, Color Col, bool bAlphaCoverage, std::string sName) const ; + void DrawFeed( const ICurve* pCrv, double dFeed) const ; + void DrawNormalShaderSurfTm( const ISurfTriMesh* pStm, std::string sName) const ; /* end debug functions */ private :