Files
EgtExecutor/LUA_GeoBase.cpp
T
Dario Sassi 4f79e4baf9 EgtExecutor 2.6d4 :
- aggiunta di alcune funzioni lua per i Quaternion.
2024-04-14 18:18:13 +02:00

643 lines
17 KiB
C++

//----------------------------------------------------------------------------
// EgalTech 2014-2014
//----------------------------------------------------------------------------
// File : LUA_GeoBasel.cpp Data : 20.12.14 Versione : 1.5l2
// Contenuto : Funzioni generali per LUA.
//
//
//
// Modifiche : 27.09.14 DS Creazione modulo.
//
//
//----------------------------------------------------------------------------
//--------------------------- Include ----------------------------------------
#include "stdafx.h"
#include "LUA.h"
#include "/EgtDev/Include/EGkLuaAux.h"
using namespace std ;
//-------------------------------------------------------------------------------
static int
LuaVectorRotate( lua_State* L)
{
// 3 parametri : Vector, VtAsse, AngRot in gradi
Vector3d vtV ;
LuaCheckParam( L, 1, vtV)
Vector3d vtAx ;
LuaCheckParam( L, 2, vtAx)
double dAngRotDeg ;
LuaCheckParam( L, 3, dAngRotDeg)
LuaClearStack( L) ;
// eseguo la rotazione
if ( vtV.Rotate( vtAx, dAngRotDeg)) {
LuaSetParam( L, true) ;
LuaSetParam( L, vtV) ;
return 2 ;
}
else {
LuaSetParam( L, false) ;
return 1 ;
}
}
//-------------------------------------------------------------------------------
static int
LuaVectorMirror( lua_State* L)
{
// 2 parametri : Vector, VtN
Vector3d vtV ;
LuaCheckParam( L, 1, vtV)
Vector3d vtN ;
LuaCheckParam( L, 2, vtN)
LuaClearStack( L) ;
// eseguo il mirror
if ( vtV.Mirror( vtN)) {
LuaSetParam( L, true) ;
LuaSetParam( L, vtV) ;
return 2 ;
}
else {
LuaSetParam( L, false) ;
return 1 ;
}
}
//-------------------------------------------------------------------------------
static int
LuaVectorToGlob( lua_State* L)
{
// 2 parametri : Vector, frame di trasformazione
Vector3d vtV ;
LuaCheckParam( L, 1, vtV)
Frame3d frTool ;
LuaCheckParam( L, 2, frTool)
LuaClearStack( L) ;
// eseguo la trasformazione
if ( vtV.ToGlob( frTool)) {
LuaSetParam( L, true) ;
LuaSetParam( L, vtV) ;
return 2 ;
}
else {
LuaSetParam( L, false) ;
return 1 ;
}
}
//-------------------------------------------------------------------------------
static int
LuaVectorToLoc( lua_State* L)
{
// 2 parametri : Vector, frame di trasformazione
Vector3d vtV ;
LuaCheckParam( L, 1, vtV)
Frame3d frTool ;
LuaCheckParam( L, 2, frTool)
LuaClearStack( L) ;
// eseguo la trasformazione
if ( vtV.ToLoc( frTool)) {
LuaSetParam( L, true) ;
LuaSetParam( L, vtV) ;
return 2 ;
}
else {
LuaSetParam( L, false) ;
return 1 ;
}
}
//-------------------------------------------------------------------------------
static int
LuaVectorLocToLoc( lua_State* L)
{
// 3 parametri : Vector, frame origine, frame destinazione
Vector3d vtV ;
LuaCheckParam( L, 1, vtV)
Frame3d frOri ;
LuaCheckParam( L, 2, frOri)
Frame3d frDest ;
LuaCheckParam( L, 3, frDest)
LuaClearStack( L) ;
// eseguo la trasformazione
if ( vtV.LocToLoc( frOri, frDest)) {
LuaSetParam( L, true) ;
LuaSetParam( L, vtV) ;
return 2 ;
}
else {
LuaSetParam( L, false) ;
return 1 ;
}
}
//-------------------------------------------------------------------------------
static int
LuaPointRotate( lua_State* L)
{
// 4 parametri : Point, PtAsse, VtAsse, AngRot in gradi
Point3d ptP ;
LuaCheckParam( L, 1, ptP)
Point3d ptAx ;
LuaCheckParam( L, 2, ptAx)
Vector3d vtAx ;
LuaCheckParam( L, 3, vtAx)
double dAngRotDeg ;
LuaCheckParam( L, 4, dAngRotDeg)
LuaClearStack( L) ;
// eseguo la rotazione
if ( ptP.Rotate( ptAx, vtAx, dAngRotDeg)) {
LuaSetParam( L, true) ;
LuaSetParam( L, ptP) ;
return 2 ;
}
else {
LuaSetParam( L, false) ;
return 1 ;
}
}
//-------------------------------------------------------------------------------
static int
LuaPointMirror( lua_State* L)
{
// 3 parametri : Point, PtOn, VtN
Point3d ptP ;
LuaCheckParam( L, 1, ptP)
Point3d ptOn ;
LuaCheckParam( L, 2, ptOn)
Vector3d vtN ;
LuaCheckParam( L, 3, vtN)
LuaClearStack( L) ;
// eseguo il mirror
if ( ptP.Mirror( ptOn, vtN)) {
LuaSetParam( L, true) ;
LuaSetParam( L, ptP) ;
return 2 ;
}
else {
LuaSetParam( L, false) ;
return 1 ;
}
}
//-------------------------------------------------------------------------------
static int
LuaPointToGlob( lua_State* L)
{
// 2 parametri : Point, frame di trasformazione
Point3d ptP ;
LuaCheckParam( L, 1, ptP)
Frame3d frTool ;
LuaCheckParam( L, 2, frTool)
LuaClearStack( L) ;
// eseguo la trasformazione
if ( ptP.ToGlob( frTool)) {
LuaSetParam( L, true) ;
LuaSetParam( L, ptP) ;
return 2 ;
}
else {
LuaSetParam( L, false) ;
return 1 ;
}
}
//-------------------------------------------------------------------------------
static int
LuaPointToLoc( lua_State* L)
{
// 2 parametri : Point, frame di trasformazione
Point3d ptP ;
LuaCheckParam( L, 1, ptP)
Frame3d frTool ;
LuaCheckParam( L, 2, frTool)
LuaClearStack( L) ;
// eseguo la trasformazione
if ( ptP.ToLoc( frTool)) {
LuaSetParam( L, true) ;
LuaSetParam( L, ptP) ;
return 2 ;
}
else {
LuaSetParam( L, false) ;
return 1 ;
}
}
//-------------------------------------------------------------------------------
static int
LuaPointLocToLoc( lua_State* L)
{
// 3 parametri : Point, frame origine, frame destinazione
Point3d ptP ;
LuaCheckParam( L, 1, ptP)
Frame3d frOri ;
LuaCheckParam( L, 2, frOri)
Frame3d frDest ;
LuaCheckParam( L, 3, frDest)
LuaClearStack( L) ;
// eseguo la trasformazione
if ( ptP.LocToLoc( frOri, frDest)) {
LuaSetParam( L, true) ;
LuaSetParam( L, ptP) ;
return 2 ;
}
else {
LuaSetParam( L, false) ;
return 1 ;
}
}
//-------------------------------------------------------------------------------
static int
LuaFrameFrom3Points( lua_State* L)
{
// 3 parametri : origine, punto su X, punto vicino a Y
Point3d ptOrig ;
LuaCheckParam( L, 1, ptOrig)
Point3d ptOnX ;
LuaCheckParam( L, 2, ptOnX)
Point3d ptNearY ;
LuaCheckParam( L, 3, ptNearY)
LuaClearStack( L) ;
// calcolo il riferimento e restituisco il risultato : bOk, Frame
Frame3d frTemp ;
if ( frTemp.Set( ptOrig, ptOnX, ptNearY)) {
LuaSetParam( L, true) ;
LuaSetParam( L, frTemp) ;
return 2 ;
}
else {
LuaSetParam( L, false) ;
return 1 ;
}
}
//-------------------------------------------------------------------------------
static int
LuaFrameOCS( lua_State* L)
{
// 2 parametri : origine, asse Z
Point3d ptOrig ;
LuaCheckParam( L, 1, ptOrig)
Vector3d vtDirZ ;
LuaCheckParam( L, 2, vtDirZ)
LuaClearStack( L) ;
// calcolo il riferimento e restituisco il risultato : bOk, Frame
Frame3d frTemp ;
if ( frTemp.Set( ptOrig, vtDirZ)) {
LuaSetParam( L, true) ;
LuaSetParam( L, frTemp) ;
return 2 ;
}
else {
LuaSetParam( L, false) ;
return 1 ;
}
}
//-------------------------------------------------------------------------------
static int
LuaFrameRotate( lua_State* L)
{
// 4 parametri : Frame, PtAsse, VtAsse, AngRot in gradi
Frame3d frFrame ;
LuaCheckParam( L, 1, frFrame)
Point3d ptAx ;
LuaCheckParam( L, 2, ptAx)
Vector3d vtAx ;
LuaCheckParam( L, 3, vtAx)
double dAngRotDeg ;
LuaCheckParam( L, 4, dAngRotDeg)
LuaClearStack( L) ;
// eseguo la rotazione
if ( frFrame.Rotate( ptAx, vtAx, dAngRotDeg)) {
LuaSetParam( L, true) ;
LuaSetParam( L, frFrame) ;
return 2 ;
}
else {
LuaSetParam( L, false) ;
return 1 ;
}
}
//-------------------------------------------------------------------------------
static int
LuaFrameToGlob( lua_State* L)
{
// 2 parametri : frame, frame di trasformazione
Frame3d frFrame ;
LuaCheckParam( L, 1, frFrame)
Frame3d frTool ;
LuaCheckParam( L, 2, frTool)
LuaClearStack( L) ;
// eseguo la trasformazione
if ( frFrame.ToGlob( frTool)) {
LuaSetParam( L, true) ;
LuaSetParam( L, frFrame) ;
return 2 ;
}
else {
LuaSetParam( L, false) ;
return 1 ;
}
}
//-------------------------------------------------------------------------------
static int
LuaFrameToLoc( lua_State* L)
{
// 2 parametri : frame, frame di trasformazione
Frame3d frFrame ;
LuaCheckParam( L, 1, frFrame)
Frame3d frTool ;
LuaCheckParam( L, 2, frTool)
LuaClearStack( L) ;
// eseguo la trasformazione
if ( frFrame.ToLoc( frTool)) {
LuaSetParam( L, true) ;
LuaSetParam( L, frFrame) ;
return 2 ;
}
else {
LuaSetParam( L, false) ;
return 1 ;
}
}
//-------------------------------------------------------------------------------
static int
LuaFrameLocToLoc( lua_State* L)
{
// 3 parametri : frame, frame origine, frame destinazione
Frame3d frFrame ;
LuaCheckParam( L, 1, frFrame)
Frame3d frOri ;
LuaCheckParam( L, 2, frOri)
Frame3d frDest ;
LuaCheckParam( L, 3, frDest)
LuaClearStack( L) ;
// eseguo la trasformazione
if ( frFrame.LocToLoc( frOri, frDest)) {
LuaSetParam( L, true) ;
LuaSetParam( L, frFrame) ;
return 2 ;
}
else {
LuaSetParam( L, false) ;
return 1 ;
}
}
//-------------------------------------------------------------------------------
static int
LuaFrameGetRotationsCAC1( lua_State* L)
{
// 1 parametro : frame
Frame3d frFrame ;
LuaCheckParam( L, 1, frFrame)
LuaClearStack( L) ;
// calcolo gli angoli di rotazione
double dAngCDeg, dAngADeg, dAngC1Deg ;
if ( frFrame.GetRotationsCAC1( dAngCDeg, dAngADeg, dAngC1Deg)) {
LuaSetParam( L, dAngCDeg) ;
LuaSetParam( L, dAngADeg) ;
LuaSetParam( L, dAngC1Deg) ;
return 3 ;
}
else {
LuaSetParam( L) ;
return 1 ;
}
}
//-------------------------------------------------------------------------------
static int
LuaFrameGetFixedAxesRotationsABC( lua_State* L)
{
// 1 parametro : frame
Frame3d frFrame ;
LuaCheckParam( L, 1, frFrame)
LuaClearStack( L) ;
// calcolo gli angoli di rotazione
double dAngADeg, dAngBDeg, dAngCDeg ;
if ( frFrame.GetFixedAxesRotationsABC( dAngADeg, dAngBDeg, dAngCDeg)) {
LuaSetParam( L, dAngADeg) ;
LuaSetParam( L, dAngBDeg) ;
LuaSetParam( L, dAngCDeg) ;
return 3 ;
}
else {
LuaSetParam( L) ;
return 1 ;
}
}
//-------------------------------------------------------------------------------
static int
LuaBBoxRotate( lua_State* L)
{
// 4 parametri : bbox, PtAsse, VtAsse, AngRot in gradi
BBox3d b3Box ;
LuaCheckParam( L, 1, b3Box)
Point3d ptAx ;
LuaCheckParam( L, 2, ptAx)
Vector3d vtAx ;
LuaCheckParam( L, 3, vtAx)
double dAngRotDeg ;
LuaCheckParam( L, 4, dAngRotDeg)
LuaClearStack( L) ;
// eseguo la rotazione
if ( b3Box.Rotate( ptAx, vtAx, dAngRotDeg)) {
LuaSetParam( L, true) ;
LuaSetParam( L, b3Box) ;
return 2 ;
}
else {
LuaSetParam( L, false) ;
return 1 ;
}
}
//-------------------------------------------------------------------------------
static int
LuaBBoxToGlob( lua_State* L)
{
// 2 parametri : bbox, frame di trasformazione
BBox3d b3Box ;
LuaCheckParam( L, 1, b3Box)
Frame3d frTool ;
LuaCheckParam( L, 2, frTool)
LuaClearStack( L) ;
// eseguo la trasformazione
if ( b3Box.ToGlob( frTool)) {
LuaSetParam( L, true) ;
LuaSetParam( L, b3Box) ;
return 2 ;
}
else {
LuaSetParam( L, false) ;
return 1 ;
}
}
//-------------------------------------------------------------------------------
static int
LuaBBoxToLoc( lua_State* L)
{
// 2 parametri : bbox, frame di trasformazione
BBox3d b3Box ;
LuaCheckParam( L, 1, b3Box)
Frame3d frTool ;
LuaCheckParam( L, 2, frTool)
LuaClearStack( L) ;
// eseguo la trasformazione
if ( b3Box.ToLoc( frTool)) {
LuaSetParam( L, true) ;
LuaSetParam( L, b3Box) ;
return 2 ;
}
else {
LuaSetParam( L, false) ;
return 1 ;
}
}
//-------------------------------------------------------------------------------
static int
LuaBBoxLocToLoc( lua_State* L)
{
// 3 parametri : bbox, frame origine, frame destinazione
BBox3d b3Box ;
LuaCheckParam( L, 1, b3Box)
Frame3d frOri ;
LuaCheckParam( L, 2, frOri)
Frame3d frDest ;
LuaCheckParam( L, 3, frDest)
LuaClearStack( L) ;
// eseguo la trasformazione
if ( b3Box.LocToLoc( frOri, frDest)) {
LuaSetParam( L, true) ;
LuaSetParam( L, b3Box) ;
return 2 ;
}
else {
LuaSetParam( L, false) ;
return 1 ;
}
}
//-------------------------------------------------------------------------------
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)
{
bool bOk = ( &luaMgr != nullptr) ;
bOk = bOk && luaMgr.RegisterFunction( "EgtVectorRotate", LuaVectorRotate) ;
bOk = bOk && luaMgr.RegisterFunction( "EgtVectorMirror", LuaVectorMirror) ;
bOk = bOk && luaMgr.RegisterFunction( "EgtVectorToGlob", LuaVectorToGlob) ;
bOk = bOk && luaMgr.RegisterFunction( "EgtVectorToLoc", LuaVectorToLoc) ;
bOk = bOk && luaMgr.RegisterFunction( "EgtVectorLocToLoc", LuaVectorLocToLoc) ;
bOk = bOk && luaMgr.RegisterFunction( "EgtPointRotate", LuaPointRotate) ;
bOk = bOk && luaMgr.RegisterFunction( "EgtPointMirror", LuaPointMirror) ;
bOk = bOk && luaMgr.RegisterFunction( "EgtPointToGlob", LuaPointToGlob) ;
bOk = bOk && luaMgr.RegisterFunction( "EgtPointToLoc", LuaPointToLoc) ;
bOk = bOk && luaMgr.RegisterFunction( "EgtPointLocToLoc", LuaPointLocToLoc) ;
bOk = bOk && luaMgr.RegisterFunction( "EgtFrameFrom3Points", LuaFrameFrom3Points) ;
bOk = bOk && luaMgr.RegisterFunction( "EgtFrameOCS", LuaFrameOCS) ;
bOk = bOk && luaMgr.RegisterFunction( "EgtFrameRotate", LuaFrameRotate) ;
bOk = bOk && luaMgr.RegisterFunction( "EgtFrameToGlob", LuaFrameToGlob) ;
bOk = bOk && luaMgr.RegisterFunction( "EgtFrameToLoc", LuaFrameToLoc) ;
bOk = bOk && luaMgr.RegisterFunction( "EgtFrameLocToLoc", LuaFrameLocToLoc) ;
bOk = bOk && luaMgr.RegisterFunction( "EgtFrameGetRotCAC1", LuaFrameGetRotationsCAC1) ;
bOk = bOk && luaMgr.RegisterFunction( "EgtFrameGetFixedAxesRotABC", LuaFrameGetFixedAxesRotationsABC) ;
bOk = bOk && luaMgr.RegisterFunction( "EgtBBoxRotate", LuaBBoxRotate) ;
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 ;
}