Files
trimming/TrimmingLib.lua
Daniele Bariletti 03434ce575 Trimming :
- aggiornato file NewTrimming che ora sarà IL BOTTONE. Chiamando quello inizia il workflow e si viene guidati fino alla fine.
- aggiunto il file Params, che verrà chiamato dal bottone Options.
2026-09-09 10:19:42 +02:00

512 lines
23 KiB
Lua

-- TrimmingLib.lua by Egalware s.r.l. 2026/01/05
-- Modulo per Definizione di Costanti, Variabili e Funzioni di Trimming
local TrimmingVar = {
nCounter = 0,
bInit = false
}
-- -- *** ============================== COSTANTI ============================== ***
-- -- Chiavi Info Part/Layers
-- MCH_TRIMMING.KEY_LIN_TOL = 'LinTol'
-- MCH_TRIMMING.KEY_LIN_TOL_EDGES = 'LinTolEdges' -- Edges Extraction (modify)
-- MCH_TRIMMING.KEY_ANG_TOL_EDGES = 'AngTolEdges' -- Edges Extraction (modify)
-- MCH_TRIMMING.KEY_THICK_EDGES = 'ThickEdges' -- Edges Extraction (modify)
-- MCH_TRIMMING.KEY_ANG_TOL = 'AngTol'
-- MCH_TRIMMING.KEY_SURF_ANG_TOL = 'SurfAngTol'
-- MCH_TRIMMING.KEY_SURF_BORDER_SIZE = 'BorderSize' -- Selection
-- MCH_TRIMMING.KEY_SURF_BORDER_SIZE_TOL = 'BorderSizeTol' -- Selection
-- MCH_TRIMMING.KEY_SELECTION_REF_SURF = 'nRefSurf' -- Selection
-- MCH_TRIMMING.KEY_SELECTION_LAST_SELECTION_TYPE = 'LastSelType' -- Selection (type)
-- MCH_TRIMMING.KEY_SELECTION_LAST_IDS = 'vSelLastIds' -- Undo Selection
-- MCH_TRIMMING.KEY_REF_TRIMMING_LAYER = 'nRefTrimmingLayer' -- Trimming Layer Ref
-- MCH_TRIMMING.KEY_AUTO_TRIMMING = 'AutoTrim' -- AutoTrimming
-- MCH_TRIMMING.KEY_SYNC_LINES_NUMBER = 'SkimmingFactor' -- Skimming Sync Lines
-- MCH_TRIMMING.KEY_SYNC_LINES_SHOW_ON_CORNERS = 'SyncLineShowOnCorners' -- Skimming Sync Lines Show on Corners
-- MCH_TRIMMING.KEY_SYNC_LINES_NUMBER_ANG_TOL = 'SkimmingFactorAngTol' -- Skimming Sync Lines Tol
-- MCH_TRIMMING.KEY_SYNC_LINES_INTERPOLATION_IDS = 'SyncLineInterIds' -- Sync Lines Interpolation Ids
-- MCH_TRIMMING.KEY_BOUND_LINES_INTERPOLATION_IDS = 'BoundSyncLineInterIds' -- Sync Lines Interpolation Ids
-- MCH_TRIMMING.KEY_ORIENTING_LINES_START_LEN = 'OrientingLinesStartLen' -- Lunghezza Interpolazione Orienting Lines Iniziale
-- MCH_TRIMMING.KEY_ORIENTING_LINES_END_LEN = 'OrientingLinesEndLen' -- Lunghezza Interpolazione Orienting Lines Finale
-- MCH_TRIMMING.KEY_ORIENTING_THETA_START = 'OrientingThetaStart' -- Angolo Theta Start per Orienting Lines
-- MCH_TRIMMING.KEY_ORIENTING_PHI_START = 'OrientingPhiStart' -- Angolo Phi Start per Orienting Lines
-- MCH_TRIMMING.KEY_ORIENTING_THETA_END = 'OrientingThetaEnd' -- Angolo Theta End per Orienting Lines
-- MCH_TRIMMING.KEY_ORIENTING_PHI_END = 'OrientingPhiEnd' -- Angolo Phi End per Orienting Lines
-- MCH_TRIMMING.KEY_SYNC_LINES_REGOLARIZATION = 'SyncCurvesRef' -- curve di inizio e fine della zona da regolarizzare
-- -- Chive per Tipologia di Layer
-- MCH_TRIMMING.KEY_LAYER_TYPE = 'Trimming_Layer_Type'
-- MCH_TRIMMING.KEY_LAYER_SELECTION = 'Trimming_Selection_Layer'
-- MCH_TRIMMING.KEY_LAYER_SELECTION_HOLES = 'Trimming_Selection_Holes_Layer'
-- MCH_TRIMMING.KEY_LAYER_EDIT_CURVES = 'Trimming_EditCurves_Layer'
-- MCH_TRIMMING.KEY_LAYER_SYNC_CURVES = 'Trimming_SyncCurves_Layer'
-- MCH_TRIMMING.KEY_LAYER_ORIENTATION_CURVES = 'Trimming_OrientationCurves_Layer'
-- MCH_TRIMMING.KEY_LAYER_EDIT_SURF = 'Trimming_EditSurf_Layer'
-- -- Generali
-- MCH_TRIMMING.PART_NAME = 'Trimming'
-- MCH_TRIMMING.LAYER_NAME_SELECTION = 'Trimming'
-- MCH_TRIMMING.LAYER_NAME_SELECTION_HOLES = 'TrimmingHoles'
-- MCH_TRIMMING.LAYER_NAME_EDIT_CURVES = 'EditCurves'
-- MCH_TRIMMING.LAYER_NAME_SYNC_CURVES = 'SyncCurves'
-- MCH_TRIMMING.LAYER_NAME_ORIENTATION_CURVES = 'OrientationCurves'
-- MCH_TRIMMING.LAYER_NAME_EDIT_SURF = 'EditSurf'
ANG_FACE_TOL = 30.
ANG_TOL = 15.
LIN_TOL = 0.2
STRIP_SIZE = 5.0
STRIP_SIZE_TOL = 0.75
EDGE_THICK = 5.0
SYNC_LINES_NUMBER = 0
SYNC_LINES_ANG_TOL = 15.0
ORIENTING_LINES_THETA_START = 90.0
ORIENTING_LINES_PHI_START = 90.0
ORIENTING_LINES_THETA_END = 90.0
ORIENTING_LINES_PHI_END = 90.0
ORIENTING_LINES_START_LEN = 10.0
ORIENTING_LINES_END_LEN = 10.0
-- -- Selezione delle superfici --
-- MCH_TRIMMING.SELECTION_SURF_NAME = 'Selected_Surf'
-- MCH_TRIMMING.SELECTION_TYPE = {
-- INSERT = 'Insert',
-- FACE_SEARCH = 'Search Faces',
-- SURF_SEARCH = 'Search Surfaces'
-- }
-- MCH_TRIMMING.SELECTION_NO_FACE = -1
SELECTION_SURF_COLOR = Color3d( 255, 255, 185)
-- -- Creazione dei bordi Bezier --
-- MCH_TRIMMING.EDGES_NAME = 'Border'
-- MCH_TRIMMING.EDGE_HOLE_NAME = 'ButtonHole'
EDGES_COLOR = Color3d( 0, 128, 255)
-- MCH_TRIMMING.KEY_BORDER_ORDER = 'BorderOrder'
-- MCH_TRIMMING.KEY_FIRST_BORDER = 'BorderV0'
-- MCH_TRIMMING.KEY_SECOND_BORDER = 'BorderV1'
-- -- Edit dei bordi di Bezier --
-- MCH_TRIMMING.EDGES_EDIT_TYPE = {
-- AUTOMATIC = 'Automatic',
-- THICKNESS = 'Thickness'
-- }
-- -- Creazione dei tratti di sincronizzazione
-- MCH_TRIMMING.SYNC_LINE_NAME = 'SyncLines'
SYNC_LINE_COLOR = Color3d( 0, 255, 0)
SYNC_LINE_INTERP_COLOR = Color3d( 255, 165, 0)
-- -- Creazione dei tratti di orientamento
-- MCH_TRIMMING.ORIENTATION_LINE_NAME = 'OrientationLine'
ORIENTATION_LINE_COLOR = Color3d( 255, 255, 0)
-- -- Creazione della Superficie Ruled di Bezier
-- MCH_TRIMMING.RULED_BZ_NAME = 'SurfBz'
RULED_BZ_COLOR = Color3d( 37, 37, 37)
-- -- Edit della superficie di Bezier
-- MCH_TRIMMING.EDIT_SURF_NEWSURF_NAME = 'NewSurf'
-- MCH_TRIMMING.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)
local function MakeTableBidirectional( tb, labels)
for i, name in ipairs( labels) do
tb[name] = i
tb[i] = name
end
return 1
end
-----------TABELLE DEI LABEL
local tbSurfSelLabels = {'Single Surface','Composite Surface'}
SURF_SEL_LABEL = {}
MakeTableBidirectional( SURF_SEL_LABEL, tbSurfSelLabels)
local tbEdgeCreationLabels = {'MonoSkin','Complete Surface'}
EDGE_CREATION_LABEL = {}
MakeTableBidirectional( EDGE_CREATION_LABEL, tbEdgeCreationLabels)
-- ***========================== 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_ORIENTATION_COLOR = "OrientationLineColor"
function TrimmingVar.SetColorOrientationLines( myColor)
if not myColor then return end
ORIENTATION_LINE_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 =======================
function TrimmingVar.IncrementCounter()
TrimmingVar.nCounter = TrimmingVar.nCounter + 1
end
function TrimmingVar.ResetCounter()
TrimmingVar.nCounter = 0
end
--========================== Layer di Trimmatura ==========================
---------------------------------------------------------------------------
-- Funzione per creare un Layer di Trimmatura
function TrimmingVar.CreateTrimmingLayer( nCurrPartId, bForHoles)
local nCurrLayerId = EgtGroup( nCurrPartId)
local bOk = ( nCurrLayerId ~= nil)
if bOk then
TrimmingVar.IncrementCounter()
if not bForHoles then
local sName = MCH_TRIMMING.LAYER_NAME_SELECTION .. ' ' .. TrimmingVar.nCounter
bOk = EgtSetName( nCurrLayerId, sName) and EgtSetInfo( nCurrLayerId, MCH_TRIMMING.KEY_LAYER_TYPE, MCH_TRIMMING.KEY_LAYER_SELECTION)
else
local sName = MCH_TRIMMING.LAYER_NAME_SELECTION_HOLES .. ' ' .. TrimmingVar.nCounter
bOk = EgtSetName( nCurrLayerId, sName) and EgtSetInfo( nCurrLayerId, MCH_TRIMMING.KEY_LAYER_TYPE, MCH_TRIMMING.KEY_LAYER_SELECTION_HOLES)
end
end
local nAuxLay = EgtGroup( nCurrLayerId)
EgtSetName( nAuxLay, MCH_TRIMMING.LAYER_NAME_SELECTED_SURFS)
EgtSetLevel( nAuxLay, GDB_LV.SYSTEM)
if not bOk then
EgtErase( nCurrLayerId)
return GDB_ID.NULL
end
return nCurrLayerId, nAuxLay
end
---------------------------------------------------------------------------
-- Funzione per verificare se un Layer è un Layer di Trimmatura
function TrimmingVar.IsTrimmingLayer( nId)
-- Verifico che la chiave del gruppo sia coerente
local sLayerType = EgtGetInfo( nId, MCH_TRIMMING.KEY_LAYER_TYPE, 's')
return ( sLayerType ~= nil and ( sLayerType == MCH_TRIMMING.KEY_LAYER_SELECTION or sLayerType == MCH_TRIMMING.KEY_LAYER_SELECTION_HOLES))
end
---------------------------------------------------------------------------
-- Funzione per verificare se un Layer è un Layer di Trimmatura per Fori/Asole
function TrimmingVar.IsTrimmingHoleLayer( nId)
-- Verifico che sia un Layer di Trimmatura
if not TrimmingVar.IsTrimmingLayer( nId) then return false end
local sLayerType = EgtGetInfo( nId, MCH_TRIMMING.KEY_LAYER_TYPE, 's')
return ( sLayerType ~= nil and sLayerType == MCH_TRIMMING.KEY_LAYER_SELECTION_HOLES)
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) or
TrimmingVar.IsEditSurfLayer( nId) or TrimmingVar.CreateEditOrientationCurvesLayer( nId) then
local nTrimmingLayerRef = EgtGetInfo( nId, MCH_TRIMMING.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)
local bOk = ( nEditLayerId ~= nil)
if bOk then
bOk = ( EgtSetName( nEditLayerId, MCH_TRIMMING.LAYER_NAME_EDIT_CURVES) and
EgtSetInfo( nEditLayerId, MCH_TRIMMING.KEY_LAYER_TYPE, MCH_TRIMMING.KEY_LAYER_EDIT_CURVES) and
EgtSetInfo( nEditLayerId, MCH_TRIMMING.KEY_REF_TRIMMING_LAYER, nCurrLayerId))
end
if not bOk then
EgtErase( nEditLayerId)
return GDB_ID.NULL
end
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
-- Verifico che la chiave del gruppo sia coerente
local sLayerType = EgtGetInfo( nId, MCH_TRIMMING.KEY_LAYER_TYPE, 's')
return ( sLayerType ~= nil and sLayerType == MCH_TRIMMING.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
local nEditLayerId
local nLayerId = EgtGetFirstInGroup( nPartId)
while nLayerId do
if TrimmingVar.IsEditCurvesLayer( nLayerId) then return nLayerId end
nLayerId = EgtGetNext( nLayerId)
end
return GDB_ID.NULL
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)
local bOk = ( nEditSyncLayerId ~= nil)
if bOk then
bOk = ( EgtSetName( nEditSyncLayerId, MCH_TRIMMING.LAYER_NAME_SYNC_CURVES) and
EgtSetInfo( nEditSyncLayerId, MCH_TRIMMING.KEY_LAYER_TYPE, MCH_TRIMMING.KEY_LAYER_SYNC_CURVES) and
EgtSetInfo( nEditSyncLayerId, MCH_TRIMMING.KEY_REF_TRIMMING_LAYER, nCurrLayerId) and
EgtSetColor( nEditSyncLayerId, SYNC_LINE_COLOR))
end
if not bOk then
EgtErase( nEditSyncLayerId)
return GDB_ID.NULL
end
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
-- Verifico che la chiave del gruppo sia coerente
local sLayerType = EgtGetInfo( nId, MCH_TRIMMING.KEY_LAYER_TYPE, 's')
return ( sLayerType ~= nil and sLayerType == MCH_TRIMMING.KEY_LAYER_SYNC_CURVES)
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 nLayerId = EgtGetFirstInGroup( nPartId)
while nLayerId do
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
end
--======================== Layer Orientation Curve =======================
---------------------------------------------------------------------------
-- Funzione per creare un Layer di Orientation delle curve
function TrimmingVar.CreateEditOrientationCurvesLayer( nCurrPartId, nCurrLayerId)
local nEditOrientationLayerId = EgtGroup( nCurrPartId)
local bOk = ( nEditOrientationLayerId ~= nil)
if bOk then
bOk = ( EgtSetName( nEditOrientationLayerId, MCH_TRIMMING.LAYER_NAME_ORIENTATION_CURVES) and
EgtSetInfo( nEditOrientationLayerId, MCH_TRIMMING.KEY_LAYER_TYPE, MCH_TRIMMING.KEY_LAYER_ORIENTATION_CURVES) and
EgtSetInfo( nEditOrientationLayerId, MCH_TRIMMING.KEY_REF_TRIMMING_LAYER, nCurrLayerId) and
EgtSetColor( nEditOrientationLayerId, ORIENTATION_LINE_COLOR))
end
if not bOk then
EgtErase( nEditOrientationLayerId)
return GDB_ID.NULL
end
return nEditOrientationLayerId
end
---------------------------------------------------------------------------
-- Funzione per verificare se un Layer è un Layer di Orientation delle curve
function TrimmingVar.IsOrientationCurvesLayer( 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, MCH_TRIMMING.KEY_LAYER_TYPE, 's')
return ( sLayerType ~= nil and sLayerType == MCH_TRIMMING.KEY_LAYER_ORIENTATION_CURVES)
end
---------------------------------------------------------------------------
-- Funzione che ritorna il Layer di Orientation delle curve riferito al Layer di Trimming
function TrimmingVar.GetCurrentEditOrientationCurvesLayer( nPartId, nTrimmingLayerId)
if nPartId == nil or nPartId == GDB_ID.NULL then return false end
local nLayerId = EgtGetFirstInGroup( nPartId)
while nLayerId do
if TrimmingVar.IsOrientationCurvesLayer( 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
--======================== 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, MCH_TRIMMING.LAYER_NAME_EDIT_SURF) and
EgtSetInfo( nEditSurfLayerId, MCH_TRIMMING.KEY_LAYER_TYPE, MCH_TRIMMING.KEY_LAYER_EDIT_SURF) and
EgtSetInfo( nEditSurfLayerId, MCH_TRIMMING.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, MCH_TRIMMING.KEY_LAYER_TYPE, 's')
return ( sLayerType ~= nil and sLayerType == MCH_TRIMMING.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]
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
-----------------------------------------------------------------------------
-- Funzione per convertire un Color3d ad una stringa "nR,nG,nB" [0-255],[0-255],[0-255]
function TrimmingVar.GetStringFromColor( myColor)
if not myColor then return nil end
local cColor = Color3d( myColor)
return ( "".. cColor:getRed().. ",".. cColor:getGreen().. ",".. cColor:getBlue())
end
-----------------------------------------------------------------------------
-- Funzione per convertire Colori da Classe3d a stringa per File.ini
function TrimmingVar.GetColorForIniFile( myColor)
if not myColor then return nil end
local cColor = Color3d( myColor)
return ( "".. cColor:getRed().. ",".. cColor:getGreen().. ",".. cColor:getBlue())
end
--======================== Utility =======================
-----------------------------------------------------------------------------
-- Funzione che ritorna tutte le Superici Visibili presenti e visibili nel Layer dell'Entità nId
-- Ritorna un vettore di Id = {} o nil in caso di errore
function TrimmingVar.GetAllOtherVisibileSurfsInSameLayer( nId)
local nSurfGrp = EgtGetParent( nId)
if not nSurfGrp or nSurfGrp == GDB_ID.NULL then return nil end
local vAllSurfIds = { }
local nOtherId = EgtGetFirstInGroup( nSurfGrp)
while nOtherId do
if EgtGetStatus( nOtherId) == GDB_ST.ON and nOtherId ~= nId then
local nType = EgtGetType( nOtherId)
if nType == GDB_TY.SRF_BEZ or nType == GDB_TY.SRF_MESH then table.insert( vAllSurfIds, nOtherId) end
end
nOtherId = EgtGetNext( nOtherId)
end
return vAllSurfIds
end
-----------------------------------------------------------------------------
-- Funzione che ritorna il Box Complessivo delle Entità desiderate
function TrimmingVar.GetGlobBox( vIds)
local BBox3dGlob = BBox3d()
for i = 1, #vIds do
local nId = vIds[i]
if nId then
local currBBox3d = EgtGetBBoxGlob( nId, GDB_BB.STANDARD)
if i == 1 then BBox3dGlob = currBBox3d
else BBox3dGlob = BBox3dGlob + currBBox3d end
end
end
return BBox3dGlob
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 Linee di Orientamento
local sOrientationLineColor = EgtGetStringFromIni( KEY_SECTION_NAME, KEY_INI_ORIENTATION_COLOR, "", sFileIni)
if sOrientationLineColor then TrimmingVar.SetColorOrientationLines( TrimmingVar.GetColorFromString( sOrientationLineColor)) 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