Trimming 3.1a1 :

- Primo Commit
This commit is contained in:
Riccardo Elitropi
2026-01-19 11:31:08 +01:00
parent 94b3250cf0
commit 5dd7acad75
42 changed files with 1536 additions and 93 deletions
+145
View File
@@ -0,0 +1,145 @@
-- EditSyncLines.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 le Info
local dLinTol = EgtGetInfo( nCurrLayerId, KEY_LIN_TOL, 'd')
local dAngTol = EgtGetInfo( nCurrLayerId, KEY_ANG_TOL, 'd')
local dAngFaceTol = EgtGetInfo( nCurrLayerId, KEY_SURF_ANG_TOL, 'd')
local bOk = ( dLinTol ~= nil and dAngTol ~= nil and dAngFaceTol ~= nil)
if not bOk then
EgtOutBox( ERROR_EDIT_SYNC_CURVES .. 'No Trimming Machining created', 'Error', 'ERROR', 'OK')
return
end
-- Creo un Layer di Edit per le curve di Sincronizzazione ( o recupero quello corrente)
local nLayerEditSyncId = GlobVar.GetCurrentEditSyncCurvesLayer( nCurrPartId)
if not nLayerEditSyncId or nLayerEditSyncId == GDB_ID.NULL then
nLayerEditSyncId = GlobVar.CreateEditSyncCurvesLayer( nCurrPartId, nCurrLayerId)
else
local bClear = EgtOutBox( 'Do you want to delete the edit Layer ?', 'Edit', 'QUESTION', 'YESNO')
if bClear then
EgtErase( nLayerEditSyncId)
EgtSetCurrPartLayer( nCurrPartId, nCurrLayerId)
EgtSetStatus( nCurrLayerId, GDB_ST.ON)
EgtDraw()
end
return
end
if not nLayerEditSyncId or nLayerEditSyncId == GDB_ID.NULL then
EgtOutBox( ERROR_EDIT_SYNC_CURVES .. 'Error in creating Edit Layer', 'Error', 'ERROR', 'OK')
return
end
-- Rendo Invisibili gli altri Layer di Trimming
nId = EgtGetFirstInGroup( nCurrPartId)
while nId do
if GlobVar.IsTrimmingLayer( nId) and nId ~= nCurrLayerId then EgtSetStatus( nId, GDB_ST.OFF) end
nId = EgtGetNext( nId)
end
-- Se Esiste il Layer di Sistema con le Curve di Sincronizzazione già salvate, allora le Copio da quest'Ultimo
local nLayerSaveSyncId = GlobVar.GetCurrentStoredCurvesLayer( nCurrPartId)
if nLayerSaveSyncId and nLayerSaveSyncId ~= GDB_ID.NULL then
local nId = EgtGetFirstInGroup( nLayerSaveSyncId)
while nId do
EgtCopyGlob( nId, nLayerEditSyncId)
nId = EgtGetNext( nId)
end
-- In Caso contrario Le Calcolo
else
-- Recupero le Curve di Bordo correnti e da esse estraggo quelle di Sincronizzazione
local vIdEdges = {}
nId = EgtGetFirstInGroup( nCurrLayerId)
while nId do
-- verifico che sia una Curva e che sia di Bordo
if EgtGetName( nId) == EDGES_NAME then
-- Verifico che sia una Curva
local nType = EgtGetType( nId)
if nType ~= GDB_TY.CRV_LINE and nType ~= GDB_TY.CRV_ARC and nType ~= GDB_TY.CRV_BEZ and nType ~= GDB_TY.CRV_COMPO then
EgtOutBox( ERROR_EDIT_SYNC_CURVES .. 'Invalid Curve Selected', 'Error', 'ERROR', 'OK')
return
end
table.insert( vIdEdges, nId)
end
nId = EgtGetNext( nId)
end
-- Se nel gruppo di Edit delle curve non ne ho esattamente 2 di bordo, errore
if #vIdEdges ~= 2 then
EgtOutBox( ERROR_EDIT_SYNC_CURVES .. 'Not 2 Border Curves detected', 'Error', 'ERROR', 'OK')
EgtSetStatus( nCurrLayerId, GDB_ST.ON)
EgtErase( nLayerEditSyncId)
return
end
-- Le inserisco nel Leyer di Edit Sync
local nEdge1Id = EgtCopyGlob( vIdEdges[1], nLayerEditSyncId)
local nEdge2Id = EgtCopyGlob( vIdEdges[2], nLayerEditSyncId)
if not nEdge1Id or not nEdge2Id then
EgtOutBox( ERROR_EDIT_SYNC_CURVES .. 'Not 2 Border Curves detected', 'Error', 'ERROR', 'OK')
EgtErase( nLayerEditSyncId)
end
-- Calcolo le Curve di Sincronizzazione
local nFirstId, nCount
bOk, nFirstId, nCount = EgtTrimmingGetSurfBzSyncPoints( nLayerEditSyncId, nEdge1Id, nEdge2Id, dLinTol)
if not bOk then
EgtOutBox( ERROR_EDIT_SYNC_CURVES .. 'Error in Computing Sync Lines', 'Error', 'ERROR', 'OK')
EgtErase( nLayerEditSyncId)
EgtSetCurrPartLayer( nCurrPartId, nCurrLayerId)
return
end
-- Chiedo quanti valori di Curve di Sincronizzazione devo Visualizzare e le Tolleranze
local nSkimmingFactor = EgtGetInfo( nCurrLayerId, KEY_SKIMMING_FACTOR, 'i')
local dSkimAngTol = EgtGetInfo( nCurrLayerId, KEY_SKIMMING_FACTOR_ANG_TOL, 'd')
if not nSkimmingFactor or nSkimmingFactor < 0. then nSkimmingFactor = SKIMMING_FACTOR end
if not dSkimAngTol or dSkimAngTol < 0. then dSkimAngTol = SKIMMING_ANG_TOL end
local vsVal = EgtDialogBox( 'Seletion', { 'Skimming Factor', tostring( nSkimmingFactor)},
{ 'Angular Tolerance', tostring( dSkimAngTol)})
if not vsVal or #vsVal ~= 2 then
EgtErase( nLayerEditSyncId)
EgtSetCurrPartLayer( nCurrPartId, nCurrLayerId)
return
end
nSkimmingFactor = tonumber( vsVal[1])
dSkimAngTol = tonumber( vsVal[2])
EgtSetInfo( nCurrLayerId, KEY_SKIMMING_FACTOR, nSkimmingFactor)
EgtSetInfo( nCurrLayerId, KEY_SKIMMING_FACTOR_ANG_TOL, dSkimAngTol)
local vIdSyncLines = {}
for i = 0, nCount - 1 do table.insert( vIdSyncLines, nFirstId + i) end
if not EgtTrimmingSkimSyncPoints( nEdge1Id, nEdge2Id, vIdSyncLines, dLinTol, dSkimAngTol, nSkimmingFactor) then
EgtOutBox( ERROR_EDIT_SYNC_CURVES .. 'Error in Computing Sync Lines', 'Error', 'ERROR', 'OK')
EgtErase( nLayerEditSyncId)
EgtSetCurrPartLayer( nCurrPartId, nCurrLayerId)
end
-- Assegno Colore e Name
nId = EgtGetFirstInGroup( nLayerEditSyncId)
while nId do
if nId >= nFirstId then
EgtSetColor( nId, SYNC_LINE_COLOR)
EgtSetName( nId, SYNC_LINE_NAME)
end
nId = EgtGetNext( nId)
end
end
-- Imposto il gruppo di Edit Corrente
EgtSetCurrPartLayer( nCurrPartId, nLayerEditSyncId)
-- Aggiorno la Grafica
EgtDraw()