EgtMachKernel :

- razionalizzazione della interfaccia di simulazione
- correzione all'assegnamento di variabili lua durante la simulazione.
This commit is contained in:
Dario Sassi
2018-08-17 07:38:37 +00:00
parent fadc439156
commit bd74a8c9e7
6 changed files with 63 additions and 48 deletions
+2 -1
View File
@@ -263,6 +263,7 @@ class MachMgr : public IMachMgr
bool GetMachiningStartPoint( Point3d& ptStart) const override ;
bool GetMachiningEndPoint( Point3d& ptEnd) const override ;
// Simulation
bool SimInit( void) override ;
bool SimStart( bool bFirst) override ;
bool SimMove( int& nStatus) override ;
bool SimGetAxisInfoPos( int nI, std::string& sName, std::string& sToken, bool& bLinear, double& dVal) const override ;
@@ -272,7 +273,7 @@ class MachMgr : public IMachMgr
bool SimSetStep( double dStep) override ;
bool SimSetUiStatus( int nUiStatus) override ;
bool SimGoHome( void) override ;
bool SimStop( void) override ;
bool SimExit( void) override ;
// Generation
bool Generate( const std::string& sCncFile, const std::string& sInfo) override ;
bool Estimate( const std::string& sEstFile, const std::string& sInfo) override ;
+2 -2
View File
@@ -360,7 +360,7 @@ MachMgr::PrepareCurrMachGroup( int nId)
// se esiste gruppo corrente, lo disabilito
if ( m_nCurrMGrpId != GDB_ID_NULL) {
// termino eventuale simulazione attiva
SimStop() ;
SimExit() ;
// riporto i pezzi nei grezzi precedenti nella loro posizione standard
SwapParts( false) ;
// nascondo precedente gruppo corrente e la relativa macchina
@@ -395,7 +395,7 @@ MachMgr::ResetCurrMachGroup( void)
if ( m_nCurrMGrpId == GDB_ID_NULL)
return true ;
// termino eventuale simulazione attiva
SimStop() ;
SimExit() ;
// riporto i pezzi nei grezzi nella loro posizione standard
SwapParts( false) ;
// visualizzo pezzi rimasti sotto la radice
+12 -4
View File
@@ -22,16 +22,24 @@ using namespace std ;
//----------------------------------------------------------------------------
bool
MachMgr::SimStart( bool bFirst)
MachMgr::SimInit( void)
{
// alloco simulatore
// alloco o rialloco il simulatore
if ( m_pSimul != nullptr)
delete m_pSimul ;
m_pSimul = new( std::nothrow) Simulator ;
if ( m_pSimul == nullptr)
return false ;
// lo inizializzo
if ( ! m_pSimul->Init( this))
return m_pSimul->Init( this) ;
}
//----------------------------------------------------------------------------
bool
MachMgr::SimStart( bool bFirst)
{
// verifico simulatore
if ( m_pSimul == nullptr)
return false ;
// lo avvio
return m_pSimul->Start( bFirst) ;
@@ -129,7 +137,7 @@ MachMgr::SimGoHome( void)
//----------------------------------------------------------------------------
bool
MachMgr::SimStop( void)
MachMgr::SimExit( void)
{
// verifico simulatore
if ( m_pSimul == nullptr)
+5 -4
View File
@@ -154,7 +154,7 @@ class Machine
bool LuaCreateGlobTable( const std::string& sName) ;
bool LuaResetGlobVar( const std::string& sName) ;
template <typename T>
bool LuaSetGlobVar( const std::string& sVar, const T& Val) ;
bool LuaSetGlobVar( const std::string& sVar, const T& Val, bool bMchRestore = false) ;
template <typename T>
bool LuaGetGlobVar( const std::string& sVar, T& Val) ;
bool WriterOpen( const std::string& sOutFile) ;
@@ -304,21 +304,22 @@ class Machine
//----------------------------------------------------------------------------
template <typename T>
bool
Machine::LuaSetGlobVar( const std::string& sVar, const T& Val)
Machine::LuaSetGlobVar( const std::string& sVar, const T& Val, bool bMchRestore)
{
// imposto contesto corretto
int nOldCtx = ExeGetCurrentContext() ;
if ( nOldCtx != m_pMchMgr->GetContextId())
ExeSetCurrentContext( m_pMchMgr->GetContextId()) ;
// imposto l'oggetto corrente per Lua
Machine* pOldMchLua = m_pMchLua ;
m_pMchLua = this ;
// eseguo l'assegnamento
bool bOk = ::LuaSetGlobVar( m_LuaMgr.GetLuaState(), sVar, Val) ;
// ripristino contesto originale
if ( nOldCtx != m_pMchMgr->GetContextId())
ExeSetCurrentContext( nOldCtx) ;
// reset dell'oggetto corrente per Lua
m_pMchLua = nullptr ;
// ripristino o reset dell'oggetto corrente per Lua
m_pMchLua = ( bMchRestore ? pOldMchLua : nullptr) ;
return bOk ;
}
+36 -31
View File
@@ -70,7 +70,10 @@ Simulator::Simulator( void)
//----------------------------------------------------------------------------
Simulator::~Simulator( void)
{
Stop() ;
// porto la macchina in posizione home
GoHome() ;
// rimuovo tavola variabili globali
m_pMachine->LuaResetGlobVar( GLOB_VAR) ;
}
//----------------------------------------------------------------------------
@@ -104,8 +107,9 @@ Simulator::Start( bool bFirst)
if ( bFirst && ! VerifySetup())
bOk = false ;
// Reset utensile e assi correnti
// Reset utensile, interpolazione e assi correnti
m_sTool.clear() ;
ResetInterpolation() ;
ResetAxes() ;
ResetAuxAxes() ;
// porto la macchina in home
@@ -155,6 +159,28 @@ Simulator::VerifySetup( void)
return false ;
}
//----------------------------------------------------------------------------
bool
Simulator::ResetInterpolation( void)
{
m_nOpId = GDB_ID_NULL ;
m_nOpInd = 0 ;
m_nCLPathId = GDB_ID_NULL ;
m_nCLPathInd = 0 ;
m_nEntId = GDB_ID_NULL ;
m_nEntInd = 0 ;
m_dCoeff = 0 ;
m_nAuxSTot = 0 ;
m_nAuxSInd = 0 ;
m_nAuxETot = 0 ;
m_nAuxEInd = 0 ;
m_nVmId = GDB_ID_NULL ;
m_dVmTdOffs = 0 ;
m_dVmAdOffs = 0 ;
m_bEnabAxes = true ;
return true ;
}
//----------------------------------------------------------------------------
bool
Simulator::Move( int& nStatus)
@@ -334,8 +360,8 @@ bool
Simulator::SetStep( double dStep)
{
m_dStep = Clamp( dStep, MIN_STEP, MAX_STEP) ;
// imposto step per movimenti gestiti nelle macro di simulazione
m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_SIMSTEP, m_dStep) ;
// imposto step per movimenti gestiti nelle macro di simulazione ( con ripristino macchina Lua originale)
m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_SIMSTEP, m_dStep, true) ;
return true ;
}
@@ -344,8 +370,8 @@ bool
Simulator::SetUiStatus( int nUiStatus)
{
m_nUiStatus = nUiStatus ;
// imposto stato simulatore a livello utente per movimenti gestiti nelle macro di simulazione
m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_SIMUISTAT, m_nUiStatus) ;
// imposto stato utente del simulatore per movimenti gestiti nelle macro di simulazione ( con ripristino macchina Lua originale)
m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_SIMUISTAT, m_nUiStatus, true) ;
return true ;
}
@@ -364,27 +390,6 @@ Simulator::GoHome( void)
return m_pMchMgr->GetAllCurrAxesHomePos( m_AxesVal) ;
}
//----------------------------------------------------------------------------
bool
Simulator::Stop( void)
{
// porto in home
if ( ! GoHome())
return false ;
// rimuovo tavola variabili globali
m_pMachine->LuaResetGlobVar( GLOB_VAR) ;
// reset dello stato
m_nOpId = GDB_ID_NULL ;
m_nCLPathId = GDB_ID_NULL ;
m_nEntId = GDB_ID_NULL ;
m_dCoeff = 0 ;
m_nAuxSTot = 0 ;
m_nAuxSInd = 0 ;
m_nAuxETot = 0 ;
m_nAuxEInd = 0 ;
return true ;
}
//----------------------------------------------------------------------------
bool
Simulator::UpdateTool( bool bFirst)
@@ -971,7 +976,7 @@ Simulator::ManageSingleMove( int& nStatus, double& dMove)
if ( m_nVmId != GDB_ID_NULL) {
Point3d ptNoseF ; Vector3d vtDirF ; Vector3d vtAuxF ; Frame3d frVzmF ;
bool bOkF = GetHeadCurrPosDirAux( ptNoseF, vtDirF, vtAuxF) && m_pGeomDB->GetGlobFrame( m_nVmId, frVzmF) ; ;
ExecVmillOnLine( ptNoseI, vtDirI, vtAuxI, frVzmI, ptNoseF, vtDirF, vtAuxF, frVzmF) ;
ExecLineVmill( ptNoseI, vtDirI, vtAuxI, frVzmI, ptNoseF, vtDirF, vtAuxF, frVzmF) ;
}
}
// Eseguo movimento su arco
@@ -1007,7 +1012,7 @@ Simulator::ManageSingleMove( int& nStatus, double& dMove)
if ( m_nVmId != GDB_ID_NULL) {
Point3d ptNoseF ; Vector3d vtDirF ; Vector3d vtAuxF ; Frame3d frVzmF ;
bool bOkF = GetHeadCurrPosDirAux( ptNoseF, vtDirF, vtAuxF) && m_pGeomDB->GetGlobFrame( m_nVmId, frVzmF) ;
ExecVmillOnLine( ptNoseI, vtDirI, vtAuxI, frVzmI, ptNoseF, vtDirF, vtAuxF, frVzmF) ;
ExecLineVmill( ptNoseI, vtDirI, vtAuxI, frVzmI, ptNoseF, vtDirF, vtAuxF, frVzmF) ;
// aggiorno prossimo inizio
ptNoseI = ptNoseF ;
vtDirI = vtDirF ;
@@ -1091,8 +1096,8 @@ Simulator::GetHeadCurrPosDirAux( Point3d& ptH, Vector3d& vtH, Vector3d& vtA)
//----------------------------------------------------------------------------
bool
Simulator::ExecVmillOnLine( const Point3d& ptHi, const Vector3d& vtHi, const Vector3d& vtAi, const Frame3d& frVzmI,
const Point3d& ptHf, const Vector3d& vtHf, const Vector3d& vtAf, const Frame3d& frVzmF)
Simulator::ExecLineVmill( const Point3d& ptHi, const Vector3d& vtHi, const Vector3d& vtAi, const Frame3d& frVzmI,
const Point3d& ptHf, const Vector3d& vtHf, const Vector3d& vtAf, const Frame3d& frVzmF)
{
// Recupero Zmap
IVolZmap* pVZM = GetVolZmap( m_pGeomDB->GetGeoObj( m_nVmId)) ;
+6 -6
View File
@@ -29,19 +29,19 @@ class Simulator
bool Init( MachMgr* pMchMgr) ;
bool Start( bool bFirst) ;
bool Move( int& nStatus) ;
bool GoHome( void) ;
bool SetStep( double dStep) ;
bool SetUiStatus( int nUiStatus) ;
bool GetAxisInfoPos( int nI, std::string& sName, std::string& sToken, bool& bLinear, double& dVal) const ;
bool GetToolInfo( std::string& sName, double& dSpeed) const ;
bool GetOperationInfo( std::string& sName, int& nType) const ;
bool GetMoveInfo( int& nGmove, double& dFeed) const ;
bool SetStep( double dStep) ;
bool SetUiStatus( int nUiStatus) ;
bool GoHome( void) ;
bool Stop( void) ;
private :
bool UpdateTool( bool bFirst = false) ;
bool UpdateAxes( void) ;
bool UpdateAxesPos( void) ;
bool ResetInterpolation( void) ;
bool ResetAxes( void) ;
bool ResetAuxAxes( void) ;
@@ -56,8 +56,8 @@ class Simulator
bool ManageMove( int& nStatus) ;
bool ManageSingleMove( int& nStatus, double& dMove) ;
bool GetHeadCurrPosDirAux( Point3d& ptH, Vector3d& vtH, Vector3d& vtA) ;
bool ExecVmillOnLine( const Point3d& ptHi, const Vector3d& vtHi, const Vector3d& vtAi, const Frame3d& frVzmI,
const Point3d& ptHf, const Vector3d& vtHf, const Vector3d& vtAf, const Frame3d& frVzmF) ;
bool ExecLineVmill( const Point3d& ptHi, const Vector3d& vtHi, const Vector3d& vtAi, const Frame3d& frVzmI,
const Point3d& ptHf, const Vector3d& vtHf, const Vector3d& vtAf, const Frame3d& frVzmF) ;
bool Stopped( void)
{ return ( m_nUiStatus == MCH_UISIM_STOP) ; }
bool OnStart( bool bFirst) ;