diff --git a/EXE_MachMgr.cpp b/EXE_MachMgr.cpp index 02c16f9..0f468b8 100644 --- a/EXE_MachMgr.cpp +++ b/EXE_MachMgr.cpp @@ -3054,6 +3054,17 @@ ExeGetCalcAngles( const Vector3d& vtDirT, const Vector3d& vtDirA, return pMachMgr->GetCalcAngles( vtDirT, vtDirA, nStat, dAngA1, dAngB1, dAngA2, dAngB2) ; } +//----------------------------------------------------------------------------- +bool +ExeGetCalcAngles( const Vector3d& vtDirT, const Vector3d& vtDirA, + int& nStat, DBLVECTOR& vAng1, DBLVECTOR& vAng2) +{ + IMachMgr* pMachMgr = GetCurrMachMgr() ; + VERIFY_MACHMGR( pMachMgr, false) + // calcolo gli angoli macchina dalle direzioni fresa e ausiliaria passate + return pMachMgr->GetCalcAngles( vtDirT, vtDirA, nStat, vAng1, vAng2) ; +} + //----------------------------------------------------------------------------- bool ExeGetCalcPositions( const Point3d& ptP, double dAngA, double dAngB, @@ -3061,10 +3072,21 @@ ExeGetCalcPositions( const Point3d& ptP, double dAngA, double dAngB, { IMachMgr* pMachMgr = GetCurrMachMgr() ; VERIFY_MACHMGR( pMachMgr, false) - // calcolo gli angoli macchina dalla direzione fresa passata + // calcolo gli assi lineari macchina dalla posizione e dagli assi rotanti return pMachMgr->GetCalcPositions( ptP, dAngA, dAngB, nStat, dX, dY, dZ) ; } +//----------------------------------------------------------------------------- +bool +ExeGetCalcPositions( const Point3d& ptP, const DBLVECTOR& vAng, + int& nStat, double& dX, double& dY, double& dZ) +{ + IMachMgr* pMachMgr = GetCurrMachMgr() ; + VERIFY_MACHMGR( pMachMgr, false) + // calcolo gli assi lineari macchina dalla posizione e dagli assi rotanti + return pMachMgr->GetCalcPositions( ptP, vAng, nStat, dX, dY, dZ) ; +} + //----------------------------------------------------------------------------- bool ExeGetCalcTipFromPositions( double dX, double dY, double dZ, double dAngA, double dAngB, @@ -3076,6 +3098,17 @@ ExeGetCalcTipFromPositions( double dX, double dY, double dZ, double dAngA, doubl return pMachMgr->GetCalcTipFromPositions( dX, dY, dZ, dAngA, dAngB, false, bBottom, ptTip) ; } +//----------------------------------------------------------------------------- +bool +ExeGetCalcTipFromPositions( double dX, double dY, double dZ, const DBLVECTOR& vAng, + bool bBottom, Point3d& ptTip) +{ + IMachMgr* pMachMgr = GetCurrMachMgr() ; + VERIFY_MACHMGR( pMachMgr, false) + // calcolo il tip utensile dagli assi macchina + return pMachMgr->GetCalcTipFromPositions( dX, dY, dZ, vAng, false, bBottom, ptTip) ; +} + //----------------------------------------------------------------------------- bool ExeGetCalcToolDirFromAngles( const DBLVECTOR& vAng, Vector3d& vtDir) diff --git a/EgtExecutor.rc b/EgtExecutor.rc index efb388f..dd902e2 100644 Binary files a/EgtExecutor.rc and b/EgtExecutor.rc differ diff --git a/LUA_MachMgr.cpp b/LUA_MachMgr.cpp index 19741c0..372d4ce 100644 --- a/LUA_MachMgr.cpp +++ b/LUA_MachMgr.cpp @@ -3312,7 +3312,7 @@ LuaGetCalcAngles( lua_State* L) Vector3d vtDirA ; LuaGetParam( L, 2, vtDirA) ; LuaClearStack( L) ; - // imposto la tavola corrente per il calcolo + // calcolo gli angoli macchina dalle direzioni fresa e ausiliaria int nStat ; double dAngA1 ; double dAngB1 ; double dAngA2 ; double dAngB2 ; bool bOk = ExeGetCalcAngles( vtDirT, vtDirA, nStat, dAngA1, dAngB1, dAngA2, dAngB2) ; // restituisco il risultato @@ -3335,17 +3335,21 @@ LuaGetCalcAngles( lua_State* L) static int LuaGetCalcPositions( lua_State* L) { - // 3 parametri : ptP, dAngA, dAngB + // da 2 a 5 parametri : ptP, dAngA [, dAngB] [, dAngC] [, dAngD] Point3d ptP ; LuaCheckParam( L, 1, ptP) - double dAngA ; - LuaCheckParam( L, 2, dAngA) - double dAngB ; - LuaCheckParam( L, 3, dAngB) + DBLVECTOR vAng ; + for ( int i = 2 ; i <= 5 ; ++ i) { + double dAng ; + if ( LuaGetParam( L, i, dAng)) + vAng.emplace_back( dAng) ; + else + break ; + } LuaClearStack( L) ; // imposto la tavola corrente per il calcolo int nStat ; double dX ; double dY ; double dZ ; - bool bOk = ExeGetCalcPositions( ptP, dAngA, dAngB, nStat, dX, dY, dZ) ; + bool bOk = ExeGetCalcPositions( ptP, vAng, nStat, dX, dY, dZ) ; // restituisco il risultato if ( bOk) { LuaSetParam( L, bOk) ; @@ -3365,23 +3369,28 @@ LuaGetCalcPositions( lua_State* L) static int LuaGetCalcTipFromPositions( lua_State* L) { - // 6 parametri : dX, dY, dZ, dAngA, dAngB, bBottom + // da 5 a 8 parametri : dX, dY, dZ, dAngA [, dAngB] [, dAngC] [, dAngD], bBottom double dX ; LuaCheckParam( L, 1, dX) double dY ; LuaCheckParam( L, 2, dY) double dZ ; LuaCheckParam( L, 3, dZ) - double dAngA ; - LuaCheckParam( L, 4, dAngA) - double dAngB ; - LuaCheckParam( L, 5, dAngB) + DBLVECTOR vAng ; + int i ; + for ( i = 4 ; i <= 7 ; ++ i) { + double dAng ; + if ( LuaGetParam( L, i, dAng)) + vAng.emplace_back( dAng) ; + else + break ; + } bool bBottom ; - LuaCheckParam( L, 6, bBottom) + LuaCheckParam( L, i, bBottom) LuaClearStack( L) ; // calcolo il tip utensile dagli assi macchina Point3d ptTip ; - bool bOk = ExeGetCalcTipFromPositions( dX, dY, dZ, dAngA, dAngB, bBottom, ptTip) ; + bool bOk = ExeGetCalcTipFromPositions( dX, dY, dZ, vAng, bBottom, ptTip) ; // restituisco il risultato if ( bOk) LuaSetParam( L, ptTip) ;