EgtMachKernel 1.8e5 :

- gestione da parametri lavorazione di angoli iniziali suggeriti e asse rotante bloccato
- in fresatura, svuotatura, incisione e lav. generica aggiunta possibilità di invertire direzione utensile
- in fresatura aggiunto parametro per tipo lavorazione faccia (perpendicolare, parallela, ...)
- differenziata distanza sicurezza standard da distanza sicurezza per rinvio da sotto
- migliorati approcci e retrazioni con rinvio da sotto
- migliorata segnalazione errori.
This commit is contained in:
Dario Sassi
2017-05-31 14:18:11 +00:00
parent c9ab1c76ed
commit 6c7a60b60a
48 changed files with 1214 additions and 234 deletions
+50 -5
View File
@@ -39,6 +39,9 @@ using namespace std ;
// 2905 = "Error in Chiseling : machining depth (xxx) bigger than MaxMaterial (yyy)"
// 2906 = "Error in Chiseling : Entity GetElevation"
// 2907 = "Error in Chiseling : Chaining failed"
// 2908 = "Error in Chiseling : axes values not calculable"
// 2909 = "Error in Chiseling : link movements not calculable"
// 2910 = "Error in Chiseling : post apply not calculable"
//----------------------------------------------------------------------------
struct SqHole
@@ -219,6 +222,9 @@ Chiseling::SetParam( int nType, bool bVal)
case MPA_INVERT :
m_Params.m_bInvert = bVal ;
return true ;
case MPA_TOOLINVERT :
m_Params.m_bToolInvert = bVal ;
return true ;
}
return false ;
}
@@ -318,6 +324,12 @@ Chiseling::SetParam( int nType, const string& sVal)
case MPA_USERNOTES :
m_Params.m_sUserNotes = sVal ;
break ;
case MPA_INITANGS :
m_Params.m_sInitAngs = sVal ;
break ;
case MPA_BLOCKEDAXIS :
m_Params.m_sBlockedAxis = sVal ;
break ;
default :
return false ;
}
@@ -481,18 +493,36 @@ Chiseling::Apply( bool bRecalc)
return true ;
}
// imposto eventuale asse bloccato da lavorazione
if ( ! m_Params.m_sBlockedAxis.empty()) {
string sAxis, sVal ;
Split( m_Params.m_sBlockedAxis, "=", true, sAxis, sVal) ;
double dVal = 0 ;
FromString( sVal, dVal) ;
m_pMchMgr->ClearRotAxisBlock() ;
m_pMchMgr->SetRotAxisBlock( sAxis, dVal) ;
}
// calcolo gli assi macchina
string sHint = ExtractHint( m_Params.m_sUserNotes) ;
if ( ! CalculateAxesValues( sHint))
if ( ! m_Params.m_sInitAngs.empty())
sHint = m_Params.m_sInitAngs ;
if ( ! CalculateAxesValues( sHint)) {
m_pMchMgr->SetLastError( 2908, "Error in Chiseling : axes values not calculable") ;
return false ;
}
// gestione movimenti all'inizio di ogni singolo percorso di lavorazione e alla fine della lavorazione
if ( ! AdjustStartEndMovements())
if ( ! AdjustStartEndMovements()) {
m_pMchMgr->SetLastError( 2909, "Error in Chiseling : link movements not calculable") ;
return false ;
}
// esecuzione eventuali personalizzazioni
if ( ! PostApply())
if ( ! PostApply()) {
m_pMchMgr->SetLastError( 2910, "Error in Chiseling : post apply not calculable") ;
return false ;
}
return true ;
}
@@ -505,6 +535,9 @@ Chiseling::GetParam( int nType, bool& bVal) const
case MPA_INVERT :
bVal = m_Params.m_bInvert ;
return true ;
case MPA_TOOLINVERT :
bVal = m_Params.m_bToolInvert ;
return true ;
}
bVal = false ;
return false ;
@@ -595,6 +628,12 @@ Chiseling::GetParam( int nType, string& sVal) const
case MPA_USERNOTES :
sVal = m_Params.m_sUserNotes ;
return true ;
case MPA_INITANGS :
sVal = m_Params.m_sInitAngs ;
return true ;
case MPA_BLOCKEDAXIS :
sVal = m_Params.m_sBlockedAxis ;
return true ;
}
sVal = "" ;
return false ;
@@ -811,8 +850,6 @@ bool
Chiseling::Chain( int nGrpDestId)
{
// vettore puntatori alle curve
typedef PtrOwner<ICurve> POWNCURVE ;
typedef std::vector<POWNCURVE> POCRVVECTOR ;
POCRVVECTOR vpCrvs ;
vpCrvs.reserve( m_vId.size()) ;
// recupero tutte le curve e le porto in globale
@@ -957,6 +994,14 @@ Chiseling::ProcessPath( int nPathId, int nPvId, int nClId)
double dThick ;
pCompo->GetThickness( dThick) ;
// eventuale inversione direzione utensile
if ( m_Params.m_bToolInvert) {
vtExtr.Invert() ;
pCompo->SetExtrusion( vtExtr) ;
dThick = - dThick ;
pCompo->SetThickness( dThick) ;
}
// se richiesto offset
double dOffs = GetOffsR() ;
if ( abs( dOffs) > EPS_SMALL) {