Trimming 3.1a4 :

- aggiunta memorizzazione dell'ulltimo tipo selezionato nella modalità selezione
- se le superfici di selezione generano più di 2 curve di bordo allora vengono definiti degli altri layer di trimming
- semplificazione gestione dei layer di sincronizzazione delle curve
- aggiunta funzionalità di rimozione delle superfici di Bezier in un layer di trimmatura
- miglioramento nella selezione delle curve di sincronizzazione nel caso di curve di bordo chiuse o aperte.
This commit is contained in:
Riccardo Elitropi
2026-01-22 19:21:28 +01:00
parent 068124cd30
commit dfa187838b
16 changed files with 230 additions and 245 deletions
+2 -1
View File
@@ -40,7 +40,7 @@ EgtErase( vIdToErase)
-- ( ed eventuali Punti di Sincronizzazione se presenti nel Layer di Salvataggio )
local vIdEdges = {}
local vIdSyncLines = {}
local nLayerStoredSyncId = GlobVar.GetCurrentStoredCurvesLayer( nCurrPartId)
local nLayerStoredSyncId = GlobVar.GetCurrentEditSyncCurvesLayer( nCurrPartId, nCurrLayerId)
if nLayerStoredSyncId and nLayerStoredSyncId ~= GDB_ID.NULL then
-- Recupero gli Id delle Linee di sincronizzazione
nId = EgtGetFirstInGroup( nLayerStoredSyncId)
@@ -107,4 +107,5 @@ end
EgtSetCurrPartLayer( nCurrPartId, nCurrLayerId)
EgtSetStatus( nCurrLayerId, GDB_ST.ON)
-- Aggiorno la Grafica
EgtDraw()
+41 -45
View File
@@ -46,12 +46,12 @@ EgtSetStatus( nCurrLayerId, GDB_ST.ON)
nId = EgtGetFirstInGroup( nCurrPartId)
while nId do
if nId ~= nCurrLayerId and
( GlobVar.IsTrimmingLayer( nId) or GlobVar.IsEditOrStoredLayer( nId)) then EgtSetStatus( nId, GDB_ST.OFF) end
( GlobVar.IsTrimmingLayer( nId) or GlobVar.IsEditSyncCurvesLayer( nId)) then EgtSetStatus( nId, GDB_ST.OFF) end
nId = EgtGetNext( nId)
end
-- Rimuovo Tutte le Entità ad Eccezione delle Superfici Selezionate ( nel caso Le rendo Visibili)
-- [NB. La Selezione cancella tutti i risutati fatti fino ad adesso]
-- [NB. La Creazione deli Edges cancella tutti i risutati fatti fino ad adesso]
local vIdToErase = {}
local nId = EgtGetFirstInGroup( nCurrLayerId)
while nId do
@@ -62,10 +62,6 @@ while nId do
end
EgtErase( vIdToErase)
-- Se Esiste un Layer di Edit o di Stored, lo Rimuovo
local vEditOrStoredLayerIds = GlobVar.GetAllEditOrStoredLayer( nCurrPartId, nCurrLayerId)
if vEditOrStoredLayerIds ~= nil and #vEditOrStoredLayerIds ~= 0 then EgtErase( nLayerEditId) end
-- Scorro le superfici di Selezione presenti e recupero il vettore di Selezione {nSurf, nFace}
local vSel = {}
local nSelSurfId = EgtGetFirstNameInGroup( nCurrLayerId, SELECTION_SURF_NAME)
@@ -84,8 +80,8 @@ if #vSel == 0 then
EgtOutBox( ERROR_RAW_EDGE_CREATION .. 'No Selected Surf', 'Error', 'ERROR', 'OK')
return
end
local nFirstId, nCount
local nFirstId, nCount
--------------------------------- Estrazione degli Edges ---------------------------------
if vsVal[1] == 'Extract Edges' then
-- Recupero la tolleranza lineare per l'estrazione degli Edges
@@ -107,7 +103,6 @@ if vsVal[1] == 'Extract Edges' then
return
end
end
--------------------------------- Calcolo Edges per normali ---------------------------------
else
-- Recupero la tolleranza lineare per l'estrazione degli Edges e la Thickness
@@ -122,46 +117,47 @@ else
EgtOutBox( ERROR_EDGE_CREATION .. 'Error in Computing Edges', 'Error', 'ERROR', 'OK')
return
end
-- Assegno Colore e Name
for i = 0, nCount - 1 do
bOk = EgtSetColor( nFirstId + i, EDGES_COLOR) and
EgtSetName( nFirstId + i, EDGES_NAME)
if not bOk then
EgtOutBox( ERROR_EDGE_CREATION .. 'Assign Raw Edges Properties failed', 'Error', 'ERROR', 'OK')
end
-- Assegno Colore e Name
for i = 0, nCount - 1 do
bOk = EgtSetColor( nFirstId + i, EDGES_COLOR) and
EgtSetName( nFirstId + i, EDGES_NAME)
if not bOk then
EgtOutBox( ERROR_EDGE_CREATION .. 'Assign Raw Edges Properties failed', 'Error', 'ERROR', 'OK')
return
end
end
-- Se più di due curve, definisco dei nuovi Layer di Trimming
if nCount > 2 then
for i = 2, nCount - 1, 2 do
-- Definisco un nuovo Layer di trimming
local nNewTrimmingLayer = GlobVar.CreateTrimmingLayer( nCurrPartId)
if nCurrLayerId == GDB_ID.NULL then
EgtOutBox( ERROR_CREATING_NEW_TRIMMING .. 'Defining Layer failed', 'Error', 'ERROR', 'OK')
return
end
end
-- Se più di due curve, definisco dei nuovi Layer di Trimming
if nCount > 2 then
for i = 2, nCount - 1, 2 do
-- Definisco un nuovo Layer di trimming
local nNewTrimmingLayer = GlobVar.CreateTrimmingLayer( nCurrPartId)
if nCurrLayerId == GDB_ID.NULL then
EgtOutBox( ERROR_CREATING_NEW_TRIMMING .. 'Defining Layer failed', 'Error', 'ERROR', 'OK')
return
end
-- Copio proprietà
bOk = EgtSetInfo( nNewTrimmingLayer, KEY_LIN_TOL, dLinTol) and
EgtSetInfo( nNewTrimmingLayer, KEY_ANG_TOL, dAngTol) and
EgtSetInfo( nNewTrimmingLayer, KEY_SURF_ANG_TOL, dAngFaceTol) and
EgtSetInfo( nNewTrimmingLayer, KEY_LIN_TOL_EDGES, dEdgeLinTol)
if not bOk then
EgtOutBox( ERROR_CREATING_NEW_TRIMMING .. 'Saving Tolerances failed', 'Error', 'ERROR', 'OK')
EgtErase( nNewTrimmingLayer)
return
end
-- Copio tutte le entità di tale gruppo ( ad eccezzione delle curve)
local nOldId = EgtGetFirstInGroup( nCurrLayerId)
while nOldId do
local sName = EgtGetName( nOldId)
if sName ~= EDGES_NAME then
local nNewId = EgtCopyGlob( nOldId, nNewTrimmingLayer)
end
nOldId = EgtGetNext( nOldId)
end
EgtRelocate( nFirstId + i, nNewTrimmingLayer)
EgtRelocate( nFirstId + i + 1, nNewTrimmingLayer)
-- Copio proprietà
bOk = EgtSetInfo( nNewTrimmingLayer, KEY_LIN_TOL, dLinTol) and
EgtSetInfo( nNewTrimmingLayer, KEY_ANG_TOL, dAngTol) and
EgtSetInfo( nNewTrimmingLayer, KEY_SURF_ANG_TOL, dAngFaceTol) and
EgtSetInfo( nNewTrimmingLayer, KEY_LIN_TOL_EDGES, dEdgeLinTol)
if not bOk then
EgtOutBox( ERROR_CREATING_NEW_TRIMMING .. 'Saving Tolerances failed', 'Error', 'ERROR', 'OK')
EgtErase( nNewTrimmingLayer)
return
end
-- Copio tutte le entità di tale gruppo ( ad eccezzione delle curve)
local nOldId = EgtGetFirstInGroup( nCurrLayerId)
while nOldId do
local sName = EgtGetName( nOldId)
if sName ~= EDGES_NAME then
local nNewId = EgtCopyGlob( nOldId, nNewTrimmingLayer)
end
nOldId = EgtGetNext( nOldId)
end
EgtRelocate( nFirstId + i, nNewTrimmingLayer)
EgtRelocate( nFirstId + i + 1, nNewTrimmingLayer)
end
end
+6 -8
View File
@@ -10,10 +10,6 @@ local GlobVar = require( 'TrimmingLib')
-- Costante di Errore
local ERROR_DELETING_TRIMMING = 'Error in Deleting New Trimming : '
-- Chiedo all'Utente la conferma per eliminare il Layer di Trimming corrente ed eventuali gruppi temporanei
local bDelete = EgtOutBox( 'Do you want to delete the current Trimming machining ?', 'Deleting', 'QUESTION', 'YESNO')
if not bDelete then return end
-- Recupero il Part e il Layer corrente di Trimming
local nCurrPartId = EgtGetCurrPart()
local nCurrLayerId = EgtGetCurrLayer()
@@ -28,12 +24,14 @@ if nTrimmingLayerId == nil or nTrimmingLayerId == GDB_ID.NULL then
return
end
-- Recupero tutti i layer di Edit e di Stored associati a tale Layer di Trimmatura
local vLayerIdToErase = GlobVar.GetAllEditOrStoredLayer( nCurrPartId, nTrimmingLayerId)
-- Chiedo all'Utente la conferma per eliminare il Layer di Trimming corrente ed eventuali gruppi temporanei
local bDelete = EgtOutBox( 'Do you want to delete the current Trimming machining ?', 'Deleting', 'QUESTION', 'YESNO')
if not bDelete then return end
-- Elimino tutti i Layer ricavati
-- Recupero ed eventualmente elimino il Layer delle curve di Sincronizzazione associato
local nLayerSynEditId = GlobVar.GetCurrentEditSyncCurvesLayer( nCurrPartId, nCurrLayerId)
if nLayerSynEditId ~= nil and nLayerSynEditId ~= GDB_ID.NULL then EgtErase( nLayerSynEditId) end
EgtErase( nTrimmingLayerId)
EgtErase( vLayerIdToErase)
-- Aggiorno la Grafica
EgtDraw()
-1
View File
@@ -83,7 +83,6 @@ if #vnBzCrvId == 0 then
EgtErase( nLayerEditId)
return
end
-- ??? EgtSetStatus( nCurrLayerId, GDB_ST.OFF)
-- Imposto come Layer corrente quello di Edit
EgtSetCurrPartLayer( nCurrPartId, nLayerEditId)
+66 -80
View File
@@ -27,20 +27,18 @@ if not bOk then
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
-- Creo/Recupero il Layer di Edit per le curve di Sincronizzazione
local nLayerEditSyncId = GlobVar.GetCurrentEditSyncCurvesLayer( nCurrPartId, nCurrLayerId)
if nLayerEditSyncId ~= nil and nLayerEditSyncId ~= GDB_ID.NULL then
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)
if bClear then EgtErase( nLayerEditSyncId)
else
EgtSetCurrPartLayer( nCurrPartId, nLayerEditSyncId)
EgtDraw()
return
end
return
end
nLayerEditSyncId = GlobVar.CreateEditSyncCurvesLayer( nCurrPartId, nCurrLayerId)
if not nLayerEditSyncId or nLayerEditSyncId == GDB_ID.NULL then
EgtOutBox( ERROR_EDIT_SYNC_CURVES .. 'Error in creating Edit Layer', 'Error', 'ERROR', 'OK')
return
@@ -53,82 +51,70 @@ while nId do
nId = EgtGetNext( nId)
end
-- Se Esiste il Layer di Sistema con le Curve di Sincronizzazione già salvate, allora le rialloco
local nLayerSaveSyncId = GlobVar.GetCurrentStoredCurvesLayer( nCurrPartId)
if nLayerSaveSyncId and nLayerSaveSyncId ~= GDB_ID.NULL then
local nId = EgtGetFirstInGroup( nLayerSaveSyncId)
while nId do
EgtRelocateGlob( 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)
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
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
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
-- Chiedo i Parametri all'Utente
local nSyncLinesNumber = EgtGetInfo( nCurrLayerId, KEY_SYNC_LINES_NUMBER, 'i')
local bShowOnCorners = EgtGetInfo( nCurrLayerId, KEY_SYNC_LINES_SHOW_ON_CORNERS, 'b')
local dSyncLinesAngTol = EgtGetInfo( nCurrLayerId, KEY_SYNC_LINES_NUMBER_ANG_TOL, 'd')
if not nSyncLinesNumber or nSyncLinesNumber < 0. then nSyncLinesNumber = SYNC_LINES_NUMBER end
if bShowOnCorners == nil then bShowOnCorners = true end
if bShowAllLines == nil then bShowAllLines = false end
if not dSyncLinesAngTol or dSyncLinesAngTol < 0. then dSyncLinesAngTol = SYNC_LINES_ANG_TOL end
local vsVal = EgtDialogBox( 'Seletion', { 'Show on Corners', 'CK:' .. ( bShowOnCorners and '1' or '0')},
{ 'Angular Tolerance', tostring( dSyncLinesAngTol)},
{ 'Line Number', tostring( nSyncLinesNumber)})
if not vsVal or #vsVal ~= 3 then
EgtErase( nLayerEditSyncId)
EgtSetCurrPartLayer( nCurrPartId, nCurrLayerId)
return
end
bShowOnCorners = ( vsVal[1] == '1')
dSyncLinesAngTol = tonumber( vsVal[2])
nSyncLinesNumber = tonumber( vsVal[3])
EgtSetInfo( nCurrLayerId, KEY_SYNC_LINES_NUMBER, nSyncLinesNumber)
EgtSetInfo( nCurrLayerId, KEY_SYNC_LINES_SHOW_ON_CORNERS, bShowOnCorners)
EgtSetInfo( nCurrLayerId, KEY_SYNC_LINES_NUMBER_ANG_TOL, dSyncLinesAngTol)
-- Chiedo i Parametri all'Utente
local nSyncLinesNumber = EgtGetInfo( nCurrLayerId, KEY_SYNC_LINES_NUMBER, 'i')
local bShowOnCorners = EgtGetInfo( nCurrLayerId, KEY_SYNC_LINES_SHOW_ON_CORNERS, 'b')
local dSyncLinesAngTol = EgtGetInfo( nCurrLayerId, KEY_SYNC_LINES_NUMBER_ANG_TOL, 'd')
if not nSyncLinesNumber or nSyncLinesNumber < 0. then nSyncLinesNumber = SYNC_LINES_NUMBER end
if bShowOnCorners == nil then bShowOnCorners = true end
if bShowAllLines == nil then bShowAllLines = false end
if not dSyncLinesAngTol or dSyncLinesAngTol < 0. then dSyncLinesAngTol = SYNC_LINES_ANG_TOL end
local vsVal = EgtDialogBox( 'Seletion', { 'Show on Corners', 'CK:' .. ( bShowOnCorners and '1' or '0')},
{ 'Angular Tolerance', tostring( dSyncLinesAngTol)},
{ 'Line Number', tostring( nSyncLinesNumber)})
if not vsVal or #vsVal ~= 3 then
EgtErase( nLayerEditSyncId)
EgtSetCurrPartLayer( nCurrPartId, nCurrLayerId)
return
end
bShowOnCorners = ( vsVal[1] == '1')
dSyncLinesAngTol = tonumber( vsVal[2])
nSyncLinesNumber = tonumber( vsVal[3])
EgtSetInfo( nCurrLayerId, KEY_SYNC_LINES_NUMBER, nSyncLinesNumber)
EgtSetInfo( nCurrLayerId, KEY_SYNC_LINES_SHOW_ON_CORNERS, bShowOnCorners)
EgtSetInfo( nCurrLayerId, KEY_SYNC_LINES_NUMBER_ANG_TOL, dSyncLinesAngTol)
-- Recupero le Curve di Sincronizzazione
local nFirstId, nCount
bOk, nFirstId, nCount = EgtTrimmingGetSurfBzSyncPoints( nLayerEditSyncId, vIdEdges[1], vIdEdges[2], dLinTol, dSyncLinesAngTol, nSyncLinesNumber, bShowOnCorners)
if not bOk then
EgtOutBox( ERROR_EDIT_SYNC_CURVES .. 'Error in Computing Sync Lines', 'Error', 'ERROR', 'OK')
EgtErase( nLayerEditSyncId)
EgtSetCurrPartLayer( nCurrPartId, nCurrLayerId)
return
end
-- Recupero le Curve di Sincronizzazione
local nFirstId, nCount
bOk, nFirstId, nCount = EgtTrimmingGetSurfBzSyncPoints( nLayerEditSyncId, vIdEdges[1], vIdEdges[2], dLinTol, dSyncLinesAngTol, nSyncLinesNumber, bShowOnCorners)
if not bOk then
EgtOutBox( ERROR_EDIT_SYNC_CURVES .. 'Error in Computing Sync Lines', 'Error', 'ERROR', 'OK')
EgtErase( nLayerEditSyncId)
EgtSetCurrPartLayer( nCurrPartId, nCurrLayerId)
return
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)
-- 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
-- Imposto il gruppo di Edit Corrente
+4 -1
View File
@@ -53,7 +53,10 @@ while nId do
table.insert( vIdToRelocate, nId)
nId = EgtGetNext( nId)
end
for i = 1, #vIdToRelocate do EgtRelocate( vIdToRelocate[i], nCurrLayerId) end
for i = 1, #vIdToRelocate do
EgtRelocate( vIdToRelocate[i], nCurrLayerId)
EgtSetStatus( vIdToRelocate[i], GDB_ST.ON)
end
-- Cancello il Layer di Edit e rendo quello di Trimming come corrente
EgtErase( nLayerEditId)
Binary file not shown.

