Trimming 3.1a1 :
- Primo Commit
This commit is contained in:
@@ -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()
|
||||
Reference in New Issue
Block a user