//---------------------------------------------------------------------------- // 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 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 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 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 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 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 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 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 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 ; }