-- PartData.lua by Egalware s.r.l. 2026/02/19 -- Libreria globale per Serramenti -- Tabella per definizione modulo local PartData = {} -- Include require( 'EgtBase') local WinData = require( 'WinData') EgtOutLog( ' PartData started', 1) ------------------------------------------------------------------------------------------------------------- -- Recupero offset applicato al profilo function PartData.GetDispOffsetFromNotes( PARTS, nPieceIndex) local bAllOffsetsAreOk = false PARTS[nPieceIndex].DispOffsets.Phase1.dOffsetX = 0 -- dovrà essere calcolato in base alle lavorazioni PARTS[nPieceIndex].DispOffsets.Phase1.dOffsetY = EgtGetInfo( PARTS[nPieceIndex].id, 'OFFY_1', 'd') PARTS[nPieceIndex].DispOffsets.Phase1.dOffsetZ = EgtGetInfo( PARTS[nPieceIndex].id, 'OFFZ_1', 'd') PARTS[nPieceIndex].DispOffsets.Phase2.dOffsetX = 0 -- dovrà essere calcolato in base alle lavorazioni PARTS[nPieceIndex].DispOffsets.Phase2.dOffsetY = EgtGetInfo( PARTS[nPieceIndex].id, 'OFFY_2', 'd') PARTS[nPieceIndex].DispOffsets.Phase2.dOffsetZ = EgtGetInfo( PARTS[nPieceIndex].id, 'OFFZ_2', 'd') -- controllo se tutti gli offset siano settati if PARTS[nPieceIndex].DispOffsets.Phase1.dOffsetY and PARTS[nPieceIndex].DispOffsets.Phase1.dOffsetZ and PARTS[nPieceIndex].DispOffsets.Phase2.dOffsetY and PARTS[nPieceIndex].DispOffsets.Phase2.dOffsetZ then bAllOffsetsAreOk = true end return bAllOffsetsAreOk end --------------------------------------------------------------------- -- Crea il grezzo che verrà messo in macchina function PartData.AddOverMaterialToRaw( PARTS) for i = 1, #PARTS do -- prima di aggiungere sovramateriale al grezzo, calcolo dimensioni del finito local b3Part = EgtGetBBoxGlob( EgtGetFirstNameInGroup( PARTS[i].id, 'Geo') or GDB_ID.NULL, GDB_BB.STANDARD) PARTS[i].b3Part = b3Part PARTS[i].dPartLength = PARTS[i].b3Part:getDimX() PARTS[i].dPartWidth = PARTS[i].b3Part:getDimY() PARTS[i].dPartHeight = PARTS[i].b3Part:getDimZ() -- recupero sovramateriale PARTS[i].RawOffset = {} -- recupero info sovramateriale PARTS[i].RawOffset.dOverMatIn = EgtGetInfo( PARTS[i].id, 'OVERMAT_IN', 'd') or 5 PARTS[i].RawOffset.dOverMatOut = EgtGetInfo( PARTS[i].id, 'OVERMAT_OUT', 'd') or 5 PARTS[i].RawOffset.dOverMatLeft = EgtGetInfo( PARTS[i].id, 'OVERMAT_LEFT', 'd') or 5 PARTS[i].RawOffset.dOverMatRight = EgtGetInfo( PARTS[i].id, 'OVERMAT_RIGHT', 'd') or 5 PARTS[i].dRawLength = PARTS[i].RawOffset.dOverMatLeft + PARTS[i].dPartLength + PARTS[i].RawOffset.dOverMatRight PARTS[i].dRawWidth = PARTS[i].RawOffset.dOverMatOut + PARTS[i].dPartWidth + PARTS[i].RawOffset.dOverMatIn PARTS[i].dRawHeight = PARTS[i].dPartHeight EgtModifyRawPartSize( PARTS[i].idRaw, PARTS[i].dRawLength, PARTS[i].dRawWidth, PARTS[i].dPartHeight) --local vtMove = Vector3d( PARTS[i].RawOffset.dOverMatLeft, PARTS[i].RawOffset.dOverMatOut, 0) --EgtMovePartInRawPart( PARTS[i].id, vtMove) -- TODO da controllare, se ruotato di 180° bisognerebbe prendere dOverMatIn. Lo stesso per la X PARTS[i].OffsetPartToRaw = {} PARTS[i].OffsetPartToRaw.X = PARTS[i].RawOffset.dOverMatLeft PARTS[i].OffsetPartToRaw.Y = PARTS[i].RawOffset.dOverMatOut end end --------------------------------------------------------------------- -- Recupera le dimensioni dei pezzi function PartData.GetDimensionPart( PARTS) if #PARTS == 0 then EgtOutBox( 'Non ci sono pezzi', 'Lavora Pezzi', 'ERROR') return false else -- recupero tutte le dimensioni necessarie local sOut = '' for i = 1, #PARTS do PARTS[i].b3Raw = EgtGetBBoxGlob( EgtGetFirstNameInGroup( PARTS[i].id, 'GeoRaw') or GDB_ID.NULL, GDB_BB.STANDARD) PARTS[i].b3Part = EgtGetBBoxGlob( EgtGetFirstNameInGroup( PARTS[i].id, 'Geo') or GDB_ID.NULL, GDB_BB.STANDARD) local idFrame = EgtGetFirstNameInGroup( EgtGetFirstNameInGroup( PARTS[i].id, 'GeoRaw'), 'AuxFrame') PARTS[i].frame = EgtFR( idFrame) sOut = sOut .. PARTS[i].sName .. ', ' end sOut = sOut:sub( 1, -3) EgtOutLog( 'Pezzi selezionati : ' .. sOut, 1) end end ------------------------------------------------------------------------------------------------------------- return PartData