Files
EgtMachKernel/MachMgrMachines.cpp
T
Dario Sassi 7c4470b1d6 EgtMachKernel 1.6r4 :
- prima versione del bloccaggio assi rotanti.
2016-05-18 15:24:18 +00:00

433 lines
15 KiB
C++

//----------------------------------------------------------------------------
// EgalTech 2015-2015
//----------------------------------------------------------------------------
// File : MachMgrMachines.cpp Data : 02.05.15 Versione : 1.6e1
// Contenuto : Implementazione gestione macchine della classe MachMgr.
//
//
//
// Modifiche : 02.05.15 DS Creazione modulo.
//
//
//----------------------------------------------------------------------------
//--------------------------- Include ----------------------------------------
#include "stdafx.h"
#include "MachMgr.h"
#include "MachConst.h"
#include "ToolsMgr.h"
#include "MachiningsMgr.h"
#include "SawingData.h"
#include "/EgtDev/Include/EGkGdbIterator.h"
#include "/EgtDev/Include/EgnStringUtils.h"
#include "/EgtDev/Include/EgnFileUtils.h"
#include "/EgtDev/Include/EgtPointerOwner.h"
using namespace std ;
//----------------------------------------------------------------------------
bool
MachMgr::LoadMachine( const string& sMachineName)
{
// verifico validità del nome
if ( ! IsValidName( sMachineName))
return false ;
// se macchina già caricata, non devo fare alcunchè
if ( GetMachine( sMachineName) != - 1)
return true ;
// creo gruppo ausiliario di base per le macchine
if ( ! CreateMachAux())
return false ;
// creo e carico la macchina
PtrOwner<Machine> pMch( new( nothrow) Machine) ;
if ( IsNull( pMch) || ! pMch->Init( m_sMachinesDir, sMachineName, this))
return false ;
// creo e carico il DB utensili
PtrOwner<ToolsMgr> pTsMgr( new( nothrow) ToolsMgr) ;
string sToolsFile = m_sMachinesDir + "\\" + sMachineName + "\\" + TOOLS_DIR + "\\" + TOOLS_FILE ;
if ( IsNull( pTsMgr) || ! pTsMgr->Load( sToolsFile))
return false ;
// creo e carico il DB lavorazioni
PtrOwner<MachiningsMgr> pMsMgr( new( nothrow) MachiningsMgr) ;
string sMachsFile = m_sMachinesDir + "\\" + sMachineName + "\\" + MACHININGS_DIR + "\\" + MACHININGS_FILE ;
if ( IsNull( pMsMgr) || ! pMsMgr->Load( sMachsFile, pTsMgr))
return false ;
// salvo nel vettore
m_vMachines.emplace_back( Release( pMch), Release( pTsMgr), Release( pMsMgr)) ;
return true ;
}
//----------------------------------------------------------------------------
int
MachMgr::GetMachine( const string& sMachineName) const
{
// ciclo sulle macchine
for ( size_t i = 0 ; i < m_vMachines.size() ; ++ i) {
if ( m_vMachines[i].pMachine != nullptr &&
EqualNoCase( m_vMachines[i].pMachine->GetMachineName(), sMachineName))
return int( i) ;
}
return - 1 ;
}
//----------------------------------------------------------------------------
bool
MachMgr::SetCurrMachine( const string& sMachineName)
{
// se è già la macchina corrente, tutto bene
if ( m_nCurrMch >= 0 && m_nCurrMch < int( m_vMachines.size()) &&
m_vMachines[m_nCurrMch].pMachine != nullptr &&
EqualNoCase( m_vMachines[m_nCurrMch].pMachine->GetMachineName(), sMachineName))
return true ;
// se c'è macchinata corrente, non posso cambiare la macchina
if ( m_nCurrMGrpId != GDB_ID_NULL)
return false ;
// verifica ed eventuale caricamento della macchina
if ( ! LoadMachine( sMachineName))
return GDB_ID_NULL ;
// imposto i dati della macchina corrente
m_nCurrMch = GetMachine( sMachineName) ;
return true ;
}
//----------------------------------------------------------------------------
bool
MachMgr::GetCurrMachineName( string& sMachineName) const
{
Machine* pMch = GetCurrMachine() ;
if ( pMch == nullptr)
return false ;
sMachineName = pMch->GetMachineName() ;
return true ;
}
//----------------------------------------------------------------------------
Machine*
MachMgr::GetCurrMachine( void) const
{
if ( m_nCurrMch < 0 || m_nCurrMch >= int( m_vMachines.size()))
return nullptr ;
return m_vMachines[m_nCurrMch].pMachine ;
}
//----------------------------------------------------------------------------
ToolsMgr*
MachMgr::GetCurrToolsMgr( void) const
{
if ( m_nCurrMch < 0 || m_nCurrMch >= int( m_vMachines.size()))
return nullptr ;
return m_vMachines[m_nCurrMch].pTsMgr ;
}
//----------------------------------------------------------------------------
MachiningsMgr*
MachMgr::GetCurrMachiningsMgr( void) const
{
if ( m_nCurrMch < 0 || m_nCurrMch >= int( m_vMachines.size()))
return nullptr ;
return m_vMachines[m_nCurrMch].pMsMgr ;
}
//----------------------------------------------------------------------------
int
MachMgr::GetCurrMachineId( void) const
{
Machine* pMch = GetCurrMachine() ;
// restituisco identificativo della radice della geometria della macchina corrente
return ( ( pMch != nullptr) ? pMch->GetMachineId() : GDB_ID_NULL) ;
}
//----------------------------------------------------------------------------
int
MachMgr::GetBaseId( const string& sBase) const
{
Machine* pMch = GetCurrMachine() ;
// restituisco identificativo della base indicata nella macchina corrente
return ( ( pMch != nullptr) ? pMch->GetBaseId( sBase) : GDB_ID_NULL) ;
}
//----------------------------------------------------------------------------
int
MachMgr::GetTableId( const string& sTable) const
{
Machine* pMch = GetCurrMachine() ;
// restituisco identificativo della tavola indicata nella macchina corrente
return ( ( pMch != nullptr) ? pMch->GetTableId( sTable) : GDB_ID_NULL) ;
}
//----------------------------------------------------------------------------
int
MachMgr::GetAxisId( const string& sAxis) const
{
Machine* pMch = GetCurrMachine() ;
// restituisco identificativo dell'asse indicato nella macchina corrente
return ( ( pMch != nullptr) ? pMch->GetAxisId( sAxis) : GDB_ID_NULL) ;
}
//----------------------------------------------------------------------------
int
MachMgr::GetHeadId( const string& sHead) const
{
Machine* pMch = GetCurrMachine() ;
// restituisco identificativo della testa indicata nella macchina corrente
return ( ( pMch != nullptr) ? pMch->GetHeadId( sHead) : GDB_ID_NULL) ;
}
//----------------------------------------------------------------------------
bool
MachMgr::SetAxisPos( const string& sAxis, double dVal)
{
Machine* pMch = GetCurrMachine() ;
return ( ( pMch != nullptr) ? pMch->SetAxisPos( sAxis, dVal) : false) ;
}
//----------------------------------------------------------------------------
bool
MachMgr::GetAxisPos( const string& sAxis, double& dVal) const
{
Machine* pMch = GetCurrMachine() ;
return ( ( pMch != nullptr) ? pMch->GetAxisPos( sAxis, dVal) : false) ;
}
//----------------------------------------------------------------------------
bool
MachMgr::GetAxisHomePos( const string& sAxis, double& dHomeVal) const
{
Machine* pMch = GetCurrMachine() ;
return ( ( pMch != nullptr) ? pMch->GetAxisHomePos( sAxis, dHomeVal) : false) ;
}
//----------------------------------------------------------------------------
bool
MachMgr::ResetAxisPos( const string& sAxis)
{
Machine* pMch = GetCurrMachine() ;
return ( ( pMch != nullptr) ? pMch->ResetAxisPos( sAxis) : false) ;
}
//----------------------------------------------------------------------------
bool
MachMgr::ResetAllAxesPos( void)
{
Machine* pMch = GetCurrMachine() ;
return ( ( pMch != nullptr) ? pMch->ResetAllAxesPos() : false) ;
}
//----------------------------------------------------------------------------
bool
MachMgr::LoadTool( const string& sHead, int nExit, const string& sTool)
{
Machine* pMch = GetCurrMachine() ;
return ( ( pMch != nullptr) ? pMch->LoadTool( sHead, nExit, sTool) : false) ;
}
//----------------------------------------------------------------------------
bool
MachMgr::ResetHeadSet( const string& sHead)
{
Machine* pMch = GetCurrMachine() ;
return ( ( pMch != nullptr) ? pMch->ResetHeadSet( sHead) : false) ;
}
//----------------------------------------------------------------------------
bool
MachMgr::SetCalcTable( const string& sTable)
{
Machine* pMch = GetCurrMachine() ;
return ( ( pMch != nullptr) ? pMch->SetCurrTable( sTable) : false) ;
}
//----------------------------------------------------------------------------
bool
MachMgr::SetCalcTool( const string& sTool, const string& sHead, int nExit)
{
Machine* pMch = GetCurrMachine() ;
return ( ( pMch != nullptr) ? pMch->SetCurrTool( sTool, sHead, nExit) : false) ;
}
//----------------------------------------------------------------------------
bool
MachMgr::SetRotAxisBlock( const string& sAxis, double dVal)
{
Machine* pMch = GetCurrMachine() ;
if ( pMch == nullptr)
return false ;
int nAxId = pMch->GetAxisId( sAxis) ;
if ( nAxId == GDB_ID_NULL)
return false ;
m_vAxisBlock.emplace_back( sAxis, dVal) ;
return true ;
}
//----------------------------------------------------------------------------
bool
MachMgr::ApplyRotAxisBlock( void)
{
Machine* pMch = GetCurrMachine() ;
if ( pMch == nullptr)
return false ;
// applico blocchi
bool bOk = true ;
for ( auto& abVal : m_vAxisBlock) {
if ( ! pMch->BlockKinematicRotAxis( abVal.sAxis, abVal.dVal))
bOk = false ;
}
// pulisco
m_vAxisBlock.clear() ;
return bOk ;
}
//----------------------------------------------------------------------------
bool
MachMgr::IsKinematicRotAxisBlocked( int nInd)
{
Machine* pMch = GetCurrMachine() ;
return ( ( pMch != nullptr) ? pMch->IsKinematicRotAxisBlocked( nInd) : false) ;
}
//----------------------------------------------------------------------------
bool
MachMgr::GetCalcTool( string& sTool)
{
Machine* pMch = GetCurrMachine() ;
return ( ( pMch != nullptr) ? pMch->GetCurrTool( sTool) : false) ;
}
//----------------------------------------------------------------------------
double
MachMgr::GetCalcRot1W( void)
{
Machine* pMch = GetCurrMachine() ;
return ( ( pMch != nullptr) ? pMch->GetCurrRot1W() : false) ;
}
//----------------------------------------------------------------------------
int
MachMgr::GetCurrLinAxes( void)
{
Machine* pMch = GetCurrMachine() ;
return ( ( pMch != nullptr) ? pMch->GetCurrLinAxes() : false) ;
}
//----------------------------------------------------------------------------
int
MachMgr::GetCurrRotAxes( void)
{
Machine* pMch = GetCurrMachine() ;
return ( ( pMch != nullptr) ? pMch->GetCurrRotAxes() : false) ;
}
//----------------------------------------------------------------------------
bool
MachMgr::GetAllCurrAxesName( STRVECTOR& vAxName)
{
Machine* pMch = GetCurrMachine() ;
return ( ( pMch != nullptr) ? pMch->GetAllCurrAxesName( vAxName) : false) ;
}
//----------------------------------------------------------------------------
bool
MachMgr::GetAllCalcAxesHomePos( DBLVECTOR& vAxHomeVal)
{
Machine* pMch = GetCurrMachine() ;
return ( ( pMch != nullptr) ? pMch->GetAllCurrAxesHomePos( vAxHomeVal) : false) ;
}
//----------------------------------------------------------------------------
bool
MachMgr::GetCalcAngles( const Vector3d& vtDirT, const Vector3d& vtDirA,
int& nStat, double& dAngA1, double& dAngB1, double& dAngA2, double& dAngB2)
{
Machine* pMch = GetCurrMachine() ;
return ( ( pMch != nullptr) ? pMch->GetAngles( vtDirT, vtDirA, nStat, dAngA1, dAngB1, dAngA2, dAngB2) : false) ;
}
//----------------------------------------------------------------------------
bool
MachMgr::GetCalcAngles( const Vector3d& vtDirT, const Vector3d& vtDirA,
int& nStat, DBLVECTOR& vAng1, DBLVECTOR& vAng2)
{
Machine* pMch = GetCurrMachine() ;
return ( ( pMch != nullptr) ? pMch->GetAngles( vtDirT, vtDirA, nStat, vAng1, vAng2) : false) ;
}
//----------------------------------------------------------------------------
bool
MachMgr::GetCalcPositions( const Point3d& ptP, double dAngA, double dAngB,
int& nStat, double& dX, double& dY, double& dZ)
{
Machine* pMch = GetCurrMachine() ;
return ( ( pMch != nullptr) ? pMch->GetPositions( ptP, dAngA, dAngB, nStat, dX, dY, dZ) : false) ;
}
//----------------------------------------------------------------------------
bool
MachMgr::GetCalcPositions( const Point3d& ptP, DBLVECTOR& vAng,
int& nStat, double& dX, double& dY, double& dZ)
{
Machine* pMch = GetCurrMachine() ;
return ( ( pMch != nullptr) ? pMch->GetPositions( ptP, vAng, nStat, dX, dY, dZ) : false) ;
}
//----------------------------------------------------------------------------
bool
MachMgr::GetCalcTipFromPositions( double dX, double dY, double dZ, double dAngA, double dAngB,
bool bBottom, Point3d& ptTip)
{
Machine* pMch = GetCurrMachine() ;
return ( ( pMch != nullptr) ? pMch->GetTipFromPositions( dX, dY, dZ, dAngA, dAngB, bBottom, ptTip) : false) ;
}
//----------------------------------------------------------------------------
bool
MachMgr::GetCalcToolDirFromAngles( double dAngA, double dAngB, Vector3d& vtDir)
{
Machine* pMch = GetCurrMachine() ;
return ( ( pMch != nullptr) ? pMch->GetToolDirFromAngles( dAngA, dAngB, vtDir) : false) ;
}
//----------------------------------------------------------------------------
bool
MachMgr::GetNearestAngleInStroke( int nId, double dAngRef, double& dAng)
{
Machine* pMch = GetCurrMachine() ;
return ( ( pMch != nullptr) ? pMch->GetNearestAngleInStroke( nId, dAngRef, dAng) : false) ;
}
//----------------------------------------------------------------------------
bool
MachMgr::VerifyOutstroke( double dX, double dY, double dZ, double dAngA, double dAngB, int& nStat)
{
DBLVECTOR vAng(2) ; vAng[0] = dAngA ; vAng[1] = dAngB ;
return VerifyOutstroke( dX, dY, dZ, vAng, nStat) ;
}
//----------------------------------------------------------------------------
bool
MachMgr::VerifyOutstroke( double dX, double dY, double dZ, const DBLVECTOR& vAng, int& nStat)
{
Machine* pMch = GetCurrMachine() ;
return ( ( pMch != nullptr) ? pMch->VerifyOutstroke( dX, dY, dZ, vAng, nStat) : false) ;
}
//----------------------------------------------------------------------------
const std::string&
MachMgr::GetOutstrokeInfo( void) const
{
Machine* pMch = GetCurrMachine() ;
if ( pMch == nullptr) {
static string sNull = "" ;
return sNull ;
}
return pMch->GetOutstrokeInfo() ;
}
//----------------------------------------------------------------------------
bool
MachMgr::SetMachineLook( int nFlag)
{
Machine* pMch = GetCurrMachine() ;
return ( ( pMch != nullptr) ? pMch->SetLook( nFlag) : false) ;
}