Trimming 3.1a7 :

- aggiunte funzioni di interpolazione per le curve di sincronizzazione
- priva versione di "settings" per colori.
This commit is contained in:
Riccardo Elitropi
2026-02-20 16:57:00 +01:00
parent e39fdf5ac2
commit 25e8038aa6
8 changed files with 275 additions and 84 deletions
-64
View File
@@ -1,64 +0,0 @@
-- EndEditSyncLines.lua by Egalware s.r.l. 2026/01/05
require( 'EgtBase')
_ENV = EgtProtectGlobal()
EgtEnableDebug( false)
-- Carico le costanti di Trimming
EgtAddToPackagePath( EgtGetSourceDir() .. '?.lua')
local GlobVar = require( 'TrimmingLib')
-- Costante di Errore
local ERROR_EDIT_SYNC_CURVES = 'Error in Edit Sync Curves : '
-- Recupero il Part e Layer di Trimming corrente ( o di riferimento)
local nCurrPartId = EgtGetCurrPart()
local nCurrLayerId = GlobVar.GetTrimmingLayerRefId( EgtGetCurrLayer())
if not GlobVar.IsTrimmingLayer( nCurrLayerId) then
EgtOutBox( ERROR_EDIT_SYNC_CURVES .. 'Not a valid Trimming Layer', 'Error', 'ERROR', 'OK')
return
end
-- Recupero il Layer di Edit delle curve di Sincronizzazione, se non esiste, errore
local nLayerEditSyncId = GlobVar.GetCurrentEditSyncCurvesLayer( nCurrPartId)
if not nLayerEditSyncId or nLayerEditSyncId == GDB_ID.NULL then
EgtOutBox( ERROR_EDIT_SYNC_CURVES .. 'No Edit Layer created', 'Error', 'ERROR', 'OK')
return
end
-- Se il Layer di Salvataggio non esiste lo Creo, altrimenti lo Svuoto
local nLayerStoredSyncId = GlobVar.GetCurrentStoredCurvesLayer( nCurrPartId)
if not nLayerStoredSyncId or nLayerStoredSyncId == GDB_ID.NULL then
nLayerStoredSyncId = GlobVar.CreateSyncStoredCurvesLayer( nCurrPartId, nCurrLayerId)
if not nLayerStoredSyncId or nLayerStoredSyncId == GDB_ID.NULL then
EgtOutBox( ERROR_EDIT_SYNC_CURVES .. 'Defining Part failed', 'Error', 'ERROR', 'OK')
return
end
else EgtEmptyGroup( nLayerStoredSyncId) end
-- Rialloco le Curve del Layer di Edit in quest'ultimo
local vIdToRelocate = {}
local nId = EgtGetFirstInGroup( nLayerEditSyncId)
while nId do
-- Verifico che sia una curva prima di inserirla
local nType = EgtGetType( nId)
if nType == GDB_TY.CRV_COMPO or nType == GDB_TY.CRV_BEZ or nType == GDB_TY.CRV_ARC or nType == GDB_TY.CRV_LINE then table.insert( vIdToRelocate, nId) end
nId = EgtGetNext( nId)
end
for i = 1, #vIdToRelocate do EgtRelocateGlob( vIdToRelocate[i], nLayerStoredSyncId) end
-- Cancello il Layer di Edit, metto il Focus sul Layer di Selezione ( Cancellando eventuali Superfici Ruled) e rendo Visibile il Layer di Salvataggio
EgtErase( nLayerEditSyncId)
EgtSetCurrPartLayer( nCurrPartId, nCurrLayerId)
local vIdToErase = {}
nId = EgtGetFirstNameInGroup( nCurrLayerId, RULED_BZ_NAME)
while nId do
table.insert( vIdToErase, nId)
nId = EgtGetNextName( nId, RULED_BZ_NAME)
end
EgtErase( vIdToErase)
EgtSetStatus( nCurrLayerId, GDB_ST.ON)
EgtSetStatus( nLayerStoredSyncId, GDB_ST.ON)
EgtOutBox( 'Sync Curves correctly saved', 'Edit Sync', 'INFO', 'OK')
-- Aggiorno la Grafica
EgtDraw()
Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

