EgtMachKernel :

- aggiunte funzioni lua EmtAddClimb, EmtRemoveClimb, EmtAddRise, EmtRemoveRise, EmtGetInitialAxesPos e EmtGetFinalAxesPos
- prime modifiche per gestione custom dei link tra lavorazioni in OnPostApplyMachining.
This commit is contained in:
Dario Sassi
2025-06-30 11:46:46 +02:00
parent 4a53f3522e
commit 10bdf80b2a
8 changed files with 218 additions and 17 deletions
+6
View File
@@ -368,9 +368,15 @@ class Machine
static int LuaEmtAddRapidMove( lua_State* L) ;
static int LuaEmtAddLinearMove( lua_State* L) ;
static int LuaEmtAddArcMove( lua_State* L) ;
static int LuaEmtAddClimb( lua_State* L) ;
static int LuaEmtRemoveClimb( lua_State* L) ;
static int LuaEmtAddRise( lua_State* L) ;
static int LuaEmtRemoveRise( lua_State* L) ;
static int LuaEmtGetMoveType( lua_State* L) ;
static int LuaEmtGetAxesPos( lua_State* L) ;
static int LuaEmtGetBackAuxDir( lua_State* L) ;
static int LuaEmtGetInitialAxesPos( lua_State* L) ;
static int LuaEmtGetFinalAxesPos( lua_State* L) ;
static int LuaEmtLinkRawPartToGroup( lua_State* L) ;
static int LuaEmtGetAllLinkedRawParts( lua_State* L) ;
static int LuaEmtUnlinkRawPartFromGroup( lua_State* L) ;
+6
View File
@@ -121,6 +121,12 @@ Machine::LuaInit( const string& sMachineName)
m_LuaMgr.RegisterFunction( "EmtAddRapidMove", Machine::LuaEmtAddRapidMove) ;
m_LuaMgr.RegisterFunction( "EmtAddLinearMove", Machine::LuaEmtAddLinearMove) ;
m_LuaMgr.RegisterFunction( "EmtAddArcMove", Machine::LuaEmtAddArcMove) ;
m_LuaMgr.RegisterFunction( "EmtAddClimb", Machine::LuaEmtAddClimb) ;
m_LuaMgr.RegisterFunction( "EmtRemoveClimb", Machine::LuaEmtRemoveClimb) ;
m_LuaMgr.RegisterFunction( "EmtAddRise", Machine::LuaEmtAddRise) ;
m_LuaMgr.RegisterFunction( "EmtRemoveRise", Machine::LuaEmtRemoveRise) ;
m_LuaMgr.RegisterFunction( "EmtGetInitialAxesPos", Machine::LuaEmtGetInitialAxesPos) ;
m_LuaMgr.RegisterFunction( "EmtGetFinalAxesPos", Machine::LuaEmtGetFinalAxesPos) ;
// registro le funzioni di lettura entità CL per lua
m_LuaMgr.RegisterFunction( "EmtGetMoveType", Machine::LuaEmtGetMoveType) ;
m_LuaMgr.RegisterFunction( "EmtGetAxesPos", Machine::LuaEmtGetAxesPos) ;
+159
View File
@@ -16,6 +16,7 @@
#include "MachMgr.h"
#include "DllMain.h"
#include "CamData.h"
#include "Operation.h"
#include "/EgtDev/Include/EXeExecutor.h"
#include "/EgtDev/Include/EGkGeoPoint3d.h"
#include "/EgtDev/Include/EGkCurveLine.h"
@@ -276,6 +277,164 @@ Machine::LuaEmtAddArcMove( lua_State* L)
return 1 ;
}
//----------------------------------------------------------------------------
int
Machine::LuaEmtAddClimb( lua_State* L)
{
// 5 o 6 parametri : nMachId, vAxVal, nMask, nFlag, nFlag2 [, sInfo]
int nMachId ;
LuaCheckParam( L, 1, nMachId)
DBLVECTOR vAxVal ;
LuaCheckParam( L, 2, vAxVal)
int nMask ;
LuaCheckParam( L, 3, nMask)
int nFlag ;
LuaCheckParam( L, 4, nFlag)
int nFlag2 ;
LuaCheckParam( L, 5, nFlag2)
string sInfo = "" ;
LuaGetParam( L, 6, sInfo) ;
LuaClearStack( L) ;
// verifico ci sia una macchina attiva valida
if ( m_pMchLua == nullptr ||
m_pMchLua->m_pMchMgr == nullptr || m_pMchLua->m_pGeomDB == nullptr)
return luaL_error( L, " Unknown Machine") ;
// recupero l'operazione
Operation* pOper = GetOperation( m_pMchLua->m_pGeomDB->GetUserObj( nMachId)) ;
// imposto la discesa (primo movimento del primo percorso della lavorazione)
bool bOk = ( pOper != nullptr && pOper->AddSpecialClimb( vAxVal, ( nMask >= 0), GDB_ID_NULL, nFlag, nFlag2, nMask, sInfo)) ;
LuaSetParam( L, bOk) ;
return 1 ;
}
//----------------------------------------------------------------------------
int
Machine::LuaEmtRemoveClimb( lua_State* L)
{
// 1 parametro : nMachId
int nMachId ;
LuaCheckParam( L, 1, nMachId)
LuaClearStack( L) ;
// verifico ci sia una macchina attiva valida
if ( m_pMchLua == nullptr ||
m_pMchLua->m_pMchMgr == nullptr || m_pMchLua->m_pGeomDB == nullptr)
return luaL_error( L, " Unknown Machine") ;
// recupero l'operazione
Operation* pOper = GetOperation( m_pMchLua->m_pGeomDB->GetUserObj( nMachId)) ;
// elimino le discese (primi movimenti "CLIMB" del primo percorso della lavorazione)
bool bOk = ( pOper != nullptr && pOper->RemoveClimb()) ;
LuaSetParam( L, bOk) ;
return 1 ;
}
//----------------------------------------------------------------------------
int
Machine::LuaEmtAddRise( lua_State* L)
{
// 5 o 6 parametri : nMachId, vAxVal, nMask, nFlag, nFlag2 [, sInfo]
int nMachId ;
LuaCheckParam( L, 1, nMachId)
DBLVECTOR vAxVal ;
LuaCheckParam( L, 2, vAxVal)
int nMask ;
LuaCheckParam( L, 3, nMask)
int nFlag ;
LuaCheckParam( L, 4, nFlag)
int nFlag2 ;
LuaCheckParam( L, 5, nFlag2)
string sInfo = "" ;
LuaGetParam( L, 6, sInfo) ;
LuaClearStack( L) ;
// verifico ci sia una macchina attiva valida
if ( m_pMchLua == nullptr ||
m_pMchLua->m_pMchMgr == nullptr || m_pMchLua->m_pGeomDB == nullptr)
return luaL_error( L, " Unknown Machine") ;
// recupero l'operazione
Operation* pOper = GetOperation( m_pMchLua->m_pGeomDB->GetUserObj( nMachId)) ;
// aggiungo la risalita (ultimo movimento dell'ultimo percorso della lavorazione)
bool bOk = ( pOper != nullptr && pOper->AddSpecialRise( vAxVal, ( nMask >= 0), GDB_ID_NULL, nFlag, nFlag2, nMask, sInfo)) ;
LuaSetParam( L, bOk) ;
return 1 ;
}
//----------------------------------------------------------------------------
int
Machine::LuaEmtRemoveRise( lua_State* L)
{
// 1 parametro : nMachId
int nMachId ;
LuaCheckParam( L, 1, nMachId)
LuaClearStack( L) ;
// verifico ci sia una macchina attiva valida
if ( m_pMchLua == nullptr ||
m_pMchLua->m_pMchMgr == nullptr || m_pMchLua->m_pGeomDB == nullptr)
return luaL_error( L, " Unknown Machine") ;
// recupero l'operazione
Operation* pOper = GetOperation( m_pMchLua->m_pGeomDB->GetUserObj( nMachId)) ;
// elimino le risalite (ultimi movimenti "RISE" dell'ultimo percorso della lavorazione)
bool bOk = ( pOper != nullptr && pOper->RemoveRise()) ;
LuaSetParam( L, bOk) ;
return 1 ;
}
//----------------------------------------------------------------------------
int
Machine::LuaEmtGetInitialAxesPos( lua_State* L)
{
// 1 o 2 parametri : nMachId [, bSkipClimb]
int nMachId ;
LuaCheckParam( L, 1, nMachId)
bool bSkipClimb = true ;
LuaGetParam( L, 2, bSkipClimb) ;
LuaClearStack( L) ;
// verifico ci sia una macchina attiva valida
if ( m_pMchLua == nullptr ||
m_pMchLua->m_pMchMgr == nullptr || m_pMchLua->m_pGeomDB == nullptr)
return luaL_error( L, " Unknown Machine") ;
// recupero l'operazione
Operation* pOper = GetOperation( m_pMchLua->m_pGeomDB->GetUserObj( nMachId)) ;
// acquisico il valore iniziale degli assi macchina
DBLVECTOR vAxesVal ;
bool bOk = ( pOper != nullptr && pOper->GetInitialAxesValues( bSkipClimb, vAxesVal)) ;
if ( bOk)
LuaSetParam( L, vAxesVal) ;
else
LuaSetParam( L) ;
return 1 ;
}
//----------------------------------------------------------------------------
int
Machine::LuaEmtGetFinalAxesPos( lua_State* L)
{
// 1 o 2 parametri : nMachId [, bSkipRise]
int nMachId ;
LuaCheckParam( L, 1, nMachId)
bool bSkipRise = true ;
LuaGetParam( L, 2, bSkipRise) ;
LuaClearStack( L) ;
// verifico ci sia una macchina attiva valida
if ( m_pMchLua == nullptr ||
m_pMchLua->m_pMchMgr == nullptr || m_pMchLua->m_pGeomDB == nullptr)
return luaL_error( L, " Unknown Machine") ;
// recupero l'operazione
Operation* pOper = GetOperation( m_pMchLua->m_pGeomDB->GetUserObj( nMachId)) ;
// acquisico il valore finale degli assi macchina
DBLVECTOR vAxesVal ;
bool bOk = ( pOper != nullptr && pOper->GetFinalAxesValues( bSkipRise, vAxesVal)) ;
if ( bOk)
LuaSetParam( L, vAxesVal) ;
else
LuaSetParam( L) ;
return 1 ;
}
//----------------------------------------------------------------------------
int
Machine::LuaEmtGetMoveType( lua_State* L)
+8 -5
View File
@@ -431,7 +431,7 @@ Machining::ActivateDrillingUnit( int nHeadId, const INTVECTOR& vActExit) const
//----------------------------------------------------------------------------
bool
Machining::PostApply( string& sErr)
Machining::PostApply( bool& bLinkOk, string& sErr)
{
// recupero la macchina corrente
Machine* pMch = m_pMchMgr->GetCurrMachine() ;
@@ -439,10 +439,11 @@ Machining::PostApply( string& sErr)
return false ;
// costanti
static const string EMC_VAR = "EMC" ; // tabella variabili locali per calcolo
static const string EVAR_PHASE = ".PHASE" ; // IN (int) indice fase
static const string EVAR_MCHID = ".MCHID" ; // IN (int) identificativo della lavorazione
static const string EVAR_ERROR = ".ERR" ; // OUT (int) codice di errore ( 0 = ok, > 0 errore, < 0 warning)
static const string EVAR_MSG = ".MSG" ; // OUT (string) stringa di errore ( opzionale)
static const string EVAR_PHASE = ".PHASE" ; // IN (int) indice fase
static const string EVAR_MCHID = ".MCHID" ; // IN (int) identificativo della lavorazione
static const string EVAR_LINKOK = ".LINKOK" ; // IN/OUT (bool) flag di validità collegamento con lavorazione precedente
static const string EVAR_ERROR = ".ERR" ; // OUT (int) codice di errore ( 0 = ok, > 0 errore, < 0 warning)
static const string EVAR_MSG = ".MSG" ; // OUT (string) stringa di errore ( opzionale)
static const string ON_POST_APPLY = "OnPostApplyMachining" ;
// se non esiste la funzione, esco
@@ -456,10 +457,12 @@ Machining::PostApply( string& sErr)
bOk = bOk && pMch->LuaCreateGlobTable( EMC_VAR) ;
bOk = bOk && pMch->LuaSetGlobVar( EMC_VAR + EVAR_PHASE, m_nPhase) ;
bOk = bOk && pMch->LuaSetGlobVar( EMC_VAR + EVAR_MCHID, m_nOwnerId) ;
bOk = bOk && pMch->LuaSetGlobVar( EMC_VAR + EVAR_LINKOK, bLinkOk) ;
// eseguo
bOk = bOk && pMch->LuaCallFunction( ON_POST_APPLY, false) ;
// recupero valori parametri obbligatori
bOk = bOk && pMch->LuaGetGlobVar( EMC_VAR + EVAR_ERROR, nErr) ;
bOk = bOk && pMch->LuaGetGlobVar( EMC_VAR + EVAR_LINKOK, bLinkOk) ;
// recupero valori parametri opzionali
string sMsg ;
bOk && pMch->LuaGetGlobVar( EMC_VAR + EVAR_MSG, sMsg) ;
+3 -1
View File
@@ -57,7 +57,9 @@ class Machining : public Operation
protected :
Machining( void) ;
bool PostApply( std::string& sErr) ;
bool PostApply( std::string& sErr)
{ bool bLinkOk = true ; return PostApply( bLinkOk, sErr) ; }
bool PostApply( bool& bLinkOk, std::string& sErr) ;
private :
int GetToolPreviewNext( int nEntId, int nParentId, int nStId) const ;
+14 -11
View File
@@ -909,22 +909,16 @@ Milling::Update( bool bPostApply)
return false ;
}
// gestione movimenti all'inizio di ogni singolo percorso di lavorazione e alla fine della lavorazione
if ( ! AdjustStartEndMovements()) {
string sInfo = m_pMchMgr->GetOutstrokeInfo() ;
if ( sInfo.empty())
m_pMchMgr->SetLastError( 2319, "Error in Milling : link movements not calculable") ;
else
m_pMchMgr->SetLastError( 2320, "Error in Milling : link outstroke ") ;
return false ;
}
// assegno estremi degli assi dei vari percorsi di lavorazione e della lavorazione nel suo complesso
CalcAndSetAxesBBox() ;
// gestione movimenti all'inizio di ogni singolo percorso di lavorazione e alla fine della lavorazione
bool bLinkOk = AdjustStartEndMovements() ;
string sLinkInfo = ( bLinkOk ? "" : m_pMchMgr->GetOutstrokeInfo()) ;
// esecuzione eventuali personalizzazioni
string sErr ;
if ( bPostApply && ! PostApply( sErr)) {
if ( bPostApply && ! PostApply( bLinkOk, sErr) && bLinkOk) {
if ( ! IsEmptyOrSpaces( sErr))
m_pMchMgr->SetLastError( 2321, sErr) ;
else
@@ -932,6 +926,15 @@ Milling::Update( bool bPostApply)
return false ;
}
// se non riuscito collegamento con lavorazione precedente
if ( ! bLinkOk) {
if ( sLinkInfo.empty())
m_pMchMgr->SetLastError( 2319, "Error in Milling : link movements not calculable") ;
else
m_pMchMgr->SetLastError( 2320, "Error in Milling : link outstroke ") ;
return false ;
}
return true ;
}
+20
View File
@@ -3622,6 +3622,16 @@ Operation::AddSpecialClimb( const DBLVECTOR& vAxVal, bool bOk, int nClPathId,
pCam->SetFeed( 0) ;
pCam->SetFlag( nFlag) ;
pCam->SetFlag2( nFlag2) ;
// calcolo e assegno dati derivati
DBLVECTOR vAng( next( vAxVal.begin(), 3), vAxVal.end()) ;
Vector3d vtTool ;
m_pMchMgr->GetCalcToolDirFromAngles( vAng, vtTool) ;
pCam->SetToolDir( vtTool) ;
if ( ! pCam->GetAuxDir().IsSmall()) {
Vector3d vtAux ;
m_pMchMgr->GetCalcAuxDirFromAngles( vAng, vtAux) ;
pCam->SetAuxDir( vtAux) ;
}
// associo questo oggetto a quello geometrico
m_pGeomDB->SetUserObj( nId, Release( pCam)) ;
// inserzione eventuali info
@@ -3880,6 +3890,16 @@ Operation::AddSpecialRise( const DBLVECTOR& vAxVal, bool bOk, int nClPathId,
pCam->SetFeed( 0) ;
pCam->SetFlag( nFlag) ;
pCam->SetFlag2( nFlag2) ;
// calcolo e assegno dati derivati
DBLVECTOR vAng( next( vAxVal.begin(), 3), vAxVal.end()) ;
Vector3d vtTool ;
m_pMchMgr->GetCalcToolDirFromAngles( vAng, vtTool) ;
pCam->SetToolDir( vtTool) ;
if ( ! pCam->GetAuxDir().IsSmall()) {
Vector3d vtAux ;
m_pMchMgr->GetCalcAuxDirFromAngles( vAng, vtAux) ;
pCam->SetAuxDir( vtAux) ;
}
// associo questo oggetto a quello geometrico
m_pGeomDB->SetUserObj( nId, Release( pCam)) ;
// inserzione eventuali info
+2
View File
@@ -30,6 +30,8 @@ class ICurveComposite ;
//----------------------------------------------------------------------------
class Operation : public IUserObj
{
friend class Machine ;
public : // IUserObj
bool SetOwner( int nId, IGeomDB* pGDB) override ;
int GetOwner( void) const override ;