EgtMachKernel :

- in PocketingNT e SurfFinishing aggiunto migliorato il ricalcolo automatico della lavorazione
- mofifica parametri per CalcPocketing.
This commit is contained in:
Riccardo Elitropi
2025-05-30 11:50:21 +02:00
parent 1e3d46cab2
commit 24f1a214e2
3 changed files with 58 additions and 9 deletions
+28 -3
View File
@@ -44,7 +44,6 @@
#include "/EgtDev/Include/EGkCalcPocketing.h"
#include "/EgtDev/Include/EGkSurfLocal.h"
#include "/EgtDev/Include/EGkDistPointSurfFr.h"
#include "/EgtDev/Include/EGkDistPointSurfTm.h"
#include <algorithm>
using namespace std ;
@@ -723,6 +722,20 @@ PocketingNT::MyApply( bool bRecalc, bool bPostApply)
m_pGeomDB->EmptyGroup( nAuxId) ;
bChain = true ;
}
// altrimenti, controllo esistenza delle regioni (per compatibilità)
else {
int nPathId = m_pGeomDB->GetFirstGroupInGroup( nAuxId) ;
while ( nPathId != GDB_ID_NULL && ! bChain) {
int nGeoId = m_pGeomDB->GetFirstInGroup( nPathId) ;
while ( nGeoId != GDB_ID_NULL && ! bChain) {
bChain = ( m_pGeomDB->GetGeoType( nGeoId) != SRF_FLATRGN) ;
nGeoId = m_pGeomDB->GetNext( nGeoId) ;
}
nPathId = m_pGeomDB->GetNextGroup( nPathId) ;
}
if ( bChain)
m_pGeomDB->EmptyGroup( nAuxId) ;
}
// rendo corrente l'utensile usato nella lavorazione
if ( ! m_pMchMgr->SetCalcTool( m_TParams.m_sName, m_TParams.m_sHead, m_TParams.m_nExit)) {
@@ -3629,7 +3642,8 @@ PocketingNT::CalcPaths( STEPINFOPOVECTOR& vStepInfo)
ICRVCOMPOPOVECTOR vCrvPaths ;
if ( ! CalcPocketing( vStepInfo[i].pSfrPock, m_TParams.m_dDiam / 2, GetOffsR(), m_Params.m_dSideStep,
m_Params.m_dSideAngle, m_dOpenMinSafe, m_Params.m_nSubType, true, m_Params.m_bInvert,
false, true, bAdjustFeed, ptStartRef, vStepInfo[i].pSfrLimit, false, dMaxOptSize, vCrvPaths)) {
false, true, bAdjustFeed, ptStartRef, vStepInfo[i].pSfrLimit, false, dMaxOptSize,
m_Params.m_dLiTang, GetLeadInType(), vCrvPaths)) {
m_pMchMgr->SetLastError( 3028, "Error in PocketingNT : Error in CalcPocketing") ;
return false ;
}
@@ -3697,7 +3711,18 @@ PocketingNT::CalcPaths( STEPINFOPOVECTOR& vStepInfo)
! vStepInfo[i].vPaths[0].bOutStart &&
! vStepInfo[i].vPaths[0].bOutEnd) ;
}
// se svuotatura a spirale ed entrata ad elica, aggiusto il raggio massimo
if ( m_Params.m_nSubType == POCKET_SUB_SPIRALOUT && GetLeadInType() == POCKET_LI_HELIX) {
for ( const StepInfoPO& currStep : vStepInfo) {
if ( currStep.pSfrPock != nullptr && currStep.pSfrPock->IsValid()) {
double dRad = 0. ;
currStep.pSfrPock->GetMaxOffset( dRad) ;
m_dMaxHelixRad = min( 0.5 * min( m_Params.m_dLiTang, m_TParams.m_dDiam), dRad - ( m_TParams.m_dDiam / 2. + GetOffsR())) ; ;
break ;
}
}
}
// calcolo la curva di ritorno ( se necessaria)
for ( int i = 0 ; i < int( vStepInfo.size()) ; ++ i) {
for ( int j = 0 ; j < int( vStepInfo[i].vPaths.size()) ; ++ j) {