After

Width:  |  Height:  |  Size: 62 KiB

+3 -7
View File
@@ -18,9 +18,9 @@ if nCurrPartId == nil then
end
-- Chiedo all'utente le Tolleranze e le Salvo come Info nel Layer di Trimming
local vsVal = EgtDialogBox( 'New Trimming', { 'Linear Tolerance', '0.05'},
{ 'Angular Tolerance', '15.0'},
{ 'Surface Angular Tolerance', '30.0'})
local vsVal = EgtDialogBox( 'New Trimming', { 'Linear Tolerance', tostring( LIN_TOL)},
{ 'Angular Tolerance', tostring( ANG_TOL)},
{ 'Surface Angular Tolerance', tostring( ANG_FACE_TOL)})
if not vsVal or #vsVal ~= 3 then return end
-- Creo il Layer di Trimming all'interno del Part corrente e lo rendo corrente
@@ -46,9 +46,5 @@ if not bOk then
return
end
-- Cancello tutti i Layer Temporanei ( Quindi di Stored o di Edit)
local vIdToErase = GlobVar.GetAllEditOrStoredLayer( nCurrPartId, nCurrLayerId)
if vIdToErase ~= nil and #vIdToErase ~= 1 then EgtErase( vIdToErase) end
-- Aggiorno la Grafica
EgtDraw()
+36
View File
@@ -0,0 +1,36 @@
-- CalcBezier.lua by Egalware s.r.l. 2026/01/22
require( 'EgtBase')
_ENV = EgtProtectGlobal()
EgtEnableDebug( false)
-- Carico le costanti di Trimming
EgtAddToPackagePath( EgtGetSourceDir() .. '?.lua')
local GlobVar = require( 'TrimmingLib')
-- Costante di Errore
local ERROR_BEZIER_CREATION = 'Error in Ruled Bezier Creation : '
-- Recupero il Part e il Layer di Trimming con le relative Info
local nCurrPartId = EgtGetCurrPart()
local nCurrLayerId = GlobVar.GetTrimmingLayerRefId( EgtGetCurrLayer())
if not GlobVar.IsTrimmingLayer( nCurrLayerId) then
EgtOutBox( ERROR_BEZIER_CREATION .. 'Not a valid Trimming Layer', 'Error', 'ERROR', 'OK')
return
end
-- Chiedo Conferma dell'Operazione
local bDelete = EgtOutBox( 'Do you want erase the Bezier Surface ?', 'Confirm', 'QUESTION', 'YESNO')
if not bDelete then EgtSetCurrPartLayer( nCurrPartId, nCurrLayerId) return end
-- Rimuovo tutte le entità che sono Superfici di Bezier Ruled nel Layer corrente
local vIdToErase = {}
local nId = EgtGetFirstInGroup( nCurrLayerId)
while nId do
local sName = EgtGetName( nId)
if sName == RULED_BZ_NAME then table.insert( vIdToErase, nId) end
nId = EgtGetNext( nId)
end
EgtErase( vIdToErase)
-- Aggiorno la Grafica
EgtDraw()
+7
View File
@@ -41,5 +41,12 @@ EgtErase( nLayerEditId)
EgtSetCurrPartLayer( nCurrPartId, nCurrLayerId)
EgtSetStatus( nCurrLayerId, GDB_ST.ON)
-- Imposto le Curve di Bordo come visibili
local nId = EgtGetFirstInGroup( nCurrLayerId)
while nId do
if EgtGetName( nId) == EDGES_NAME then EgtSetStatus( nId, GDB_ST.ON) end
nId = EgtGetNext( nId)
end
-- Aggiorno la Grafica
EgtDraw()
+4 -3
View File
@@ -43,9 +43,10 @@ while nId do
end
EgtErase( vIdToErase)
-- Se Esiste un Layer di Edit o di Store, lo Rimuovo
local vEditOrStoreLayerIds = GlobVar.GetAllEditOrStoredLayer( nTrimmingLayer)
if vEditOrStoreLayerIds ~= nil and #vEditOrStoreLayerIds ~= 0 then EgtErase( vEditOrStoreLayerIds) end
-- Se Esiste un Layer di Edit o di Stored, lo Rimuovo
-- [NB. La DeSelezione cancella tutti i risultati fatti fino ad adesso]
local nLayerSynEditId = GlobVar.GetCurrentEditSyncCurvesLayer( nCurrPartId, nCurrLayerId)
if nLayerSynEditId ~= nil and nLayerSynEditId ~= GDB_ID.NULL then EgtErase( nLayerEditId) end
-- Recupero l'ultima(le ultime) Supercicie(i) aggiunta(e) e la(e) elimino
local vLastSurfIds = EgtGetInfo( nTrimmingLayer, KEY_SELECTION_LAST_IDS, 'vi')
+3 -5
View File
@@ -18,10 +18,9 @@ if not GlobVar.IsTrimmingLayer( nCurrLayerId) then
return
end
-- Recupero il Layer di Edit e di Store delle Curve di Sync
local nLayerEditId = GlobVar.GetCurrentEditSyncCurvesLayer( nCurrPartId)
local nLayerStoreId = GlobVar.GetCurrentStoredCurvesLayer( nCurrPartId)
if ( not nLayerEditId or nLayerEditId == GDB_ID.NULL) and ( not nLayerStoreId or nLayerStoreId == GDB_ID.NULL) then
-- 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
@@ -32,7 +31,6 @@ if not bDelete then EgtSetCurrPartLayer( nCurrPartId, nLayerEditId) return end
-- Cancello ( se esistono) i rispettivi Gruppi
if nLayerEditId then EgtErase( nLayerEditId) end
if nLayerStoreId then EgtErase( nLayerStoreId) end
-- Metto il Focus sul Layer di Trimming
EgtSetStatus( nCurrLayerId, GDB_ST.ON)
+20 -4
View File
@@ -37,7 +37,20 @@ if dStoredSize ~= nil then dSize = dStoredSize end
local dSizeTol = 0.75
local dStoredSizeTol = EgtGetInfo( nCurrLayerId, KEY_SURF_BORDER_SIZE_TOL, 'd')
if dStoredSizeTol ~= nil then dSizeTol = dStoredSizeTol end
local vsVal = EgtDialogBox( 'Seletion', { 'Type', 'CB:*Insert Surface,Face Search,Surf Search'},
local nLastSelType = EgtGetInfo( nCurrLayerId, KEY_SELECTION_LAST_SELECTION_TYPE, 'i')
local sLabels = { 'Insert Surface', 'Face Search', 'Surf Search'}
local sTypeDBSel
if nLastSelType ~= nil then
local sParts = {}
for i, sLabel in ipairs( sLabels) do
if i == nLastSelType then sParts[i] = '*' .. sLabel
else sParts[i] = sLabel end
end
sTypeDBSel = 'CB:' .. table.concat( sParts, ',')
else
sTypeDBSel = 'CB:' .. table.concat( sLabels, ',')
end
local vsVal = EgtDialogBox( 'Seletion', { 'Type', sTypeDBSel},
{ 'Size', tostring( dSize)},
{ 'Size Tolerance', tostring( dSizeTol)})
if not vsVal or #vsVal ~= 3 then return end
@@ -45,6 +58,9 @@ dSize = tonumber( vsVal[2])
dSizeTol = tonumber( vsVal[3])
EgtSetInfo( nCurrLayerId, KEY_SURF_BORDER_SIZE, dSize)
EgtSetInfo( nCurrLayerId, KEY_SURF_BORDER_SIZE_TOL, dSizeTol)
for i, sLabel in ipairs( sLabels) do
if sLabel == vsVal[1] then EgtSetInfo( nCurrLayerId, KEY_SELECTION_LAST_SELECTION_TYPE, i) break end
end
-- Recupero le tolleranze impostate alla creazione del Layer di Trimming corrente
local dLinTol = EgtGetInfo( nCurrLayerId, KEY_LIN_TOL, 'd')
@@ -62,7 +78,7 @@ EgtSetStatus( nCurrLayerId, GDB_ST.ON)
nId = EgtGetFirstInGroup( nCurrPartId)
while nId do
if nId ~= nCurrLayerId and
( GlobVar.IsTrimmingLayer( nId) or GlobVar.IsEditOrStoredLayer( nId)) then EgtSetStatus( nId, GDB_ST.OFF) end
( GlobVar.IsTrimmingLayer( nId) or GlobVar.IsEditSyncCurvesLayer( nId)) then EgtSetStatus( nId, GDB_ST.OFF) end
nId = EgtGetNext( nId)
end
@@ -80,8 +96,8 @@ EgtErase( vIdToErase)
-- Se Esiste un Layer di Edit o di Stored, lo Rimuovo
-- [NB. La Selezione cancella tutti i risultati fatti fino ad adesso]
local vEditOrStoredLayerIds = GlobVar.GetAllEditOrStoredLayer( nCurrPartId, nCurrLayerId)
if vEditOrStoredLayerIds ~= nil and #vEditOrStoredLayerIds ~= 0 then EgtErase( nLayerEditId) end
local nLayerSynEditId = GlobVar.GetCurrentEditSyncCurvesLayer( nCurrPartId, nCurrLayerId)
if nLayerSynEditId ~= nil and nLayerSynEditId ~= GDB_ID.NULL then EgtErase( nLayerEditId) end
--------------------------------- Inserimento della Superficie ---------------------------------
-- [Nessuna Tolleranza]
+6 -6
View File
@@ -1,4 +1,3 @@
[Trimming]
TrimEnable=1
BaseDir=C:\EgtData\Trimming
@@ -14,8 +13,9 @@ 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=CalcBezier.lua,Images\BezierSurf.png,Get Surf
Button14=EditSyncLines.lua,Images\EditSyncLines.png,Edit SyncLines
Button15=ResetSyncLines.lua,Images\ResetSyncLines.png,Reset SyncLines
Button16=EndEditSyncLines.lua,Images\EndSyncLines.png,Ok
Button13=EditSyncLines.lua,Images\EditSyncLines.png,Edit SyncLines
Button14=ResetSyncLines.lua,Images\ResetSyncLines.png,Reset SyncLines
;Button15=EndEditSyncLines.lua,Images\EndSyncLines.png,Ok
Button15=Separator
Button16=CalcBezier.lua,Images\BezierSurf.png,Get Surf
Button17=ResetBezierSurf.lua,Images\ResetBezierSurf.png,<-- Undo
+30 -82
View File
@@ -16,6 +16,7 @@ KEY_SURF_ANG_TOL = 'SurfAngTol'
KEY_SURF_BORDER_SIZE = 'BorderSize' -- Selection
KEY_SURF_BORDER_SIZE_TOL = 'BorderSizeTol' -- Selection
KEY_SELECTION_REF_SURF = 'nRefSurf' -- Selection
KEY_SELECTION_LAST_SELECTION_TYPE = 'LastSelType' -- Selection (type)
KEY_SELECTION_LAST_IDS = 'vSelLastIds' -- Undo Selection
KEY_REF_TRIMMING_LAYER = 'nRefTrimmingLayer' -- Trimming Layer Ref
KEY_AUTO_TRIMMING = 'AutoTrim' -- AutoTrimming
@@ -38,7 +39,7 @@ LAYER_NAME_SYNC_CURVES = 'SyncCurves'
LAYER_NAME_SYNC_STORED_CURVES = 'SyncStoredCurves'
ANG_FACE_TOL = 30.
ANG_TOL = 15.
LIN_TOL = 0.05
LIN_TOL = 0.2
SYNC_LINES_NUMBER = 0
SYNC_LINES_ANG_TOL = 15.0
@@ -70,7 +71,6 @@ SYNC_LINE_COLOR = Color3d( 0, 255, 0)
RULED_BZ_NAME = 'SurfBz'
RULED_BZ_COLOR = Color3d( 37, 37, 37)
-- ***============================== FUNZIONI ==============================***
--======================== Contatore Incrementale =======================
@@ -108,8 +108,22 @@ function TrimmingVar.IsTrimmingLayer( nId)
return ( sLayerType ~= nil and sLayerType == KEY_LAYER_SELECTION)
end
---------------------------------------------------------------------------
-- Funzione per ottenere il Layer di Trimmatura di riferimento dato un generico Layer
function TrimmingVar.GetTrimmingLayerRefId( nId)
if nId == nil or nId == GDB_ID.NULL then return GDB_ID.NULL end
-- Se Layer di Trimmatura allora è lui stesso
if TrimmingVar.IsTrimmingLayer( nId) then return nId end
if TrimmingVar.IsEditCurvesLayer( nId) or TrimmingVar.IsEditSyncCurvesLayer( nId) then
local nTrimmingLayerRef = EgtGetInfo( nId, KEY_REF_TRIMMING_LAYER, 'i')
if nTrimmingLayerRef ~= nil and TrimmingVar.IsTrimmingLayer( nTrimmingLayerRef) then return nTrimmingLayerRef end
end
return GDB_ID.NULL
end
--============================ Layer Edit Bordi ===========================
---------------------------------------------------------------------------
-- Funzione per creare un Layer di Edit dei bordi
function TrimmingVar.CreateEditCurvesLayer( nCurrPartId, nCurrLayerId)
local nEditLayerId = EgtGroup( nCurrPartId)
@@ -126,6 +140,7 @@ function TrimmingVar.CreateEditCurvesLayer( nCurrPartId, nCurrLayerId)
return nEditLayerId
end
---------------------------------------------------------------------------
-- Funzione per verificare se un Layer è un Layer di Edit dei bordi
function TrimmingVar.IsEditCurvesLayer( nId)
if nId == nil or nId == GDB_ID.NULL then return false end
@@ -134,6 +149,7 @@ function TrimmingVar.IsEditCurvesLayer( nId)
return ( sLayerType ~= nil and sLayerType == KEY_LAYER_EDIT_CURVES)
end
---------------------------------------------------------------------------
-- Funzione per ottenere il Layer di Edit dei bordi corrente
function TrimmingVar.GetCurrentEditLayer( nPartId)
if nPartId == nil or nPartId == GDB_ID.NULL then return false end
@@ -148,6 +164,7 @@ end
--======================== Layer Edit Sync Curve =======================
---------------------------------------------------------------------------
-- Funzione per creare un Layer di Edit delle curve di Sincornizzazione
function TrimmingVar.CreateEditSyncCurvesLayer( nCurrPartId, nCurrLayerId)
local nEditSyncLayerId = EgtGroup( nCurrPartId)
@@ -165,6 +182,7 @@ function TrimmingVar.CreateEditSyncCurvesLayer( nCurrPartId, nCurrLayerId)
return nEditSyncLayerId
end
---------------------------------------------------------------------------
-- Funzione per verificare se un Layer è un Layer di Edit delle curve di Sincronizzazione
function TrimmingVar.IsEditSyncCurvesLayer( nId)
if nId == nil or nId == GDB_ID.NULL then return false end
@@ -173,53 +191,19 @@ function TrimmingVar.IsEditSyncCurvesLayer( nId)
return ( sLayerType ~= nil and sLayerType == KEY_LAYER_SYNC_CURVES)
end
-- Funzione che ritorna il Layer di Stored delle curve di sincronizzazione corrente
function TrimmingVar.GetCurrentEditSyncCurvesLayer( nPartId)
---------------------------------------------------------------------------
-- Funzione che ritorna il Layer di Edit delle curve di sincronizzazione riferito al Layer di Trimming
function TrimmingVar.GetCurrentEditSyncCurvesLayer( nPartId, nTrimmingLayerId)
if nPartId == nil or nPartId == GDB_ID.NULL then return false end
local nEditSyncLayerId
local nLayerId = EgtGetFirstInGroup( nPartId)
while nLayerId do
if TrimmingVar.IsEditSyncCurvesLayer( nLayerId) then return nLayerId end
nLayerId = EgtGetNext( nLayerId)
end
return GDB_ID.NULL
end
--======================== Layer Store Sync Curve =======================
-- Funzione per creare un Layer di Stored delle curve di Sincronizzazione
function TrimmingVar.CreateSyncStoredCurvesLayer( nCurrPartId, nCurrLayerId)
local nEditSyncStoredLayerId = EgtGroup( nCurrPartId)
local bOk = ( nEditSyncStoredLayerId ~= nil)
if bOk then
bOk = ( EgtSetName( nEditSyncStoredLayerId, LAYER_NAME_SYNC_STORED_CURVES) and
EgtSetInfo( nEditSyncStoredLayerId, KEY_LAYER_TYPE, KEY_LAYER_SYNC_STORE_CURVES) and
EgtSetInfo( nEditSyncStoredLayerId, KEY_REF_TRIMMING_LAYER, nCurrLayerId) and
EgtSetColor( nEditSyncStoredLayerId, SYNC_LINE_COLOR) and
EgtSetLevel( nEditSyncStoredLayerId, GDB_LV.SYSTEM))
end
if not bOk then
EgtErase( nEditSyncStoredLayerId)
return GDB_ID.NULL
end
return nEditSyncStoredLayerId
end
-- Funzione per verificare se un Layer è un Layer di Stored delle curve di Sincronizzazione
function TrimmingVar.IsSyncStoredCurvesLayer( nId)
if nId == nil or nId == GDB_ID.NULL then return false end
-- Verifico che la chiave del gruppo sia coerente
local sLayerType = EgtGetInfo( nId, KEY_LAYER_TYPE, 's')
return ( sLayerType ~= nil and sLayerType == KEY_LAYER_SYNC_STORE_CURVES)
end
-- Funzione che ritorna il Layer di Stored delle curve di sincronizzazione corrente
function TrimmingVar.GetCurrentStoredCurvesLayer( nPartId)
if nPartId == nil or nPartId == GDB_ID.NULL then return false end
local nStoredEditLayerId
local nLayerId = EgtGetFirstInGroup( nPartId)
while nLayerId do
if TrimmingVar.IsSyncStoredCurvesLayer( nLayerId) then return nLayerId end
if TrimmingVar.IsEditSyncCurvesLayer( nLayerId) then
local nRefTrimmingLayer = TrimmingVar.GetTrimmingLayerRefId( nLayerId)
if nRefTrimmingLayer ~= nil and nRefTrimmingLayer ~= GDB_ID.NULL and nRefTrimmingLayer == nTrimmingLayerId then
return nLayerId
end
end
nLayerId = EgtGetNext( nLayerId)
end
return GDB_ID.NULL
@@ -227,40 +211,4 @@ end
--======================== Utility =======================
-- Funzione per verificare se un Layer è un Layer di Edit o di Stored
function TrimmingVar.IsEditOrStoredLayer( nId)
if nId == nil or nId == GDB_ID.NULL then return false end
return ( TrimmingVar.IsEditCurvesLayer( nId) or
TrimmingVar.IsEditSyncCurvesLayer( nId) or
TrimmingVar.IsSyncStoredCurvesLayer( nId))
end
-- Funzione per ottenere il Layer di Trimmatura di riferimento dato un generico Layer
function TrimmingVar.GetTrimmingLayerRefId( nId)
if nId == nil or nId == GDB_ID.NULL then return GDB_ID.NULL end
-- Se Layer di Trimmatura allora è lui stesso
if TrimmingVar.IsTrimmingLayer( nId) then return nId end
if TrimmingVar.IsEditOrStoredLayer( nId) then
local nTrimmingLayerRef = EgtGetInfo( nId, KEY_REF_TRIMMING_LAYER, 'i')
if nTrimmingLayerRef ~= nil and TrimmingVar.IsTrimmingLayer( nTrimmingLayerRef) then return nTrimmingLayerRef end
end
return GDB_ID.NULL
end
-- Funzione che dato un Layer di Trimmatura, ritorna tutti i Layer di Edit o Store associati
function TrimmingVar.GetAllEditOrStoredLayer( nPartId, nLayerId)
local vLayerIds = {}
if nLayerId == nil or nLayerId == GDB_ID.NULL then return vLayerIds end
if not TrimmingVar.IsTrimmingLayer( nLayerId) then return vLayerIds end
local nId = EgtGetFirstGroupInGroup( nPartId)
while nId ~= nil do
if TrimmingVar.IsEditOrStoredLayer( nId) then
local nLayerRefId = TrimmingVar.GetTrimmingLayerRefId( nId)
if nLayerRefId ~= nil and nLayerRefId ~= GDB_ID.NULL and nLayerRefId ~= nLayerId then table.insert( vLayerIds, nId) end
end
nId = EgtGetNextGroup( nId)
end
return vLayerIds
end
return TrimmingVar
return TrimmingVar
+2 -2
View File
@@ -2,5 +2,5 @@
-- Gestione della versione di Trimming dei Termoformati
NAME = 'Trimming'
VERSION = '3.1a3'
MIN_EXE = '3.1a3'
VERSION = '3.1a4'
MIN_EXE = '3.1a4'