78bc849746
- corretta lavorazione di finitura con lama per spatolatura per la gestione degli angoli sulla linea guida - allineata AdjustCurveFromSurf alla funzione simile di EgtExecutor - aggiunta funzione lua di macchina EmtGetBackAuxDir - a MachMgr aggiunte funzioni di interfaccia GetCalcHead e GetCalcExit.
342 lines
11 KiB
C++
342 lines
11 KiB
C++
//----------------------------------------------------------------------------
|
|
// EgalTech 2016-2016
|
|
//----------------------------------------------------------------------------
|
|
// File : MachineLuaCL.cpp Data : 26.04.16 Versione : 1.6p4
|
|
// Contenuto : Implementazione gestione macchina : funzioni Lua per CL.
|
|
//
|
|
//
|
|
//
|
|
// Modifiche : 26.04.16 DS Creazione modulo.
|
|
//
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
|
|
//--------------------------- Include ----------------------------------------
|
|
#include "stdafx.h"
|
|
#include "MachMgr.h"
|
|
#include "DllMain.h"
|
|
#include "/EgtDev/Include/EXeExecutor.h"
|
|
#include "/EgtDev/Include/EGkGeoPoint3d.h"
|
|
#include "/EgtDev/Include/EGkCurveLine.h"
|
|
#include "/EgtDev/Include/EGkCurveArc.h"
|
|
#include "/EgtDev/Include/EGkGeomDB.h"
|
|
#include "/EgtDev/Include/EGkLuaAux.h"
|
|
#include "/EgtDev/Include/EGnStringUtils.h"
|
|
#include "/EgtDev/Include/EGnFileUtils.h"
|
|
#include "/EgtDev/Include/EgtPointerOwner.h"
|
|
|
|
using namespace std ;
|
|
|
|
//----------------------------------------------------------------------------
|
|
int
|
|
Machine::LuaEmtAddRapidStart( lua_State* L)
|
|
{
|
|
// 6 parametri : nPathId, ptP, vtTool, vtCorr, vtAux, nFlag
|
|
int nPathId ;
|
|
LuaCheckParam( L, 1, nPathId)
|
|
Point3d ptP ;
|
|
LuaCheckParam( L, 2, ptP)
|
|
Vector3d vtTool ;
|
|
LuaCheckParam( L, 3, vtTool)
|
|
Vector3d vtCorr ;
|
|
LuaCheckParam( L, 4, vtCorr)
|
|
Vector3d vtAux ;
|
|
LuaCheckParam( L, 5, vtAux)
|
|
int nFlag ;
|
|
LuaCheckParam( L, 6, nFlag)
|
|
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") ;
|
|
// creo oggetto punto per DB geometrico
|
|
PtrOwner<IGeoPoint3d> pGP( CreateGeoPoint3d()) ;
|
|
bool bOk = ! IsNull( pGP) ;
|
|
// assegno le coordinate del punto
|
|
bOk = bOk && pGP->Set( ptP) ;
|
|
// inserisco l'oggetto nel DB geometrico
|
|
int nId = ( bOk ? m_pMchLua->m_pGeomDB->AddGeoObj( GDB_ID_NULL, nPathId, Release( pGP)) : GDB_ID_NULL) ;
|
|
bOk = bOk && ( nId != GDB_ID_NULL) ;
|
|
// creo oggetto dati Cam
|
|
PtrOwner<CamData> pCam( new( nothrow) CamData) ;
|
|
bOk = bOk && ! IsNull( pCam) ;
|
|
if ( bOk) {
|
|
// assegno valori
|
|
pCam->SetMoveType( 0) ;
|
|
pCam->SetToolDir( vtTool) ;
|
|
pCam->SetCorrDir( vtCorr) ;
|
|
pCam->SetAuxDir( vtAux) ;
|
|
pCam->SetEndPoint( ptP) ;
|
|
pCam->SetFeed( 0) ;
|
|
pCam->SetFlag( nFlag) ;
|
|
// associo questo oggetto a quello geometrico
|
|
m_pMchLua->m_pGeomDB->SetUserObj( nId, Release( pCam)) ;
|
|
}
|
|
// assegno risultato
|
|
if ( bOk)
|
|
LuaSetParam( L, nId) ;
|
|
else
|
|
LuaSetParam( L) ;
|
|
return 1 ;
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
int
|
|
Machine::LuaEmtAddRapidMove( lua_State* L)
|
|
{
|
|
// 7 parametri : nPathId, ptIni, ptFin, vtTool, vtCorr, vtAux, nFlag
|
|
int nPathId ;
|
|
LuaCheckParam( L, 1, nPathId)
|
|
Point3d ptIni ;
|
|
LuaCheckParam( L, 2, ptIni)
|
|
Point3d ptFin ;
|
|
LuaCheckParam( L, 3, ptFin)
|
|
Vector3d vtTool ;
|
|
LuaCheckParam( L, 4, vtTool)
|
|
Vector3d vtCorr ;
|
|
LuaCheckParam( L, 5, vtCorr)
|
|
Vector3d vtAux ;
|
|
LuaCheckParam( L, 6, vtAux)
|
|
int nFlag ;
|
|
LuaCheckParam( L, 7, nFlag)
|
|
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") ;
|
|
// creo oggetto linea per DB geometrico
|
|
PtrOwner<ICurveLine> pLine( CreateCurveLine()) ;
|
|
bool bOk = ! IsNull( pLine) ;
|
|
// assegno gli estremi della linea
|
|
bOk = bOk && pLine->Set( ptIni, ptFin) ;
|
|
// inserisco l'oggetto nel DB geometrico
|
|
int nId = ( bOk ? m_pMchLua->m_pGeomDB->AddGeoObj( GDB_ID_NULL, nPathId, Release( pLine)) : GDB_ID_NULL) ;
|
|
bOk = bOk && ( nId != GDB_ID_NULL) ;
|
|
// creo oggetto dati Cam
|
|
PtrOwner<CamData> pCam( new( nothrow) CamData) ;
|
|
bOk = bOk && ! IsNull( pCam) ;
|
|
if ( bOk) {
|
|
// assegno valori
|
|
pCam->SetMoveType( 0) ;
|
|
pCam->SetToolDir( vtTool) ;
|
|
pCam->SetCorrDir( vtCorr) ;
|
|
pCam->SetAuxDir( vtAux) ;
|
|
pCam->SetEndPoint( ptFin) ;
|
|
pCam->SetFeed( 0) ;
|
|
pCam->SetFlag( nFlag) ;
|
|
// associo questo oggetto a quello geometrico
|
|
m_pMchLua->m_pGeomDB->SetUserObj( nId, Release( pCam)) ;
|
|
}
|
|
// assegno risultato
|
|
if ( bOk)
|
|
LuaSetParam( L, nId) ;
|
|
else
|
|
LuaSetParam( L) ;
|
|
return 1 ;
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
int
|
|
Machine::LuaEmtAddLinearMove( lua_State* L)
|
|
{
|
|
// 8 parametri : nPathId, ptIni, ptFin, vtTool, vtCorr, vtAux, dFeed, nFlag
|
|
int nPathId ;
|
|
LuaCheckParam( L, 1, nPathId)
|
|
Point3d ptIni ;
|
|
LuaCheckParam( L, 2, ptIni)
|
|
Point3d ptFin ;
|
|
LuaCheckParam( L, 3, ptFin)
|
|
Vector3d vtTool ;
|
|
LuaCheckParam( L, 4, vtTool)
|
|
Vector3d vtCorr ;
|
|
LuaCheckParam( L, 5, vtCorr)
|
|
Vector3d vtAux ;
|
|
LuaCheckParam( L, 6, vtAux)
|
|
double dFeed ;
|
|
LuaCheckParam( L, 7, dFeed)
|
|
int nFlag ;
|
|
LuaCheckParam( L, 8, nFlag)
|
|
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") ;
|
|
// creo oggetto linea per DB geometrico
|
|
PtrOwner<ICurveLine> pLine( CreateCurveLine()) ;
|
|
bool bOk = ! IsNull( pLine) ;
|
|
// assegno gli estremi della linea
|
|
bOk = bOk && pLine->Set( ptIni, ptFin) ;
|
|
// inserisco l'oggetto nel DB geometrico
|
|
int nId = ( bOk ? m_pMchLua->m_pGeomDB->AddGeoObj( GDB_ID_NULL, nPathId, Release( pLine)) : GDB_ID_NULL) ;
|
|
bOk = bOk && ( nId != GDB_ID_NULL) ;
|
|
// creo oggetto dati Cam
|
|
PtrOwner<CamData> pCam( new( nothrow) CamData) ;
|
|
bOk = bOk && ! IsNull( pCam) ;
|
|
if ( bOk) {
|
|
// assegno valori
|
|
pCam->SetMoveType( 1) ;
|
|
pCam->SetToolDir( vtTool) ;
|
|
pCam->SetCorrDir( vtCorr) ;
|
|
pCam->SetAuxDir( vtAux) ;
|
|
pCam->SetEndPoint( ptFin) ;
|
|
pCam->SetFeed( dFeed) ;
|
|
pCam->SetFlag( nFlag) ;
|
|
// associo questo oggetto a quello geometrico
|
|
m_pMchLua->m_pGeomDB->SetUserObj( nId, Release( pCam)) ;
|
|
}
|
|
// assegno risultato
|
|
if ( bOk)
|
|
LuaSetParam( L, nId) ;
|
|
else
|
|
LuaSetParam( L) ;
|
|
return 1 ;
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
int
|
|
Machine::LuaEmtAddArcMove( lua_State* L)
|
|
{
|
|
// 11 parametri : nPathId, ptIni, ptFin, ptCen, dAngCen, vtN, vtTool, vtCorr, vtAux, dFeed, nFlag
|
|
int nPathId ;
|
|
LuaCheckParam( L, 1, nPathId)
|
|
Point3d ptIni ;
|
|
LuaCheckParam( L, 2, ptIni)
|
|
Point3d ptFin ;
|
|
LuaCheckParam( L, 3, ptFin)
|
|
Point3d ptCen ;
|
|
LuaCheckParam( L, 4, ptCen)
|
|
double dAngCen ;
|
|
LuaCheckParam( L, 5, dAngCen)
|
|
Vector3d vtN ;
|
|
LuaCheckParam( L, 6, vtN)
|
|
Vector3d vtTool ;
|
|
LuaCheckParam( L, 7, vtTool)
|
|
Vector3d vtCorr ;
|
|
LuaCheckParam( L, 8, vtCorr)
|
|
Vector3d vtAux ;
|
|
LuaCheckParam( L, 9, vtAux)
|
|
double dFeed ;
|
|
LuaCheckParam( L, 10, dFeed)
|
|
int nFlag ;
|
|
LuaCheckParam( L, 11, nFlag)
|
|
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") ;
|
|
// creo oggetto arco per DB geometrico
|
|
PtrOwner<ICurveArc> pArc( CreateCurveArc()) ;
|
|
bool bOk = ! IsNull( pArc) ;
|
|
// assegno i dati dell'arco
|
|
double dDeltaZ = ( ptFin - ptIni) * vtN ;
|
|
bOk = bOk && pArc->SetCPAN( ptCen, ptIni, dAngCen, dDeltaZ, vtN) ;
|
|
Point3d ptCalcFin ;
|
|
bOk = bOk && ( pArc->GetEndPoint( ptCalcFin) && AreSamePointApprox( ptCalcFin, ptFin)) ;
|
|
int nMove = ( dAngCen > 0 ? 3 : 2) ;
|
|
// inserisco l'oggetto nel DB geometrico
|
|
int nId = ( bOk ? m_pMchLua->m_pGeomDB->AddGeoObj( GDB_ID_NULL, nPathId, Release( pArc)) : GDB_ID_NULL) ;
|
|
bOk = bOk && ( nId != GDB_ID_NULL) ;
|
|
// creo oggetto dati Cam
|
|
PtrOwner<CamData> pCam( new( nothrow) CamData) ;
|
|
bOk = bOk && ! IsNull( pCam) ;
|
|
if ( bOk) {
|
|
// assegno valori
|
|
pCam->SetMoveType( nMove) ;
|
|
pCam->SetToolDir( vtTool) ;
|
|
pCam->SetCorrDir( vtCorr) ;
|
|
pCam->SetAuxDir( vtAux) ;
|
|
pCam->SetEndPoint( ptFin) ;
|
|
pCam->SetCenter( ptCen) ;
|
|
pCam->SetAngCen( dAngCen) ;
|
|
pCam->SetDeltaN( dDeltaZ) ;
|
|
pCam->SetNormDir( vtN) ;
|
|
pCam->SetFeed( dFeed) ;
|
|
pCam->SetFlag( nFlag) ;
|
|
// associo questo oggetto a quello geometrico
|
|
m_pMchLua->m_pGeomDB->SetUserObj( nId, Release( pCam)) ;
|
|
}
|
|
// assegno risultato
|
|
if ( bOk)
|
|
LuaSetParam( L, nId) ;
|
|
else
|
|
LuaSetParam( L) ;
|
|
return 1 ;
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
int
|
|
Machine::LuaEmtGetMoveType( lua_State* L)
|
|
{
|
|
// 1 parametro : nClEntId
|
|
int nClEntId ;
|
|
LuaCheckParam( L, 1, nClEntId)
|
|
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'oggetto CamData
|
|
const CamData* pCamData = GetCamData( m_pMchLua->m_pGeomDB->GetUserObj( nClEntId)) ;
|
|
bool bOk = ( pCamData != nullptr) ;
|
|
if ( bOk) {
|
|
int nMove = pCamData->GetMoveType() ;
|
|
LuaSetParam( L, nMove) ;
|
|
}
|
|
else
|
|
LuaSetParam( L) ;
|
|
|
|
return 1 ;
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
int
|
|
Machine::LuaEmtGetAxesPos( lua_State* L)
|
|
{
|
|
// 1 parametro : nClEntId
|
|
int nClEntId ;
|
|
LuaCheckParam( L, 1, nClEntId)
|
|
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'oggetto CamData
|
|
const CamData* pCamData = GetCamData( m_pMchLua->m_pGeomDB->GetUserObj( nClEntId)) ;
|
|
bool bOk = ( pCamData != nullptr) ;
|
|
bOk = bOk && ( pCamData->GetAxesStatus() == CamData::AS_OK) ;
|
|
if ( bOk) {
|
|
DBLVECTOR AxesVal = pCamData->GetAxesVal() ;
|
|
LuaSetParam( L, AxesVal) ;
|
|
}
|
|
else
|
|
LuaSetParam( L) ;
|
|
|
|
return 1 ;
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
int
|
|
Machine::LuaEmtGetBackAuxDir( lua_State* L)
|
|
{
|
|
// 1 parametro : nClEntId
|
|
int nClEntId ;
|
|
LuaCheckParam( L, 1, nClEntId)
|
|
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'oggetto CamData
|
|
const CamData* pCamData = GetCamData( m_pMchLua->m_pGeomDB->GetUserObj( nClEntId)) ;
|
|
bool bOk = ( pCamData != nullptr) ;
|
|
bOk = bOk && ( pCamData->GetAxesStatus() == CamData::AS_OK) ;
|
|
if ( bOk) {
|
|
const Vector3d& vtBackAuxDir = pCamData->GetBackAuxDir() ;
|
|
LuaSetParam( L, vtBackAuxDir) ;
|
|
}
|
|
else
|
|
LuaSetParam( L) ;
|
|
|
|
return 1 ;
|
|
}
|