EgtMachKernel 1.8f2 :

- aggiunte Update di lavorazioni e disposizione per ricalcolo assi macchina ecollegamenti.
This commit is contained in:
Dario Sassi
2017-06-17 16:55:44 +00:00
parent 88d87de77e
commit a4c7789a91
22 changed files with 232 additions and 50 deletions
+12
View File
@@ -487,6 +487,18 @@ Chiseling::Apply( bool bRecalc)
nPathId = m_pGeomDB->GetNextGroup( nPathId) ;
}
// eseguo aggiornamento assi macchina e collegamento con operazione precedente
return Update() ;
}
//----------------------------------------------------------------------------
bool
Chiseling::Update( void)
{
// verifico validità gestore DB geometrico e Id del gruppo
if ( m_pGeomDB == nullptr || ! m_pGeomDB->ExistsObj( m_nOwnerId))
return false ;
// se lavorazione vuota, esco
if ( m_nChisels == 0) {
LOG_INFO( GetEMkLogger(), "Warning in Chiseling : Plunges not found")
+1
View File
@@ -51,6 +51,7 @@ class Chiseling : public Machining
bool SetGeometry( const SELVECTOR& vIds) override ;
bool Preview( bool bRecalc) override ;
bool Apply( bool bRecalc) override ;
bool Update( void) override ;
bool GetParam( int nType, bool& bVal) const override ;
bool GetParam( int nType, int& nVal) const override ;
bool GetParam( int nType, double& dVal) const override ;
+65 -45
View File
@@ -1036,6 +1036,10 @@ Disposition::SpecialApply( bool bRecalc)
m_bSomeByHand = false ;
m_sTcPos.clear() ;
// verifico MachMgr e GeomDB
if ( m_pMchMgr == nullptr || m_pGeomDB == nullptr)
return false ;
// costanti
static const string EMC_VAR = "EMC" ; // tabella variabili locali per calcolo
static const string EVAR_TABNAME = ".TABNAME" ; // IN (string) nome della tavola macchina
@@ -1054,54 +1058,70 @@ Disposition::SpecialApply( bool bRecalc)
if ( pMch == nullptr)
return false ;
// se non esiste la funzione, non devo fare alcunché
if ( ! pMch->LuaExistsFunction( ON_SPECIAL_APPLY))
return true ;
// eseguo l'azione
if ( pMch->LuaExistsFunction( ON_SPECIAL_APPLY)) {
bool bOk = true ;
int nErr = 99 ;
// verifico tavola
bOk = ( m_bTabOk || SetTable( m_sTabName)) ;
// imposto valori parametri
bOk = bOk && pMch->LuaCreateGlobTable( EMC_VAR) ;
bOk = bOk && pMch->LuaSetGlobVar( EMC_VAR + EVAR_TABNAME, m_sTabName) ;
bOk = bOk && pMch->LuaSetGlobVar( EMC_VAR + EVAR_DISPID, m_nOwnerId) ;
bOk = bOk && pMch->LuaSetGlobVar( EMC_VAR + EVAR_PHASE, GetPhase()) ;
// eseguo
bOk = bOk && pMch->LuaCallFunction( ON_SPECIAL_APPLY, false) ;
// recupero valori parametri obbligatori
bOk = bOk && pMch->LuaGetGlobVar( EMC_VAR + EVAR_ERROR, nErr) ;
bOk = bOk && pMch->LuaGetGlobVar( EMC_VAR + EVAR_HEAD, m_sHead) ;
bOk = bOk && pMch->LuaGetGlobVar( EMC_VAR + EVAR_EXIT, m_nExit) ;
bOk = bOk && pMch->LuaGetGlobVar( EMC_VAR + EVAR_SHIFTS, m_nShifts) ;
bOk = bOk && pMch->LuaGetGlobVar( EMC_VAR + EVAR_SBH, m_bSomeByHand) ;
// recupero valori parametri opzionali
if ( bOk)
pMch->LuaGetGlobVar( EMC_VAR + EVAR_TCPOS, m_sTcPos) ;
// reset
bOk = bOk && pMch->LuaResetGlobVar( EMC_VAR) ;
// segnalo errori
if ( nErr != 0) {
bOk = false ;
m_nShifts = - 1 ;
string sOut = " Error in " + ON_SPECIAL_APPLY + " (" + ToString( nErr) + ")" ;
m_pMchMgr->SetLastError( 2006, sOut) ;
}
// se disposizione vuota o errore, esco
if ( m_nShifts <= 0 || ! bOk)
return bOk ;
// calcolo assi macchina
if ( ! CalculateAxesValues( "")) {
m_pMchMgr->SetLastError( 2007, "Error in Disposition : axes values not calculable") ;
return false ;
}
// gestione movimenti all'inizio di ogni singolo percorso di lavorazione e alla fine di tutti
if ( ! AdjustStartEndMovements()) {
m_pMchMgr->SetLastError( 2008, "Error in Disposition : link movements not calculable") ;
return false ;
}
bool bOk = true ;
int nErr = 99 ;
// verifico tavola
bOk = ( m_bTabOk || SetTable( m_sTabName)) ;
// imposto valori parametri
bOk = bOk && pMch->LuaCreateGlobTable( EMC_VAR) ;
bOk = bOk && pMch->LuaSetGlobVar( EMC_VAR + EVAR_TABNAME, m_sTabName) ;
bOk = bOk && pMch->LuaSetGlobVar( EMC_VAR + EVAR_DISPID, m_nOwnerId) ;
bOk = bOk && pMch->LuaSetGlobVar( EMC_VAR + EVAR_PHASE, GetPhase()) ;
// eseguo
bOk = bOk && pMch->LuaCallFunction( ON_SPECIAL_APPLY, false) ;
// recupero valori parametri obbligatori
bOk = bOk && pMch->LuaGetGlobVar( EMC_VAR + EVAR_ERROR, nErr) ;
bOk = bOk && pMch->LuaGetGlobVar( EMC_VAR + EVAR_HEAD, m_sHead) ;
bOk = bOk && pMch->LuaGetGlobVar( EMC_VAR + EVAR_EXIT, m_nExit) ;
bOk = bOk && pMch->LuaGetGlobVar( EMC_VAR + EVAR_SHIFTS, m_nShifts) ;
bOk = bOk && pMch->LuaGetGlobVar( EMC_VAR + EVAR_SBH, m_bSomeByHand) ;
// recupero valori parametri opzionali
if ( bOk)
pMch->LuaGetGlobVar( EMC_VAR + EVAR_TCPOS, m_sTcPos) ;
// reset
bOk = bOk && pMch->LuaResetGlobVar( EMC_VAR) ;
// segnalo errori ed esco
if ( ! bOk || nErr != 0) {
m_nShifts = - 1 ;
string sOut = " Error in " + ON_SPECIAL_APPLY + " (" + ToString( nErr) + ")" ;
m_pMchMgr->SetLastError( 2006, sOut) ;
return false ;
}
// eseguo aggiornamento assi macchina e collegamento con operazione precedente
return SpecialUpdate() ;
}
//----------------------------------------------------------------------------
bool
Disposition::SpecialUpdate( void)
{
// verifico MachMgr e GeomDB
if ( m_pMchMgr == nullptr || m_pGeomDB == nullptr)
return false ;
// se disposizione vuota, esco
if ( m_nShifts <= 0) {
if ( m_nShifts < 0)
LOG_INFO( GetEMkLogger(), "Warning in Disposition : No shifts")
return true ;
}
else
return true ;
// calcolo assi macchina
if ( ! CalculateAxesValues( "")) {
m_pMchMgr->SetLastError( 2007, "Error in Disposition : axes values not calculable") ;
return false ;
}
// gestione movimenti all'inizio di ogni singolo percorso di lavorazione e alla fine di tutti
if ( ! AdjustStartEndMovements()) {
m_pMchMgr->SetLastError( 2008, "Error in Disposition : link movements not calculable") ;
return false ;
}
return true ;
}
//----------------------------------------------------------------------------
+1
View File
@@ -102,6 +102,7 @@ class Disposition : public Operation
double& dAngDeg, double& dMov) const ;
bool GetMoveRawData( int nInd, int& nRawId, int& nType, Point3d& ptPos, int& nFlag) const ;
bool SpecialApply( bool bRecalc) ;
bool SpecialUpdate( void) ;
bool GetToolData( std::string& sName, std::string& sHead, int& nExit, std::string& sTcPos) const ;
bool GetSomeByHand( void) const
{ return m_bSomeByHand ; }
+15 -1
View File
@@ -483,9 +483,23 @@ Drilling::Apply( bool bRecalc)
else
return false ;
// eseguo aggiornamento assi macchina e collegamento con operazione precedente
return Update() ;
}
//----------------------------------------------------------------------------
bool
Drilling::Update( void)
{
// verifico validità gestore DB geometrico e Id del gruppo
if ( m_pGeomDB == nullptr || ! m_pGeomDB->ExistsObj( m_nOwnerId))
return false ;
// se lavorazione vuota, esco
if ( m_nDrillings == 0)
if ( m_nDrillings == 0) {
LOG_INFO( GetEMkLogger(), "Warning in Drilling : No machinable hole")
return true ;
}
// imposto eventuale asse bloccato da lavorazione
if ( ! m_Params.m_sBlockedAxis.empty()) {
+1
View File
@@ -51,6 +51,7 @@ class Drilling : public Machining
bool SetGeometry( const SELVECTOR& vIds) override ;
bool Preview( bool bRecalc) override ;
bool Apply( bool bRecalc) override ;
bool Update( void) override ;
bool GetParam( int nType, bool& bVal) const override ;
bool GetParam( int nType, int& nVal) const override ;
bool GetParam( int nType, double& dVal) const override ;
BIN
View File
Binary file not shown.
+15 -1
View File
@@ -536,9 +536,23 @@ GenMachining::Apply( bool bRecalc)
return false ;
}
// eseguo aggiornamento assi macchina e collegamento con operazione precedente
return Update() ;
}
//----------------------------------------------------------------------------
bool
GenMachining::Update( void)
{
// verifico validità gestore DB geometrico e Id del gruppo
if ( m_pGeomDB == nullptr || ! m_pGeomDB->ExistsObj( m_nOwnerId))
return false ;
// se lavorazione vuota, esco
if ( m_nMills == 0)
if ( m_nMills == 0) {
LOG_INFO( GetEMkLogger(), "Warning in GenMachining : No machinable path")
return true ;
}
// imposto eventuale asse bloccato da lavorazione
if ( ! m_Params.m_sBlockedAxis.empty()) {
+1
View File
@@ -50,6 +50,7 @@ class GenMachining : public Machining
bool SetGeometry( const SELVECTOR& vIds) override ;
bool Preview( bool bRecalc) override ;
bool Apply( bool bRecalc) override ;
bool Update( void) override ;
bool GetParam( int nType, bool& bVal) const override ;
bool GetParam( int nType, int& nVal) const override ;
bool GetParam( int nType, double& dVal) const override ;
+2
View File
@@ -230,6 +230,7 @@ class MachMgr : public IMachMgr
// Operations : dispositions
int GetPhaseDisposition( int nPhase) const override ;
bool DispositionSpecialApply( int nId, bool bRecalc) override ;
bool DispositionSpecialUpdate( int nId) override ;
// Operations : machinings
int AddMachining( const std::string& sName, const std::string& sMachining) override ;
int AddMachining( const std::string& sName, int nMchType, const std::string& sTool) override ;
@@ -245,6 +246,7 @@ class MachMgr : public IMachMgr
bool ExistsMachiningPreview( void) override ;
bool RemoveMachiningPreview( void) override ;
bool MachiningApply( bool bRecalc) override ;
bool MachiningUpdate( void) override ;
bool GetMachiningParam( int nType, bool& bVal) const override ;
bool GetMachiningParam( int nType, int& dVal) const override ;
bool GetMachiningParam( int nType, double& dVal) const override ;
+44
View File
@@ -606,6 +606,25 @@ MachMgr::DispositionSpecialApply( int nId, bool bRecalc)
return pDisp->SpecialApply( bRecalc) ;
}
//----------------------------------------------------------------------------
bool
MachMgr::DispositionSpecialUpdate( int nId)
{
ResetLastError() ;
// verifico sia attiva
bool bActive ;
if ( ! GetOperationMode( nId, bActive))
return false ;
if ( ! bActive)
return true ;
// recupero la disposizione
Disposition* pDisp = ::GetDisposition( m_pGeomDB->GetUserObj( nId)) ;
if ( pDisp == nullptr)
return false ;
// lancio l'azione
return pDisp->SpecialUpdate() ;
}
//----------------------------------------------------------------------------
// Machinings
//----------------------------------------------------------------------------
@@ -932,6 +951,31 @@ MachMgr::MachiningApply( bool bRecalc)
return pMch->Apply( bRecalc) ;
}
//----------------------------------------------------------------------------
bool
MachMgr::MachiningUpdate( void)
{
ResetLastError() ;
// recupero la lavorazione corrente
int nCurrMchId = GetCurrMachining() ;
if ( nCurrMchId == GDB_ID_NULL)
return false ;
// verifico sia attiva
bool bActive ;
if ( ! GetOperationMode( nCurrMchId, bActive))
return false ;
if ( ! bActive)
return true ;
// ne recupero il gestore
Machining* pMch = GetMachining( m_pGeomDB->GetUserObj( nCurrMchId)) ;
if ( pMch == nullptr)
return false ;
// imposto fase della lavorazione come temporaneamente corrente
SetTempPhase TmpPhase( this, pMch->GetPhase()) ;
// aggiorno valori assi macchina e collegamento con operazione precedente
return pMch->Update() ;
}
//----------------------------------------------------------------------------
bool
MachMgr::GetMachiningParam( int nType, bool& bVal) const
+1
View File
@@ -35,6 +35,7 @@ class Machining : public Operation
virtual bool SetGeometry( const SELVECTOR& vIds) = 0 ;
virtual bool Preview( bool bRecalc) = 0 ;
virtual bool Apply( bool bRecalc) = 0 ;
virtual bool Update( void) = 0 ;
virtual bool GetParam( int nType, bool& bVal) const = 0 ;
virtual bool GetParam( int nType, int& nVal) const = 0 ;
virtual bool GetParam( int nType, double& dVal) const = 0 ;
+12
View File
@@ -548,6 +548,18 @@ Milling::Apply( bool bRecalc)
nPathId = m_pGeomDB->GetNextGroup( nPathId) ;
}
// eseguo aggiornamento assi macchina e collegamento con operazione precedente
return Update() ;
}
//----------------------------------------------------------------------------
bool
Milling::Update( void)
{
// verifico validità gestore DB geometrico e Id del gruppo
if ( m_pGeomDB == nullptr || ! m_pGeomDB->ExistsObj( m_nOwnerId))
return false ;
// se lavorazione vuota, esco
if ( m_nMills == 0) {
LOG_INFO( GetEMkLogger(), "Warning in Milling : No machinable path")
+1
View File
@@ -50,6 +50,7 @@ class Milling : public Machining
bool SetGeometry( const SELVECTOR& vIds) override ;
bool Preview( bool bRecalc) override ;
bool Apply( bool bRecalc) override ;
bool Update( void) override ;
bool GetParam( int nType, bool& bVal) const override ;
bool GetParam( int nType, int& nVal) const override ;
bool GetParam( int nType, double& dVal) const override ;
+12
View File
@@ -524,6 +524,18 @@ Pocketing::Apply( bool bRecalc)
if ( ! bOk)
return false ;
// eseguo aggiornamento assi macchina e collegamento con operazione precedente
return Update() ;
}
//----------------------------------------------------------------------------
bool
Pocketing::Update( void)
{
// verifico validità gestore DB geometrico e Id del gruppo
if ( m_pGeomDB == nullptr || ! m_pGeomDB->ExistsObj( m_nOwnerId))
return false ;
// se lavorazione vuota, esco
if ( m_nPockets == 0) {
LOG_INFO( GetEMkLogger(), "Warning in Pocketing : No machinable pocket")
+1
View File
@@ -51,6 +51,7 @@ class Pocketing : public Machining
bool SetGeometry( const SELVECTOR& vIds) override ;
bool Preview( bool bRecalc) override ;
bool Apply( bool bRecalc) override ;
bool Update( void) override ;
bool GetParam( int nType, bool& bVal) const override ;
bool GetParam( int nType, int& nVal) const override ;
bool GetParam( int nType, double& dVal) const override ;
+15 -1
View File
@@ -464,9 +464,23 @@ SawFinishing::Apply( bool bRecalc)
}
}
// eseguo aggiornamento assi macchina e collegamento con operazione precedente
return Update() ;
}
//----------------------------------------------------------------------------
bool
SawFinishing::Update( void)
{
// verifico validità gestore DB geometrico e Id del gruppo
if ( m_pGeomDB == nullptr || ! m_pGeomDB->ExistsObj( m_nOwnerId))
return false ;
// se lavorazione vuota, esco
if ( m_nCuts == 0)
if ( m_nCuts == 0) {
LOG_INFO( GetEMkLogger(), "Warning in SawFinishing : No machinable path")
return true ;
}
// imposto eventuale asse bloccato da lavorazione
if ( ! m_Params.m_sBlockedAxis.empty()) {
+1
View File
@@ -53,6 +53,7 @@ class SawFinishing : public Machining
bool SetGeometry( const SELVECTOR& vIds) override ;
bool Preview( bool bRecalc) override ;
bool Apply( bool bRecalc) override ;
bool Update( void) override ;
bool GetParam( int nType, bool& bVal) const override ;
bool GetParam( int nType, int& nVal) const override ;
bool GetParam( int nType, double& dVal) const override ;
+15 -1
View File
@@ -440,9 +440,23 @@ SawRoughing::Apply( bool bRecalc)
return false ;
m_nCuts = 1 ;
// eseguo aggiornamento assi macchina e collegamento con operazione precedente
return Update() ;
}
//----------------------------------------------------------------------------
bool
SawRoughing::Update( void)
{
// verifico validità gestore DB geometrico e Id del gruppo
if ( m_pGeomDB == nullptr || ! m_pGeomDB->ExistsObj( m_nOwnerId))
return false ;
// se lavorazione vuota, esco
if ( m_nCuts == 0)
if ( m_nCuts == 0) {
LOG_INFO( GetEMkLogger(), "Warning in SawRoughing : No machinable path")
return true ;
}
// imposto eventuale asse bloccato da lavorazione
if ( ! m_Params.m_sBlockedAxis.empty()) {
+1
View File
@@ -53,6 +53,7 @@ class SawRoughing : public Machining
bool SetGeometry( const SELVECTOR& vIds) override ;
bool Preview( bool bRecalc) override ;
bool Apply( bool bRecalc) override ;
bool Update( void) override ;
bool GetParam( int nType, bool& bVal) const override ;
bool GetParam( int nType, int& nVal) const override ;
bool GetParam( int nType, double& dVal) const override ;
+15 -1
View File
@@ -554,9 +554,23 @@ Sawing::Apply( bool bRecalc)
nPathId = m_pGeomDB->GetNextGroup( nPathId) ;
}
// eseguo aggiornamento assi macchina e collegamento con operazione precedente
return Update() ;
}
//----------------------------------------------------------------------------
bool
Sawing::Update( void)
{
// verifico validità gestore DB geometrico e Id del gruppo
if ( m_pGeomDB == nullptr || ! m_pGeomDB->ExistsObj( m_nOwnerId))
return false ;
// se lavorazione vuota, esco
if ( m_nCuts == 0)
if ( m_nCuts == 0) {
LOG_INFO( GetEMkLogger(), "Warning in Sawing : No machinable path")
return true ;
}
// imposto eventuale asse bloccato da lavorazione
if ( ! m_Params.m_sBlockedAxis.empty()) {
+1
View File
@@ -53,6 +53,7 @@ class Sawing : public Machining
bool SetGeometry( const SELVECTOR& vIds) override ;
bool Preview( bool bRecalc) override ;
bool Apply( bool bRecalc) override ;
bool Update( void) override ;
bool GetParam( int nType, bool& bVal) const override ;
bool GetParam( int nType, int& nVal) const override ;
bool GetParam( int nType, double& dVal) const override ;