From 4f79e4baf9dc4ddcfb22e7077d41bda2b9820ef2 Mon Sep 17 00:00:00 2001 From: Dario Sassi Date: Sun, 14 Apr 2024 18:18:13 +0200 Subject: [PATCH] EgtExecutor 2.6d4 : - aggiunta di alcune funzioni lua per i Quaternion. --- EgtExecutor.rc | Bin 18890 -> 18890 bytes LUA_GeoBase.cpp | 81 ++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 81 insertions(+) diff --git a/EgtExecutor.rc b/EgtExecutor.rc index 771f4b728a6c42499fafa834b0da01da3e0e6ca4..54e0984be0ee2a01619c8d3e4dd74e32d3cd3b7e 100644 GIT binary patch delta 249 zcmX>#neo(Q#trM3wOtwV7}6PX7%~}(88R3Y7&I6{fg+ghlj4}o{f@#neo(Q#trM3)jb*V7}6PX7*ZLEfmne-gCUrqgdq`#Gl9HNpll|Hz4<1yA~U1$ z=HG0tAj*+zISZI~oN4j~!74`M$&OsfoBM=pK%%F`z-k1g5Na9}VQS)(_~ePTbn;DR v>B%45mQCh!STy;UlYn48*nys42j&1BmIzeQx_OSX4l`CM>CGS9ZZQD>r%FJ@ diff --git a/LUA_GeoBase.cpp b/LUA_GeoBase.cpp index 242d8e6..8f8f8c2 100644 --- a/LUA_GeoBase.cpp +++ b/LUA_GeoBase.cpp @@ -530,6 +530,83 @@ LuaBBoxLocToLoc( lua_State* L) } } +//------------------------------------------------------------------------------- +static int +LuaQuaternionFromAxisAngle( lua_State* L) +{ + // 2 parametri : vtAx, dAngDeg + Vector3d vtAx ; + LuaCheckParam( L, 1, vtAx) + double dAngDeg ; + LuaCheckParam( L, 2, dAngDeg) + LuaClearStack( L) ; + // calcolo il quaternione che produce la rotazione equivalente + Quaternion qtQ = FromAxisAngle( vtAx, dAngDeg) ; + if ( ! qtQ.IsSmall()) + LuaSetParam( L, qtQ) ; + else + LuaSetParam( L) ; + return 1 ; +} + +//------------------------------------------------------------------------------- +static int +LuaQuaternionToAxisAngle( lua_State* L) +{ + // 1 parametro : Quaternion + Quaternion qtQ ; + LuaCheckParam( L, 1, qtQ) + LuaClearStack( L) ; + // calcolo l'asse e l'angolo di rotazione equivalenti + Vector3d vtAx ; + double dAngDeg ; + bool bOk = ToAxisAngle( qtQ, vtAx, dAngDeg) ; + if ( bOk) { + LuaSetParam( L, vtAx) ; + LuaSetParam( L, dAngDeg) ; + return 2 ; + } + else { + LuaSetParam( L) ; + return 1 ; + } +} + +//------------------------------------------------------------------------------- +static int +LuaQuaternionFromFrame( lua_State* L) +{ + // 1 parametro : Frame + Frame3d frFrame ; + LuaCheckParam( L, 1, frFrame) + LuaClearStack( L) ; + // calcolo il quaternione che produce l'orientamento di questo frame tramite rotazione dal globale + Quaternion qtQ = FromFrame( frFrame) ; + if ( ! qtQ.IsSmall()) + LuaSetParam( L, qtQ) ; + else + LuaSetParam( L) ; + return 1 ; +} + +//------------------------------------------------------------------------------- +static int +LuaQuaternionToFrame( lua_State* L) +{ + // 1 parametro : Quaternion + Quaternion qtQ ; + LuaCheckParam( L, 1, qtQ) + LuaClearStack( L) ; + // calcolo il frame equivalente come orientamento a quello globale ruotato dal quaternione + Frame3d frFrame ; + bool bOk = ToFrame( qtQ, frFrame) ; + if ( bOk) + LuaSetParam( L, frFrame) ; + else + LuaSetParam( L) ; + return 1 ; +} + //------------------------------------------------------------------------------- bool LuaInstallGeoBase( LuaMgr& luaMgr) @@ -557,5 +634,9 @@ LuaInstallGeoBase( LuaMgr& luaMgr) bOk = bOk && luaMgr.RegisterFunction( "EgtBBoxToGlob", LuaBBoxToGlob) ; bOk = bOk && luaMgr.RegisterFunction( "EgtBBoxToLoc", LuaBBoxToLoc) ; bOk = bOk && luaMgr.RegisterFunction( "EgtBBoxLocToLoc", LuaBBoxLocToLoc) ; + bOk = bOk && luaMgr.RegisterFunction( "EgtQuaternionFromAxisAngle", LuaQuaternionFromAxisAngle) ; + bOk = bOk && luaMgr.RegisterFunction( "EgtQuaternionToAxisAngle", LuaQuaternionToAxisAngle) ; + bOk = bOk && luaMgr.RegisterFunction( "EgtQuaternionFromFrame", LuaQuaternionFromFrame) ; + bOk = bOk && luaMgr.RegisterFunction( "EgtQuaternionToFrame", LuaQuaternionToFrame) ; return bOk ; }