Files
EgtExecutor/Lua_Trimming.cpp
T
Riccardo Elitropi 0e8f8d0502 EgtExecutor :
- prima versione per Trimming.
2025-12-22 17:07:44 +01:00

295 lines
10 KiB
C++

//----------------------------------------------------------------------------
// EgalTech 2025-2025
//----------------------------------------------------------------------------
// File : LUA_Trimming.cpp Data : 23.10.25 Versione : 2.7j3
// Contenuto : Funzioni per le lavorazioni di Trimming.
//
// Modifiche : 23.10.25 RE Creazione modulo.
//
//
//----------------------------------------------------------------------------
//--------------------------- Include ----------------------------------------
#include "stdafx.h"
#include "LUA.h"
#include "/EgtDev/Include/EXeExecutor.h"
#include "/EgtDev/Include/EXeConst.h"
#include "/EgtDev/Include/EGkLuaAux.h"
#include "/EgtDev/Include/EGnStringUtils.h"
using namespace std ;
// ------------------------------------------------------------------------------
static int
LuaTrimmingAutoSearch( lua_State* L)
{
// 9 Parametri : nParentId, nSurfLayerId, dShapeLinTol, dShapeAngTol, dLinTol, dEdgeLinTol, dAngTol, dAngFaceTol, vsShapes
int nParentId ;
LuaCheckParam( L, 1, nParentId) ;
int nSurfLayerId ;
LuaCheckParam( L, 2, nSurfLayerId) ;
double dShapeLinTol ;
LuaCheckParam( L, 3, dShapeLinTol) ;
double dShapeAngTol ;
LuaCheckParam( L, 4, dShapeAngTol) ;
double dLinTol ;
LuaCheckParam( L, 5, dLinTol) ;
double dEdgeLinTol ;
LuaCheckParam( L, 6, dEdgeLinTol) ;
double dAngTol ;
LuaCheckParam( L, 7, dAngTol) ;
double dAngFaceTol ;
LuaCheckParam( L, 8, dAngFaceTol) ;
STRVECTOR vsShapes ;
LuaCheckParam( L, 9, vsShapes) ;
LuaClearStack( L) ;
// Recupero le lavorazioni di Trimming associate
INTVECTOR vOtherFaces ;
bool bOk = ExeTrimmingAutoSearch( nParentId, nSurfLayerId, dShapeLinTol, dShapeAngTol, dLinTol,
dEdgeLinTol, dAngTol, dAngFaceTol, vsShapes) ;
return bOk ;
}
// ------------------------------------------------------------------------------
static int
LuaTrimmingGetSurfTmFaceAdj( lua_State* L)
{
// 3 parametri : nSurfId, vFaces, dAngTol
int nSurfId = GDB_ID_NULL ;
LuaCheckParam( L, 1, nSurfId) ;
INTVECTOR vTria ;
LuaCheckParam( L, 2, vTria) ;
PNTVECTOR vPts ;
LuaCheckParam( L, 3, vPts) ;
double dAngTol = 0. ;
LuaCheckParam( L, 4, dAngTol) ;
double dSize = 0. ;
LuaCheckParam( L, 5, dSize) ;
double dSizeTol = 0. ;
LuaCheckParam( L, 6, dSizeTol) ;
LuaClearStack( L) ;
// Recupero le facce adiacenti in tolleranza angolare
INTVECTOR vOtherFaces ;
bool bOk = ExeTrimmingGetSurfTmFaceAdj( nSurfId, vTria, vPts, dAngTol, dSize, dSizeTol, vOtherFaces) ;
LuaSetParam( L, bOk) ;
if ( bOk)
LuaSetParam( L, vOtherFaces) ;
return 2 ;
}
// ------------------------------------------------------------------------------
static int
LuaTrimmingGetSurfTmFromStmFaces( lua_State* L)
{
// 3 Parametri : nParentId, nSurfId, vFaces
int nParentId = GDB_ID_NULL ;
LuaCheckParam( L, 1, nParentId) ;
int nSurfId = GDB_ID_NULL ;
LuaCheckParam( L, 2, nSurfId) ;
INTVECTOR vFaces ;
LuaCheckParam( L, 3, vFaces) ;
LuaClearStack( L) ;
int nNewSurfId = ExeTrimmingGetSurfTmFromStmFaces( nParentId, nSurfId, vFaces) ;
LuaSetParam( L, nNewSurfId) ;
return 1 ;
}
// ------------------------------------------------------------------------------
static int
LuaTrimmingGetAdjSurfs( lua_State* L)
{
// 4 parametri : nRefSfrId, vAllSurfId, dLinTol, dAngTol
INTVECTOR vRefSurfId ;
LuaCheckParam( L, 1, vRefSurfId) ;
INTVECTOR vOtherSurfId ;
LuaCheckParam( L, 2, vOtherSurfId) ;
double dLinTol ;
LuaCheckParam( L, 3, dLinTol) ;
double dAngTol ;
LuaCheckParam( L, 4, dAngTol) ;
double dAngFaceTol ;
LuaCheckParam( L, 5, dAngFaceTol) ;
LuaClearStack( L) ;
// Calcolo le facce adianceti per tolleranza
INTVECTOR vOtherSurf ;
bool bOk = ExeTrimmingGetAdjSurfs( vRefSurfId, vOtherSurfId, dLinTol, dAngTol, dAngFaceTol, vOtherSurf) ;
// Restituisco il risultato
LuaSetParam( L, bOk) ;
LuaSetParam( L, vOtherSurf) ;
return 2 ;
}
// -------------------------------------------------------------------------------
static int
LuaTrimmingGetBorders( lua_State* L)
{
// 4 parametri : nParentId, vIds, dLinTol, dAngTol
int nParentId ;
LuaCheckParam( L, 1, nParentId) ;
SELVECTOR vIds ;
LuaCheckParam( L, 2, vIds) ;
double dLinTol ;
LuaCheckParam( L, 3, dLinTol) ;
double dAngTol ;
LuaCheckParam( L, 4, dAngTol) ;
// Creo le curve di Edge grezze
int nCount = 0 ;
int nFirstId = GDB_ID_NULL ;
bool bOk = ExeTrimmingGetBorders( nParentId, vIds, dLinTol, dAngTol, nCount, nFirstId) ;
LuaSetParam( L, bOk) ;
LuaSetParam( L, nFirstId) ;
LuaSetParam( L, nCount) ;
return 3 ;
}
// -------------------------------------------------------------------------------
static int
LuaTrimmingGetBordersByNormals( lua_State* L)
{
// 5 o 6 parametri : nParentId, vIds, dLinTol, dAngTol, dThickness, ptNear
int nParentId ;
LuaCheckParam( L, 1, nParentId) ;
SELVECTOR vIds ;
LuaCheckParam( L, 2, vIds) ;
double dLinTol ;
LuaCheckParam( L, 3, dLinTol) ;
double dAngTol ;
LuaCheckParam( L, 4, dAngTol) ;
double dThickness = 10. * EPS_SMALL ;
LuaCheckParam( L, 5, dThickness) ;
Point3d ptNear = P_INVALID ;
LuaGetParam( L, 6, ptNear) ;
// Creo le curve di Edge grezze
int nCount = 0 ;
int nFirstId = GDB_ID_NULL ;
bool bOk = ExeTrimmingGetBordersByNormals( nParentId, vIds, dLinTol, dAngTol, dThickness, ptNear, nCount, nFirstId) ;
LuaSetParam( L, bOk) ;
LuaSetParam( L, nFirstId) ;
LuaSetParam( L, nCount) ;
return 3 ;
}
// -------------------------------------------------------------------------------
static int
LuaTrimmingGetFinalBorders( lua_State* L)
{
// 4 o 5 o 6 o 7 parametri : nParentId, vCrvBezierId, dLinTol, dAngTol [,vBreakingPts] [,dThick] [,dThickTol]
int nParentId ;
LuaCheckParam( L, 1, nParentId) ;
INTVECTOR vCrvBezierId ;
LuaCheckParam( L, 2, vCrvBezierId) ;
double dLinTol ;
LuaCheckParam( L, 3, dLinTol) ;
double dAngTol ;
LuaCheckParam( L, 4, dAngTol) ;
PNTVECTOR vBreakingPts ;
double dThick = 0., dThickTol = EPS_SMALL ;
int nInd = 5 ;
if ( LuaGetParam( L, nInd, vBreakingPts))
++ nInd ;
if ( LuaGetParam( L, nInd, dThick)) {
if ( ! LuaGetParam( L, nInd + 1, dThickTol)) {
LuaSetParam( L, false) ;
return 1 ;
}
}
// Creo le curve Edges
int nCount = 0 ;
int nFirstId = GDB_ID_NULL ;
bool bOk = ExeTrimmingGetFinalBorders( nParentId, vCrvBezierId, dLinTol, dAngTol, vBreakingPts, dThick, dThickTol,
nFirstId, nCount) ;
LuaSetParam( L, bOk) ;
LuaSetParam( L, nFirstId) ;
LuaSetParam( L, nCount) ;
return 3 ;
}
//-------------------------------------------------------------------------------
static int
LuaTrimmingGetRuledBezier( lua_State* L)
{
// 5 o 6 parametri : nParentId, vIds, nEdge1Id, nEdge2Id, dLinTol [,vSyncPointsIds]
int nParentId ;
LuaCheckParam( L, 1, nParentId) ;
INTVECTOR vIds ;
LuaCheckParam( L, 2, vIds) ; // serve per orientare la superficie rigata ( Ids delle superfici)
int nEdge1Id ;
LuaCheckParam( L, 3, nEdge1Id) ;
int nEdge2Id ;
LuaCheckParam( L, 4, nEdge2Id) ;
double dLinTol ;
LuaCheckParam( L, 5, dLinTol) ;
INTVECTOR vnLineId ;
LuaGetParam( L, 6, vnLineId) ;
LuaClearStack( L) ;
// Calcolo la superficie di Bezier rigata
int nId = ExeTrimmingGetRuledBezier( nParentId, vIds, nEdge1Id, nEdge2Id, dLinTol, vnLineId) ;
LuaSetParam( L, nId) ;
return 1 ;
}
//-------------------------------------------------------------------------------
static int
LuaTrimmingGetSurfBzSyncPoints( lua_State* L)
{
// 4 o 5 parametri : nParentId, nEdge0Id, nEdge1Id, dLinTol [,nMaxLines]
int nParentId ;
LuaCheckParam( L, 1, nParentId) ;
int nEdge1Id ;
LuaCheckParam( L, 2, nEdge1Id) ;
int nEdge2Id ;
LuaCheckParam( L, 3, nEdge2Id) ;
double dLinTol ;
LuaCheckParam( L, 4, dLinTol) ;
// Inserisco i tratti lineari associati ai punti di sincronizzazione
int nFirstId = GDB_ID_NULL ;
int nCount = 0 ;
bool bOk = ExeTrimmingGetSurfBzSyncPoints( nParentId, nEdge1Id, nEdge2Id, dLinTol, nFirstId, nCount) ;
LuaSetParam( L, bOk) ;
LuaSetParam( L, nFirstId) ;
LuaSetParam( L, nCount) ;
return 3 ;
}
// ------------------------------------------------------------------------------
static int
LuaTrimmingSkimSyncPoints( lua_State* L)
{
// 5 o 6 parametri : nEdge1Id, nEdge2Id, vnLineId, dLinTol, dAngTol [,nMaxInvLine]
int nEdge1Id ;
LuaCheckParam( L, 1, nEdge1Id) ;
int nEdge2Id ;
LuaCheckParam( L, 2, nEdge2Id) ;
INTVECTOR vnLineId ;
LuaCheckParam( L, 3, vnLineId) ;
double dLinTol ;
LuaCheckParam( L, 4, dLinTol) ;
double dAngTol ;
LuaCheckParam( L, 5, dAngTol) ;
int nMaxInvLine = 4 ;
LuaGetParam( L, 6, nMaxInvLine) ;
// Nascondo/Visualizzo i tratti lineari di sincronizzazione
bool bOk = ExeTrimmingSkimSyncPoints( nEdge1Id, nEdge2Id, vnLineId, dLinTol, dAngTol, nMaxInvLine) ;
LuaSetParam( L, bOk) ;
return 1 ;
}
//-------------------------------------------------------------------------------
bool
LuaInstallTrimming( LuaMgr& luaMgr)
{
bool bOk = ( &luaMgr != nullptr) ;
// ---
bOk = bOk && luaMgr.RegisterFunction( "EgtTrimmingAutoSearch", LuaTrimmingAutoSearch) ;
// ---
bOk = bOk && luaMgr.RegisterFunction( "EgtTrimmingGetSurfTmFaceAdj", LuaTrimmingGetSurfTmFaceAdj) ;
bOk = bOk && luaMgr.RegisterFunction( "EgtTrimmingGetSurfTmFromStmFaces", LuaTrimmingGetSurfTmFromStmFaces) ;
bOk = bOk && luaMgr.RegisterFunction( "EgtTrimmingGetAdjSurf", LuaTrimmingGetAdjSurfs) ;
bOk = bOk && luaMgr.RegisterFunction( "EgtTrimmingGetBorders", LuaTrimmingGetBorders) ;
bOk = bOk && luaMgr.RegisterFunction( "EgtTrimmingGetBordersByNormals", LuaTrimmingGetBordersByNormals) ;
bOk = bOk && luaMgr.RegisterFunction( "EgtTrimmingGetFinalBorders", LuaTrimmingGetFinalBorders) ;
bOk = bOk && luaMgr.RegisterFunction( "EgtTrimmingGetRuledBezier", LuaTrimmingGetRuledBezier) ;
bOk = bOk && luaMgr.RegisterFunction( "EgtTrimmingGetSurfBzSyncPoints", LuaTrimmingGetSurfBzSyncPoints) ;
bOk = bOk && luaMgr.RegisterFunction( "EgtTrimmingSkimSyncPoints", LuaTrimmingSkimSyncPoints) ;
return bOk ;
}