EgtMachKernel :

- in mortasatura aggiunto tipo Plunge=10 per lavorazione a Step senza approccio e retrazione se possinìbile.
This commit is contained in:
Dario Sassi
2025-06-11 19:21:23 +02:00
parent 0ef8c7f046
commit e560a513fe
+35 -11
View File
@@ -1345,7 +1345,7 @@ Mortising::ProcessPath( int nPathId, int nPvId, int nClId)
GetValInNotes( m_Params.m_sUserNotes, "Plunge", nPlunge) ;
// verifico che lo step dell'utensile sia sensato
double dOkStep = ( nPlunge == MORTISE_PLUNGE_STEP ? m_Params.m_dStep : 0) ;
double dOkStep = ( nPlunge == MORTISE_PLUNGE_STEP || nPlunge == MORTISE_PLUNGE_STEP_NO_SAFEZ ? m_Params.m_dStep : 0) ;
const double MIN_ZSTEP = 1.0 ;
if ( dOkStep >= EPS_SMALL && dOkStep < MIN_ZSTEP) {
dOkStep = MIN_ZSTEP ;
@@ -1567,6 +1567,15 @@ Mortising::GenerateOnePlungeCl( const Point3d& ptStart, const Point3d& ptEnd, co
{
// compensazione elevazione/affondamento
double dDelta = dElev - dDepth ;
// pre-calcolo step per modalità con step
int nStep = 1 ;
double dStep = dElev ;
if ( nPlunge == MORTISE_PLUNGE_STEP || nPlunge == MORTISE_PLUNGE_STEP_NO_SAFEZ) {
if ( dOkStep < EPS_SMALL)
dOkStep = dElev ;
nStep = max( 1, static_cast<int>( ceil( ( dElev - 10 * EPS_SMALL) / dOkStep))) ;
dStep = dElev / nStep ;
}
// determino se l'inizio dell'attacco è esattamente sotto il grezzo, nel qual caso ricalcolo l'elevazione
double dSafeZ = GetSafeZ() + GetDeltaSafeZ( vtTool) ;
@@ -1578,17 +1587,26 @@ Mortising::GenerateOnePlungeCl( const Point3d& ptStart, const Point3d& ptEnd, co
if ( ! bUnderStart)
GetElevation( m_nPhase, ptLi, vtTool, GetRadiusForStartEndElevation(), vtTool, dStartElev) ;
// sicurezza su punto iniziale
double dAppr = dStartElev + dSafeZ ;
if ( nPlunge == MORTISE_PLUNGE_STEP_NO_SAFEZ) {
double dStartDownElev ;
if ( ! GetElevation( m_nPhase, ptStart, vtTool, GetRadiusForStartEndElevation(), vtTool, dStartDownElev))
dStartDownElev = dDelta ;
if ( dStartDownElev < EPS_SMALL)
dAppr = -dStep ;
}
// 1 -> punto approccio
int nFirstFlag = ( bFirst ? 1 : 0) ;
SetFlag( nFirstFlag) ;
Point3d ptP1 = ( nPlunge != MORTISE_PLUNGE_END ? ptStart : ptEnd) + vtTool * ( dDelta + dStartElev + dSafeZ) ;
int nStart = AddRapidStartOrMove( ptP1, bFirst) ;
if ( nStart == GDB_ID_NULL)
Point3d ptP1 = ( nPlunge != MORTISE_PLUNGE_END ? ptStart : ptEnd) + vtTool * ( dDelta + dAppr) ;
if ( AddRapidStartOrMove( ptP1, bFirst) == GDB_ID_NULL)
return false ;
SetFlag( 0) ;
// 2 -> punto fuori (se diverso dal precedente)
if ( m_Params.m_dStartPos < dSafeZ - 10 * EPS_SMALL) {
if ( m_Params.m_dStartPos < dAppr - 10 * EPS_SMALL) {
Point3d ptP2 = ( nPlunge != MORTISE_PLUNGE_END ? ptStart : ptEnd) + vtTool * ( dDelta + m_Params.m_dStartPos) ;
if ( AddRapidMove( ptP2) == GDB_ID_NULL)
return false ;
@@ -1616,10 +1634,6 @@ Mortising::GenerateOnePlungeCl( const Point3d& ptStart, const Point3d& ptEnd, co
}
else {
// determino numero e affondamento degli step
if ( dOkStep < EPS_SMALL)
dOkStep = dElev ;
int nStep = max( 1, static_cast<int>( ceil( ( dElev - 10 * EPS_SMALL) / dOkStep))) ;
double dStep = dElev / nStep ;
const double RETURN_DIST = 10 ;
// a seconda del tipo
switch ( m_Params.m_nStepType) {
@@ -1629,7 +1643,7 @@ Mortising::GenerateOnePlungeCl( const Point3d& ptStart, const Point3d& ptEnd, co
SetFeed( GetStartFeed()) ;
SetFlag( 0) ;
Point3d ptP3 = (( i % 2 == 1) ? ptStart : ptEnd) + ( dDelta - i * dStep) * vtTool ;
if ( AddLinearMove( ptP3) == GDB_ID_NULL)
if ( AddLinearMove( ptP3) == GDB_ID_NULL && ! ( i == 1 && nPlunge == MORTISE_PLUNGE_STEP_NO_SAFEZ))
return false ;
// 4 -> punto termine
SetFeed( GetFeed()) ;
@@ -1683,11 +1697,21 @@ Mortising::GenerateOnePlungeCl( const Point3d& ptStart, const Point3d& ptEnd, co
// altrimenti ridetermino elevazione su fine percorso di lavoro
if ( ! bUnderEnd)
GetElevation( m_nPhase, ptLo, vtTool, GetRadiusForStartEndElevation(), vtTool, dEndElev) ;
// sicurezza su punto finale
double dRetr = dEndElev + dSafeZ ;
if ( nPlunge == MORTISE_PLUNGE_STEP_NO_SAFEZ) {
double dEndDownElev ;
if ( ! GetElevation( m_nPhase, ptStart, vtTool, GetRadiusForStartEndElevation(), vtTool, dEndDownElev))
dEndDownElev = dDelta ;
if ( dEndDownElev < EPS_SMALL)
dRetr = dEndElev - dStep ;
}
// 6 -> ritorno all'approccio
SetFeed( GetEndFeed()) ;
SetFlag( 104) ; // risalita sopra la fine
Point3d ptP6 = ptLast + vtTool * ( dDelta + dEndElev + dSafeZ) ;
Point3d ptP6 = ptLast + vtTool * ( dDelta + dRetr) ;
if ( AddLinearMove( ptP6) == GDB_ID_NULL)
return false ;