+85
View File
@@ -0,0 +1,85 @@
-- InterpolateSyncLines.lua by Egalware s.r.l. 2026/02/18
require( 'EgtBase')
_ENV = EgtProtectGlobal()
EgtEnableDebug( false)
-- Carico le costanti di Trimming
EgtAddToPackagePath( EgtGetSourceDir() .. '?.lua')
local GlobVar = require( 'TrimmingLib')
-- Costante di Errore
local ERROR_EDIT_SYNC_CURVES = 'Error in Edit Sync Curves : '
-- Recupero il Part e Layer di Trimming corrente ( o di riferimento)
local nCurrPartId = EgtGetCurrPart()
local nCurrLayerId = GlobVar.GetTrimmingLayerRefId( EgtGetCurrLayer())
if not GlobVar.IsTrimmingLayer( nCurrLayerId) then
EgtOutBox( ERROR_EDIT_SYNC_CURVES .. 'Not a valid Trimming Layer', 'Error', 'ERROR', 'OK')
return
end
-- Recupero il Layer di Edit
local nLayerEditId = GlobVar.GetCurrentEditSyncCurvesLayer( nCurrPartId, nCurrLayerId)
if ( not nLayerEditId or nLayerEditId == GDB_ID.NULL) then
EgtOutBox( ERROR_EDIT_SYNC_CURVES .. 'Not a valid Edit mode created', 'Error', 'ERROR', 'OK')
return
end
-- Recupero le Info
local dEdgeLinTol = EgtGetInfo( nCurrLayerId, KEY_LIN_TOL_EDGES, 'd')
local dEdgeAngTol = EgtGetInfo( nCurrLayerId, KEY_ANG_TOL_EDGES, 'd')
local bOk = ( dEdgeLinTol ~= nil and dEdgeAngTol ~= nil)
if not bOk then
EgtOutBox( ERROR_EDIT_SYNC_CURVES .. 'No Trimming Machining created', 'Error', 'ERROR', 'OK')
return
end
-- Recupero le due curve linee di sincronizzazione
local nFirstSync = EgtGetFirstSelectedObj()
local nSecondSync = EgtGetNextSelectedObj()
if not nFirstSync or not nSecondSync or nFirstSync == GDB_ID.NULL or nSecondSync == GDB_ID.NULL then
EgtOutBox( ERROR_EDIT_SYNC_CURVES .. 'Not two Sync Lines Selected', 'Error', 'ERROR', 'OK')
return
end
local nFirstType = EgtGetType( nFirstSync)
local nSecondType = EgtGetType( nSecondSync)
if nFirstType ~= GDB_TY.CRV_LINE and nFirstSync ~= GDB_TY.CRV_COMPO and nSecondType ~= GDB_TY.CRV_LINE and nSecondType ~= GDB_TY.CRV_COMPO then
EgtOutBox( ERROR_EDIT_SYNC_CURVES .. 'Not two Sync Lines Selected', 'Error', 'ERROR', 'OK')
return
end
-- Recupero le Curve di Bordo presenti nel Layer di Trimming corrente
local nId = EgtGetFirstInGroup( nCurrLayerId)
local vnBzCrvId = {}
while nId do
local sName = EgtGetName( nId)
if sName == EDGES_NAME then table.insert( vnBzCrvId, nId) end
nId = EgtGetNext( nId)
end
if #vnBzCrvId ~= 2 then
EgtOutBox( ERROR_EDIT_SYNC_CURVES .. 'No Borders found', 'Error', 'ERROR', 'OK')
return
end
-- Inserisco le linee di Sincronizzazione Interpolate
local nFirstId = GDB_ID.NULL
local nCount = 0
bOk, nFirstId, nCount = EgtTrimmingInterpolateSyncLines( nLayerEditId, nFirstSync, nSecondSync, vnBzCrvId[1], vnBzCrvId[2], dEdgeLinTol, dEdgeAngTol)
if not bOk or nFirstId == GDB_ID.NULL or nCount == 0 then
EgtOutBox( ERROR_EDIT_SYNC_CURVES .. 'Invalid Interpolation', 'Error', 'ERROR', 'OK')
return
end
-- Cambio il colore alle due Linee di Sincronizzaione selezionate e alle nuove calcolate
EgtSetColor( nFirstSync, SYNC_LINE_INTERP_COLOR)
EgtSetColor( nSecondSync, SYNC_LINE_INTERP_COLOR)
for i = 0, nCount do
EgtSetColor( nFirstId + i, SYNC_LINE_INTERP_COLOR)
EgtSetName( nFirstId + i, SYNC_LINE_NAME)
end
-- Metto il Focus sul Layer di Sincronizzazione delle curve
EgtSetCurrPartLayer( nCurrPartId, nLayerEditId)
-- Aggiorno la Grafica
EgtDraw()
+63
View File
@@ -0,0 +1,63 @@
-- NewTrimming.lua by Egalware s.r.l. 2026/01/05
require( 'EgtBase')
_ENV = EgtProtectGlobal()
EgtEnableDebug( false)
-- Carico le costanti di Trimming
EgtAddToPackagePath( EgtGetSourceDir() .. '?.lua')
local GlobVar = require( 'TrimmingLib')
-- Costante di Errore
local ERROR_SETTINGS = 'Error in Surf Selection : '
-- Recupero il File Ini
local sFileIni = EgtGetIniFile()
if not sFileIni then
EgtOutBox( ERROR_SETTINGS .. '.ini File not Found', 'Error', 'ERROR', 'OK')
return
end
-- Recupero i Colori in Hex come stringhe
local sHexSurfSelColor = GlobVar.GetColorFromRGBToHex( SELECTION_SURF_COLOR)
local sHexEdgeColor = GlobVar.GetColorFromRGBToHex( EDGES_COLOR)
local sHexSyncLinesColor = GlobVar.GetColorFromRGBToHex( SYNC_LINE_COLOR)
local sHexSyncInterpLinesColor = GlobVar.GetColorFromRGBToHex( SYNC_LINE_INTERP_COLOR)
local sHexRuledBzColor = GlobVar.GetColorFromRGBToHex( RULED_BZ_COLOR)
if not sHexSurfSelColor or not sHexEdgeColor or not sHexSyncLinesColor or not sHexSyncInterpLinesColor or not sHexRuledBzColor then
EgtOutBox( ERROR_SETTINGS .. 'Error in Converting Colors', 'Error', 'ERROR', 'OK')
return
end
-- Apro la finestra di Dialogo per impostazione dei parametri di Default
local vsVal = EgtDialogBox( 'Settings', { 'Surf Selection','CP:'.. sHexSurfSelColor},
{ 'Edges', 'CP:'.. sHexEdgeColor},
{ 'SyncLines', 'CP:'.. sHexSyncLinesColor},
{ 'SyncLines Interpolation', 'CP:'.. sHexSyncInterpLinesColor},
{ 'Surf Ruled Bezier', 'CP:'.. sHexRuledBzColor})
if not vsVal or #vsVal ~= 5 then return end
-- Memorizzo i nuovi colori per le variabili
local SelSurfCol = GlobVar.GetColorFromHexToRGB( vsVal[1])
local EdgeColor = GlobVar.GetColorFromHexToRGB( vsVal[2])
local SyncLineColor = GlobVar.GetColorFromHexToRGB( vsVal[3])
local SyncInterpLinesColor = GlobVar.GetColorFromHexToRGB( vsVal[4])
local RuledBZColor = GlobVar.GetColorFromHexToRGB( vsVal[5])
if not SelSurfCol or not EdgeColor or not SyncLineColor or not SyncInterpLinesColor or not RuledBZColor then
EgtOutBox( ERROR_SETTINGS .. 'Error in Converting Colors', 'Error', 'ERROR', 'OK')
return
end
-- Le nuove variabili di colore vengono aggiornate
SELECTION_SURF_COLOR = GlobVar.SetColorSurfSelection( SelSurfCol)
EDGES_COLOR = GlobVar.SetColorEdges( EdgeColor)
SYNC_LINE_COLOR = GlobVar.SetColorSyncLines( SyncLineColor)
SYNC_LINE_INTERP_COLOR = GlobVar.SetColorSyncInterpLines( SyncInterpLinesColor)
RULED_BZ_COLOR = GlobVar.SetColorRuledBz( RuledBZColor)
-- Aggiorno i Valori Memorizzati all'interno del File .ini
EgtWriteStringToIni( KEY_SECTION_NAME, KEY_INI_SELECTION_SURF_COLOR, GlobVar.GetColorForIniFile( SELECTION_SURF_COLOR), sFileIni)
EgtWriteStringToIni( KEY_SECTION_NAME, KEY_INI_EDGES_COLOR, GlobVar.GetColorForIniFile( EDGES_COLOR), sFileIni)
EgtWriteStringToIni( KEY_SECTION_NAME, KEY_INI_SYNC_LINE_COLOR, GlobVar.GetColorForIniFile( SYNC_LINE_COLOR), sFileIni)
EgtWriteStringToIni( KEY_SECTION_NAME, KEY_INI_SYNC_INTERP_COLOR, GlobVar.GetColorForIniFile( SYNC_LINE_INTERP_COLOR), sFileIni)
EgtWriteStringToIni( KEY_SECTION_NAME, KEY_INI_RULED_BZ_COLOR, GlobVar.GetColorForIniFile( RULED_BZ_COLOR), sFileIni)
+25 -17
View File
@@ -1,20 +1,28 @@
[Trimming]
TrimEnable=1
SurfSelectionColor=255,255,185
EdgesColor=0,128,255
SyncLineColor=0,255,0
SyncLineInterpColor=255,165,0
RuledBzColor=37,37,37
BaseDir=C:\EgtData\Trimming
Button1=NewTrimming.lua,Images\NewTrimming.png,New Trimming
Button2=DeleteTrimming.lua,Images\DeleteTrimming.png, Delete Trimming
Button3=Separator
Button4=Select.lua,Images\Select.png,Select
Button5=SelectHoles.lua,Images\SelectHoles.png,Select Holes
Button6=ResetSelect.lua,Images\ResetSelect.png, <-- Undo,
Button7=Separator
Button8=CalcBezierEdges.lua,Images\BezierEdges.png,Get Borders
Button9=EditBezierBorders.lua,Images\EditBezierEdges.png,Edit Curves
Button10=ResetEditBezierBorders.lua,Images\ResetEditBezierEdges.png,<-- Undo
Button11=EndEditBezierBorders.lua,Images\EndEditBezierEdges.png,Ok
Button12=Separator
Button13=EditSyncLines.lua,Images\EditSyncLines.png,Edit SyncLines
Button14=ResetSyncLines.lua,Images\ResetSyncLines.png,Reset SyncLines
Button15=Separator
Button16=CalcBezier.lua,Images\BezierSurf.png,Get Surf
Button17=ResetBezierSurf.lua,Images\ResetBezierSurf.png,<-- Undo
Button1=Settings.lua,Images\Settings.png,Settings
Button2=Separator
Button3=NewTrimming.lua,Images\NewTrimming.png,New Trimming
Button4=DeleteTrimming.lua,Images\DeleteTrimming.png, Delete Trimming
Button5=Separator
Button6=Select.lua,Images\Select.png,Select
Button7=SelectHoles.lua,Images\SelectHoles.png,Select Holes
Button8=ResetSelect.lua,Images\ResetSelect.png, <-- Undo,
Button9=Separator
Button10=CalcBezierEdges.lua,Images\BezierEdges.png,Get Borders
Button11=EditBezierBorders.lua,Images\EditBezierEdges.png,Edit Curves
Button12=ResetEditBezierBorders.lua,Images\ResetEditBezierEdges.png,<-- Undo
Button13=EndEditBezierBorders.lua,Images\EndEditBezierEdges.png,Ok
Button14=Separator
Button15=EditSyncLines.lua,Images\EditSyncLines.png,Edit SyncLines
Button16=InterpolateSyncLines.lua,Images\InterpolateSyncLines.png,Interpolate SyncLines
Button17=ResetSyncLines.lua,Images\ResetSyncLines.png,Reset SyncLines
Button18=Separator
Button19=CalcBezier.lua,Images\BezierSurf.png,Get Surf
Button20=ResetBezierSurf.lua,Images\ResetBezierSurf.png,<-- Undo
+100 -1
View File
@@ -2,7 +2,8 @@
-- Modulo per Definizione di Costanti, Variabili e Funzioni di Trimming
local TrimmingVar = {
nCounter = 0
nCounter = 0,
bInit = false
}
-- *** ============================== COSTANTI ============================== ***
@@ -73,11 +74,45 @@ EDGES_EDIT_TYPE = {
-- Creazione dei tratti di sincronizzazione
SYNC_LINE_NAME = 'SyncLines'
SYNC_LINE_COLOR = Color3d( 0, 255, 0)
SYNC_LINE_INTERP_COLOR = Color3d( 255, 165, 0)
-- Creazione della Superficie Ruled di Bezier
RULED_BZ_NAME = 'SurfBz'
RULED_BZ_COLOR = Color3d( 37, 37, 37)
-- ***========================== FILE INI ==================================***
KEY_SECTION_NAME = "Trimming"
KEY_INI_SELECTION_SURF_COLOR = "SurfSelectionColor"
function TrimmingVar.SetColorSurfSelection( myColor)
if not myColor then return end
SELECTION_SURF_COLOR = myColor
end
KEY_INI_EDGES_COLOR = "EdgesColor"
function TrimmingVar.SetColorEdges( myColor)
if not myColor then return end
EDGES_COLOR = myColor
end
KEY_INI_SYNC_LINE_COLOR = "SyncLineColor"
function TrimmingVar.SetColorSyncLines( myColor)
if not myColor then return end
SYNC_LINE_COLOR = myColor
end
KEY_INI_SYNC_INTERP_COLOR = "SyncLineInterpColor"
function TrimmingVar.SetColorSyncInterpLines( myColor)
if not myColor then return end
SYNC_LINE_INTERP_COLOR = myColor
end
KEY_INI_RULED_BZ_COLOR = "RuledBzColor"
function TrimmingVar.SetColorRuledBz( myColor)
if not myColor then return end
RULED_BZ_COLOR = myColor
end
-- ***============================== FUNZIONI ==============================***
--======================== Contatore Incrementale =======================
@@ -265,4 +300,68 @@ function TrimmingVar.GetGlobBox( vIds)
return BBox3dGlob
end
-------------------------------------------------------------------------------
-- Funzione che recupera il colore da una stringa "nR,nG,nB" [0-255],[0-255],[0-255]
function TrimmingVar.GetColorFromString( sColor)
local sVal = EgtSplitString( sColor)
if not sVal then return nil end
if #sVal ~= 3 then return nil end
local nRed = tonumber( sVal[1])
local nGreen = tonumber( sVal[2])
local nBlue = tonumber( sVal[3])
if not nRed or not nGreen or not nBlue then return nil end
if 0 <= nRed and nRed <= 255 and 0 <= nGreen and nGreen <= 255 and 0 <= nBlue and nBlue <= 255 then
return Color3d( nRed, nGreen, nBlue)
end
return nil
end
-- Conversione Colori da Hex -> Color3d
function TrimmingVar.GetColorFromHexToRGB( sHex)
if not sHex then return nil end
-- Rimozione eventuale "#" iniziale
sHex = sHex:gsub( "#", "")
-- Estraggo le Coppie
local nR, nG, nB = sHex:match( "(%x%x)(%x%x)(%x%x)")
-- Restituisco il risultato
return Color3d( tonumber( nR, 16), tonumber( nG, 16), tonumber( nB, 16))
end
-- Conversione Colori da classe Color3d a Hex
function TrimmingVar.GetColorFromRGBToHex( myColor)
if not myColor then return nil end
return ( string.format("%02X", myColor:getRed()) ..
string.format("%02X", myColor:getGreen()) ..
string.format("%02X", myColor:getBlue()))
end
-- Conversione Colori da Classe3d a stringa per File.ini
function TrimmingVar.GetColorForIniFile( myColor)
if not myColor then return nil end
return ( myColor:getRed().. ",".. myColor:getGreen().. ",".. myColor:getBlue())
end
-- Inizializzazione per lettura delle variabili
if not TrimmingVar.bInit then
local sFileIni = EgtGetIniFile()
if sFileIni then
-- Colore Selezione della Superficie
local sColorSurfSelection = EgtGetStringFromIni( KEY_SECTION_NAME, KEY_INI_SELECTION_SURF_COLOR, "", sFileIni)
if sColorSurfSelection then TrimmingVar.SetColorSurfSelection( TrimmingVar.GetColorFromString( sColorSurfSelection)) end
-- Colore Edges
local sColorEdges = EgtGetStringFromIni( KEY_SECTION_NAME, KEY_INI_EDGES_COLOR, "", sFileIni)
if sColorEdges then TrimmingVar.SetColorEdges( TrimmingVar.GetColorFromString( sColorEdges)) end
-- Colore Linee di Sincronizzazione
local sSyncLineColor = EgtGetStringFromIni( KEY_SECTION_NAME, KEY_INI_SYNC_LINE_COLOR, "", sFileIni)
if sSyncLineColor then TrimmingVar.SetColorSyncLines( TrimmingVar.GetColorFromString( sSyncLineColor)) end
-- Colore Linee di Sincronizzazione mediante Interpolazione
local sSyncInterpLineColor = EgtGetStringFromIni( KEY_SECTION_NAME, KEY_INI_SYNC_INTERP_COLOR, "", sFileIni)
if sSyncInterpLineColor then TrimmingVar.SetColorSyncInterpLines( TrimmingVar.GetColorFromString( sSyncInterpLineColor)) end
-- Colore Superficie Ruled di Bezier
local sRuledBzColor = EgtGetStringFromIni( KEY_SECTION_NAME, KEY_INI_RULED_BZ_COLOR, "", sFileIni)
if sRuledBzColor then TrimmingVar.SetColorRuledBz( TrimmingVar.GetColorFromString( sRuledBzColor)) end
end
TrimmingVar.bInit = false
end
return TrimmingVar
+2 -2
View File
@@ -2,5 +2,5 @@
-- Gestione della versione di Trimming dei Termoformati
NAME = 'Trimming'
VERSION = '3.1a6'
MIN_EXE = '3.1a6'
VERSION = '3.1a7'
MIN_EXE = '3.1a7'