From b910397ebc8f1370bc7bda2b9d5b062355c23b56 Mon Sep 17 00:00:00 2001 From: Daniele Bariletti Date: Wed, 22 Apr 2026 15:29:43 +0200 Subject: [PATCH] Trimming 3.1d1 : - aggiunte le funzioni per la regolarizzazione locale della superficie. --- ConfirmSurfChange.lua | 156 ++++++++++++++++++++++++++++++++++++++++++ ReduceTwist.lua | 126 ++++++++++++++++++++++++++++++++++ ResetSurfChange.lua | 84 +++++++++++++++++++++++ TrimmingLib.lua | 61 ++++++++++++++++- 4 files changed, 425 insertions(+), 2 deletions(-) create mode 100644 ConfirmSurfChange.lua create mode 100644 ReduceTwist.lua create mode 100644 ResetSurfChange.lua diff --git a/ConfirmSurfChange.lua b/ConfirmSurfChange.lua new file mode 100644 index 0000000..de0c223 --- /dev/null +++ b/ConfirmSurfChange.lua @@ -0,0 +1,156 @@ +-- ConfirmSurfChange.lua by Egalware s.r.l. 2026/04/22 + +require( 'EgtBase') +_ENV = EgtProtectGlobal() +EgtEnableDebug( false) + +-- Carico le costanti di Trimming +EgtAddToPackagePath( EgtGetSourceDir() .. '?.lua') +local GlobVar = require( 'TrimmingLib') +-- Costante di Errore +local ERROR_CONFIRM_SURF_CHANGE = 'Error in Confirm Surf Change : ' + +-- 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_CONFIRM_SURF_CHANGE .. 'Not a valid Trimming Layer', 'Error', 'ERROR', 'OK') + return +end + +-- Recupero le Info +local dLinTol = EgtGetInfo( nCurrLayerId, KEY_LIN_TOL, 'd') + +-- verifico che esista il layer temporaneo con la nuova superficie e i nuovi bordi +local nEditSurfLayer = GlobVar.GetCurrentEditSurfLayer( nCurrPartId, nCurrLayerId) +if nEditSurfLayer == nil or nEditSurfLayer == GDB_ID.NULL then + EgtOutBox( ERROR_CONFIRM_SURF_CHANGE .. 'No Temp Surface Regolarized to confirm', 'Error', 'ERROR', 'OK') + return +end + +-- cerco i nuovi bordi e la nuova superficie +-- verifico ci sia la superficie +local nNewSurf = GDB_ID.NULL +local nId = EgtGetFirstInGroup(nEditSurfLayer) +while nId do + if EgtGetName(nId) == EDIT_SURF_NEWSURF_NAME then nNewSurf = nId end + nId = EgtGetNext( nId) +end + +if nNewSurf == GDB_ID.NULL then + EgtOutBox( ERROR_CONFIRM_SURF_CHANGE .. 'No Temp Surface Regolarized to confirm', 'Error', 'ERROR', 'OK') + return +end + +-- cerco i nuovi bordi +local vNewBorder = {} +nId = EgtGetFirstInGroup(nEditSurfLayer) +while nId do + if EgtGetName(nId) == EDIT_SURF_NEWBORDER_NAME then + table.insert(vNewBorder, nId) + end + nId = EgtGetNext( nId) +end + +if #vNewBorder ~= 2 then + EgtOutBox( ERROR_CONFIRM_SURF_CHANGE .. 'No New Borders to confirm', 'Error', 'ERROR', 'OK') + return + -- li ricavo dalla superficie +end + +EgtDeselectAll() + +local vIdEdges = {} +nId = EgtGetFirstInGroup( nCurrLayerId) +while nId do + -- verifico che sia una Curva e che sia di Bordo + if EgtGetName( nId) == EDGES_NAME then + table.insert( vIdEdges, nId) + end + nId = EgtGetNext( nId) +end + +-- Se nel gruppo di trim ho due curve di bordo le cancello +if #vIdEdges == 2 then + EgtErase( vIdEdges) +end + + +-- verifico ci sia la superficie +local nSurf = GDB_ID.NULL +nId = EgtGetFirstInGroup(nCurrLayerId) +while nId do + if EgtGetType(nId) == GDB_TY.SRF_BEZ then nSurf = nId end + nId = EgtGetNext( nId) +end + +if nSurf ~= GDB_ID.NULL then + EgtErase( nSurf) +end + +-- Verifico che esista il Layer di Edit per le curve di Sincronizzazione +local nLayerEditSyncId = GlobVar.GetCurrentEditSyncCurvesLayer( nCurrPartId, nCurrLayerId) +if nLayerEditSyncId == nil or nLayerEditSyncId == GDB_ID.NULL then +-- EgtOutBox( ERROR_CONFIRM_SURF_CHANGE .. 'Click Edit SyncLines before trying to reduce twist', 'Error', 'ERROR', 'OK') +-- return +end + +-- recupero le linee di Sync selezionate e le riporto al colore standard +local vSyncSel = EgtGetInfo(nCurrLayerId, KEY_SYNC_LINES_REGOLARIZATION, "vs") + +-- verifico che siano selezionate due curve nel layer delle Sync Lines +if #vSyncSel == 2 then + for i,nId in pairs( vSyncSel) do + if EgtGetName(nId) == SYNC_LINE_NAME then + EgtSetColor(nId, SYNC_LINE_COLOR) + end + end +end + +-- cancello l'info nel layer di trimming +EgtRemoveInfo(nCurrLayerId, KEY_SYNC_LINES_REGOLARIZATION) + +-- sposto i nuovi bordi e superficie e cambio colori e nomi +EgtRelocate(nNewSurf, nCurrLayerId) +EgtRelocate(vNewBorder[1], nCurrLayerId) +EgtRelocate(vNewBorder[2], nCurrLayerId) + +EgtSetColor( nNewSurf, RULED_BZ_COLOR) +EgtSetColor(vNewBorder[1],EDGES_COLOR) +EgtSetColor(vNewBorder[2],EDGES_COLOR) + +EgtSetName(nNewSurf, RULED_BZ_NAME) +EgtSetName(vNewBorder[1],EDGES_NAME) +EgtSetName(vNewBorder[2],EDGES_NAME) + +-- scorro le curve di edit e guardo a che parametro corrispondono +-- richiedo a quel parametro l'isocurva sulla superficie nuova +if nLayerEditSyncId ~= nil and nLayerEditSyncId ~= GDB_ID.NULL then + nId = EgtGetFirstInGroup(nLayerEditSyncId) + while nId do + local ptStart = EgtSP(nId) + local dU = EgtCurveParamAtPoint( vNewBorder[1], ptStart, dLinTol) + if dU == nil or dU < 0 then + EgtOutBox( ERROR_CONFIRM_SURF_CHANGE .. 'Error creating the new sync lines', 'Error', 'ERROR', 'OK') + return + end + local ptStart = EgtSurfBezierGetPoint(nNewSurf, dU, 0.) + local ptEnd = EgtSurfBezierGetPoint(nNewSurf, dU, 1.) + local nNewIso = EgtLine( nEditSurfLayer, ptStart, ptEnd) + EgtSetName(nNewIso, SYNC_LINE_NAME) + nId = EgtGetNext(nId) + end + EgtEmptyGroup( nLayerEditSyncId) +end + +-- sostituisco le vecchie con le nuove +nId = EgtGetFirstInGroup(nEditSurfLayer) +while nId do + local nNext = EgtGetNext(nId) + EgtRelocate(nId, nLayerEditSyncId) + nId = nNext +end + +EgtErase(nEditSurfLayer) + +EgtDraw() \ No newline at end of file diff --git a/ReduceTwist.lua b/ReduceTwist.lua new file mode 100644 index 0000000..944cb17 --- /dev/null +++ b/ReduceTwist.lua @@ -0,0 +1,126 @@ +-- ReduceTwist.lua by Egalware s.r.l. 2026/04/21 + +require( 'EgtBase') +_ENV = EgtProtectGlobal() +EgtEnableDebug( false) + +-- Carico le costanti di Trimming +EgtAddToPackagePath( EgtGetSourceDir() .. '?.lua') +local GlobVar = require( 'TrimmingLib') +-- Costante di Errore +local ERROR_REDUCE_TWIST = 'Error in Reduce Surf Twist : ' + +-- 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_REDUCE_TWIST .. 'No Trimming Machining created', 'Error', 'ERROR', 'OK') + return +end + +local vIdEdges = {} +local 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_REDUCE_TWIST .. 'Invalid Border', '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_REDUCE_TWIST .. 'Not 2 Border Curves', 'Error', 'ERROR', 'OK') + EgtSetStatus( nCurrLayerId, GDB_ST.ON) + EgtErase( nLayerEditSyncId) + return +end + +-- verifico ci sia la superficie +local nSurf = GDB_ID.NULL +nId = EgtGetFirstInGroup(nCurrLayerId) +while nId do + if EgtGetType(nId) == GDB_TY.SRF_BEZ then nSurf = nId end + nId = EgtGetNext( nId) +end + +if nSurf == GDB_ID.NULL then + EgtOutBox( ERROR_REDUCE_TWIST .. 'No surface to regolarize', 'Error', 'ERROR', 'OK') + return +end + +-- Verifico che esista il Layer di Edit per le curve di Sincronizzazione +local nLayerEditSyncId = GlobVar.GetCurrentEditSyncCurvesLayer( nCurrPartId, nCurrLayerId) +if nLayerEditSyncId == nil or nLayerEditSyncId == GDB_ID.NULL then + EgtOutBox( ERROR_REDUCE_TWIST .. 'Click Edit SyncLines before trying to reduce twist', 'Error', 'ERROR', 'OK') + return +end + +-- verifico che siano selezionate due curve nel layer delle SynLines +local nSel = EgtGetFirstSelectedObj() +local vSyncSel = {} +while nSel do + -- verifico che sia una curva e che sia nel layer delle SyncLines + if EgtGetName( nSel) == SYNC_LINE_NAME then + table.insert(vSyncSel, nSel) + else + EgtOutBox( ERROR_REDUCE_TWIST .. 'Invalid Curve Selected', 'Error', 'ERROR', 'OK') + return + end + nSel = EgtGetNextSelectedObj() +end + +-- verifico che siano selezionate solo due curve +if #vSyncSel ~= 2 then + EgtOutBox( ERROR_REDUCE_TWIST .. 'Two SyncLines selected needed', 'Error', 'ERROR', 'OK') + EgtSetStatus( nCurrLayerId, GDB_ST.ON) + return +end + +-- creo il layer e setto le info e colori +local nEditSurfLayer = GlobVar.CreateEditSurfLayer( nCurrPartId, nCurrLayerId) +local sInfoVal = EgtNumToString(vSyncSel[1])..","..EgtNumToString(vSyncSel[2]) +EgtSetInfo(nCurrLayerId, KEY_SYNC_LINES_REGOLARIZATION, sInfoVal) +EgtSetColor(vSyncSel[1], EDIT_SURF_SYNC_COLOR) +EgtSetColor(vSyncSel[2], EDIT_SURF_SYNC_COLOR) + + +local nNewSurfId = EgtRegolarizeSurfaceLocally( nEditSurfLayer, nSurf,vSyncSel[1],vSyncSel[2],dLinTol) + +if nNewSurfId == nil or nNewSurfId == GDB_ID.NULL then + EgtOutBox( ERROR_REDUCE_TWIST .. 'Failed Reduction of twist', 'Error', 'ERROR', 'OK') + return +end +EgtSetName(nNewSurfId,EDIT_SURF_NEWSURF_NAME) + +---- richiedo i bordi alla nuova superficie e li metto nel layer temporaneo della modifica alla superficie +local nCrv1 = EgtSurfBezierGetCurveU( nNewSurfId, 0., nEditSurfLayer) +local nCrv2 = EgtSurfBezierGetCurveU( nNewSurfId, 1., nEditSurfLayer) +local vIdNewEdges = {nCrv1, nCrv2} + +EgtSetColor( vIdNewEdges[1], EDIT_SURF_BORDER_COLOR) +EgtSetColor( vIdNewEdges[2], EDIT_SURF_BORDER_COLOR) +EgtSetName( vIdNewEdges[1], EDIT_SURF_NEWBORDER_NAME) +EgtSetName( vIdNewEdges[2], EDIT_SURF_NEWBORDER_NAME) + +-- nascondo i bordi e la superficie originale +EgtSetStatus( nSurf, GDB_ST.OFF) +EgtSetStatus( vIdEdges[1], GDB_ST.OFF) +EgtSetStatus( vIdEdges[2], GDB_ST.OFF) + +EgtDraw() \ No newline at end of file diff --git a/ResetSurfChange.lua b/ResetSurfChange.lua new file mode 100644 index 0000000..28725be --- /dev/null +++ b/ResetSurfChange.lua @@ -0,0 +1,84 @@ +-- ResetSurfChange.lua by Egalware s.r.l. 2026/04/22 + +require( 'EgtBase') +_ENV = EgtProtectGlobal() +EgtEnableDebug( false) + +-- Carico le costanti di Trimming +EgtAddToPackagePath( EgtGetSourceDir() .. '?.lua') +local GlobVar = require( 'TrimmingLib') +-- Costante di Errore +local ERROR_REST_SURF_CHANGE = 'Error in Reset Surf Change : ' + +-- 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_REST_SURF_CHANGE .. 'Not a valid Trimming Layer', 'Error', 'ERROR', 'OK') + return +end + +-- verifico che esista il layer temporaneo con la nuova superficie e i nuovi bordi +local nEditSurfLayer = GlobVar.GetCurrentEditSurfLayer( nCurrPartId, nCurrLayerId) +if nEditSurfLayer == nil or nEditSurfLayer == GDB_ID.NULL then + EgtOutBox( ERROR_REST_SURF_CHANGE .. 'No Temp Surface Regolarized to delete', 'Error', 'ERROR', 'OK') + return +end + +EgtDeselectAll() + +-- cancello tutto quello che c'è in quel layer e ripristino la visibilità dei bordi e della superficie originale +EgtErase(nEditSurfLayer) + +local vIdEdges = {} +local nId = EgtGetFirstInGroup( nCurrLayerId) +while nId do + -- verifico che sia una Curva e che sia di Bordo + if EgtGetName( nId) == EDGES_NAME then + table.insert( vIdEdges, nId) + end + nId = EgtGetNext( nId) +end + +-- Se nel gruppo di trim ho esattamente 2 curve di bordo le rendo visibili +if #vIdEdges == 2 then + EgtSetStatus( vIdEdges[1], GDB_ST.ON) + EgtSetStatus( vIdEdges[2], GDB_ST.ON) +end + + +-- verifico ci sia la superficie +local nSurf = GDB_ID.NULL +nId = EgtGetFirstInGroup(nCurrLayerId) +while nId do + if EgtGetType(nId) == GDB_TY.SRF_BEZ then nSurf = nId end + nId = EgtGetNext( nId) +end + +if nSurf ~= GDB_ID.NULL then + EgtSetStatus( nSurf, GDB_ST.ON) +end + +-- Verifico che esista il Layer di Edit per le curve di Sincronizzazione +local nLayerEditSyncId = GlobVar.GetCurrentEditSyncCurvesLayer( nCurrPartId, nCurrLayerId) +if nLayerEditSyncId == nil or nLayerEditSyncId == GDB_ID.NULL then +-- EgtOutBox( ERROR_REST_SURF_CHANGE .. 'Click Edit SyncLines before trying to reduce twist', 'Error', 'ERROR', 'OK') +-- return +end + +-- recupero le linee di Sync selezionate e le riporto al colore standard +local vSyncSel = EgtGetInfo(nCurrLayerId, KEY_SYNC_LINES_REGOLARIZATION, "vs") + +-- verifico che siano selezionate due curve nel layer delle Sync Lines +if #vSyncSel == 2 then + for i,nId in pairs( vSyncSel) do + if EgtGetName(nId) == SYNC_LINE_NAME then + EgtSetColor(nId, SYNC_LINE_COLOR) + end + end +end + +-- cancello l'info nel layer di trimming +EgtRemoveInfo(nCurrLayerId, KEY_SYNC_LINES_REGOLARIZATION) + +EgtDraw() \ No newline at end of file diff --git a/TrimmingLib.lua b/TrimmingLib.lua index 41a23c0..19eb4da 100644 --- a/TrimmingLib.lua +++ b/TrimmingLib.lua @@ -26,6 +26,7 @@ KEY_SYNC_LINES_NUMBER = 'SkimmingFactor' -- Skimming Sync Lines KEY_SYNC_LINES_SHOW_ON_CORNERS = 'SyncLineShowOnCorners' -- Skimming Sync Lines Show on Corners KEY_SYNC_LINES_NUMBER_ANG_TOL = 'SkimmingFactorAngTol' -- Skimming Sync Lines Tol KEY_SYNC_LINES_INTERPOLATION_IDS = 'SyncLineInterIds' -- Skinning Sync Lines Interpolation Ids +KEY_SYNC_LINES_REGOLARIZATION = "SyncCuvesRef" -- curve di inizio e fine della zona da regolarizzare -- Chive per Tipologia di Layer KEY_LAYER_TYPE = 'Trimming_Layer_Type' @@ -34,6 +35,7 @@ KEY_LAYER_SELECTION_HOLES = 'Trimming_Selection_Holes_Layer' KEY_LAYER_EDIT_CURVES = 'Trimming_EditCurves_Layer' KEY_LAYER_SYNC_CURVES = 'Trimming_SyncCurves_Layer' KEY_LAYER_SYNC_STORE_CURVES = 'Trimming_SyncStoredCurves_Layer' +KEY_LAYER_EDIT_SURF = "Trimming_EditSurf_Layer" -- Generali PART_NAME = 'Trimming' @@ -42,6 +44,7 @@ LAYER_NAME_SELECTION_HOLES = 'TrimmingHoles' LAYER_NAME_EDIT_CURVES = 'EditCurves' LAYER_NAME_SYNC_CURVES = 'SyncCurves' LAYER_NAME_SYNC_STORED_CURVES = 'SyncStoredCurves' +LAYER_NAME_EDIT_SURF = "EditSurf" ANG_FACE_TOL = 30. ANG_TOL = 15. LIN_TOL = 0.2 @@ -81,6 +84,14 @@ SYNC_LINE_INTERP_COLOR = Color3d( 255, 165, 0) RULED_BZ_NAME = 'SurfBz' RULED_BZ_COLOR = Color3d( 37, 37, 37) +-- Edit della superficie di Bezier +EDIT_SURF_NEWSURF_NAME = 'NewSurf' +EDIT_SURF_NEWBORDER_NAME = 'NewBorder' +EDIT_SURF_COLOR = Color3d( 0,128,0) +EDIT_SURF_SYNC_COLOR = Color3d(255,0,128) +EDIT_SURF_BORDER_COLOR = Color3d(128,128,255) + + -- ***========================== FILE INI ==================================*** KEY_SECTION_NAME = "Trimming" @@ -171,7 +182,7 @@ 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 + if TrimmingVar.IsEditCurvesLayer( nId) or TrimmingVar.IsEditSyncCurvesLayer( nId) or TrimmingVar.IsEditSurfLayer( nId)then local nTrimmingLayerRef = EgtGetInfo( nId, KEY_REF_TRIMMING_LAYER, 'i') if nTrimmingLayerRef ~= nil and TrimmingVar.IsTrimmingLayer( nTrimmingLayerRef) then return nTrimmingLayerRef end end @@ -252,7 +263,6 @@ end -- 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 @@ -266,6 +276,53 @@ function TrimmingVar.GetCurrentEditSyncCurvesLayer( nPartId, nTrimmingLayerId) return GDB_ID.NULL end + +--======================== Layer Edit Surf ======================= + +--------------------------------------------------------------------------- +-- Funzione per creare un Layer di Edit delle curve di Sincornizzazione +function TrimmingVar.CreateEditSurfLayer( nCurrPartId, nCurrLayerId) + local nEditSurfLayerId = EgtGroup( nCurrPartId) + local bOk = ( nEditSurfLayerId ~= nil) + if bOk then + bOk = ( EgtSetName( nEditSurfLayerId, LAYER_NAME_EDIT_SURF) and + EgtSetInfo( nEditSurfLayerId, KEY_LAYER_TYPE, KEY_LAYER_EDIT_SURF) and + EgtSetInfo( nEditSurfLayerId, KEY_REF_TRIMMING_LAYER, nCurrLayerId) and + EgtSetColor( nEditSurfLayerId, EDIT_SURF_COLOR)) + end + if not bOk then + EgtErase( nEditSurfLayerId) + return GDB_ID.NULL + end + return nEditSurfLayerId +end + +--------------------------------------------------------------------------- +-- Funzione per verificare se un Layer è un Layer di Edit delle curve di Sincronizzazione +function TrimmingVar.IsEditSurfLayer( 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_EDIT_SURF) +end + +--------------------------------------------------------------------------- +-- Funzione che ritorna il Layer di Edit della superficie riferito al Layer di Trimming +function TrimmingVar.GetCurrentEditSurfLayer( nPartId, nTrimmingLayerId) + if nPartId == nil or nPartId == GDB_ID.NULL then return GDB_ID.NULL end + local nLayerId = EgtGetFirstInGroup( nPartId) + while nLayerId do + if TrimmingVar.IsEditSurfLayer( 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 +end + --======================== Colori ======================== -- Funzione che recupera il colore da una stringa "nR,nG,nB" [0-255],[0-255],[0-255]