-- -- EEEEEEEEEE GGGGGG TTTTTTTTTTTTTT -- EEEEEEEEEE GGGGGGGGGG TTTTTTTTTTTTTT -- EEEE GGGG GGGG TTTT -- EEEE GGGG TTTT -- EEEEEEE GGGG GGGGGGG TTTT -- EEEEEEE GGGG GGGGGGG TTTT -- EEEE GGGG GGGG TTTT -- EEEE GGGG GGGG TTTT -- EEEEEEEEEE GGGGGGGGGG TTTT -- EEEEEEEEEE GGGGGG TTTT -- -- by EgalTech s.r.l. -- Libreria delle funzioni ausiliarie by EgalTech s.r.l. 2020/08/13 -- Tabella per definizione modulo local UtilityLib = {} -- Include require( 'EgtBase') local Config = require( 'Config') -- path di salvataggio dati local PNGPath = Config.sBasePath .. "/PNG" -- list of all png created codes local PNGIdList = {} -- Check if folder exists -- function UtilityLib.FolderExists(strFolderName) if EgtExistsDirectory(strFolderName:gsub("\\$",""),"mode") then return true else return false end end -- local OUTLINE = "Outline" -- Colore del grezzo local ColA = Color3d( 255, 165, 0, 30) local SHEETLABEL = "SheetLabel" -- funzione che crea il grezzo function UtilityLib.RawPartCreation(SheetPartId, vtOffs, IsOffLine) local Pz = SheetPartId local Ls = EgtGetFirstNameInGroup( Pz, OUTLINE) local Er = EgtGetFirstNameInGroup( Ls, OUTLINE) local SheetLabel = EgtGetFirstNameInGroup( Ls, SHEETLABEL) local b3Part = EgtGetBBoxGlob( Pz or GDB_ID.NULL, GDB_BB.STANDARD) local b3Solid = EgtGetBBoxGlob( Ls or GDB_ID.NULL, GDB_BB.STANDARD) -- se pezzo non definito, non devo fare alcunchè if not Pz then DISP.ERR = 0 return end -- se pezzo vuoto, non devo fare alcunchè if b3Part:isEmpty() then DISP.ERR = 2 return end -- Definizione e posizionamento del grezzo local nRaw if Er then nRaw = EgtAddRawPartWithPart( Pz, Er, 0, ColA) EgtRemovePartFromRawPart(Pz) EgtSetStatus( Er, GDB_ST.ON) else nRaw = EgtAddRawPartWithPart( Pz, GDB_ID.NULL, dOverMat, ColA) EgtRemovePartFromRawPart(Pz) end if not nRaw then EgtOutLog( 'InitDisp for NE_nest : error defining raw part') DISP.ERR = 3 return end local b3Raw = EgtGetBBoxGlob(nRaw, GDB_BB.STANDARD) local b3Label = EgtGetBBoxGlob(SheetLabel, GDB_BB.STANDARD) local nRawLabel = EgtCopyGlob(SheetLabel, nRaw) local dYPos = b3Raw:getMax():getY() if b3Raw:getDimY() > 1465 then dYPos = b3Raw:getMin():getY() + 1465 + (b3Label:getDimY()) end EgtMove(nRawLabel, Point3d(b3Raw:getMin():getX(), dYPos - b3Label:getDimY(), b3Raw:getMin():getZ()) - b3Label:getMin(), GDB_RT.GLOB) -- se Northwood posiziono a sinistra, altrimenti a destra local nTableRefPoint = MCH_CR.BR if IsOffLine then nTableRefPoint = MCH_CR.BL end if not EgtMoveToCornerRawPart( nRaw, vtOffs, nTableRefPoint) then EgtOutLog( 'InitDisp for NE_nest : error positioning raw part on table') -- DISP.ERR = 4 return end return nRaw end -- -- funzione che imposta tavola macchina function UtilityLib.SetupMachineTable(IsOffline) -- Scelta della tavola local sTab = 'Tab' EgtSetTable( sTab) -- Dimensioni tavola local b3Tab = EgtGetTableArea() -- Richiesta posizione rispetto allo Zero tavola local vtOffs = Vector3d( b3Tab:getDimX(), 0, 0) -- se NorthWood cambio offset if IsOffline then vtOffs = Vector3d(0,0,0) end return vtOffs end -- local MATERIAL = {"MATERIAL FLAG"} local PAINT = {"PAINT FLAG"} local ASSEMBLY = {"TO BE ASSEMBLED","AssemblyCell"} local TNUT = {"T-NUT FLAG","TNutFlag"} local ROUND = {"ROUND EDGE","RoundEdge"} local TAB = {"CHOP AT TAB","ChopAtTab"} local PDF = {"PDF LINK"} local CUTOPT = {"CUT OPT", "CutOpt"} local LABEL = {"LABEL", "Label"} local NAME = {"NAME", "Name"} local INCHAMFER = {"INSIDE CHAMFER WIDTH", "InsideChamferWidth"} local OUTCHAMFER = {"OUTSIDE CHAMFER WIDTH", "OutsideChamferWidth"} local DXFFlags = {MATERIAL, PAINT, ASSEMBLY, TNUT, ROUND, TAB, PDF, CUTOPT, LABEL, NAME, INCHAMFER, OUTCHAMFER} -- funzione che legge i dxf -- valore di ritorno numero 5 e' ErrorType: -- 1) File not found -- 2) Material layer not found function UtilityLib.readDXF(DXFpath, PartExtCode, IsEstimation, CreatePng) -- elimino doppie barre dalla path DXFpath = string.gsub(DXFpath, "\\", '/') local errorType = 0 local material = nil local pdfPath = "" local paint = false local flags = {} local revision = "" -- apro DXF EgtNewFile() EgtOutLog(DXFpath) local res = EgtImportDxf(DXFpath) if not res then errorType = 1 EgtOutLog("DXF file not found :" .. DXFpath) return material, pdfPath, paint, flags, errorType end -- GESTIRE ERRORE!! -- trovo pezzo local part = EgtGetFirstInGroup(GDB_ID.ROOT) -- cerco i layer for Flag = 1, #DXFFlags do local flagLayer = EgtGetFirstNameInGroup(part, DXFFlags[Flag][1]) if flagLayer then local textObject = EgtGetFirstInGroup(flagLayer) -- leggo il testo local flagText = EgtTextContent(textObject) -- verifico se il flag e' material if DXFFlags[Flag][1] == MATERIAL[1] then -- ritaglio valore local _, _, valueText = string.find(flagText, ".*:%s*(%d+)") material = tonumber(valueText) elseif DXFFlags[Flag][1] == PDF[1] then -- ritaglio valore local _, _, valueText = string.find(flagText, ".*:%s*\"(.+)\"") pdfPath = valueText elseif DXFFlags[Flag][1] == PAINT[1] then -- ritaglio valore local _, _, valueText = string.find(flagText, ".*:%s*(%a+)") local PaintVal = string.lower(valueText) if PaintVal == "yes" then paint = true else paint = false end elseif DXFFlags[Flag][1] == NAME[1] then revision = flagText else -- ritaglio valore local _, _, valueText = string.find(flagText, ".*:%s*(%w+[&]*%w*)") flags[DXFFlags[Flag][2]] = valueText end else if Flag < 8 then errorType = 2 EgtOutLog(DXFFlags[Flag][1] .. " layer not found :" .. DXFpath) return material, pdfPath, paint, flags, errorType end end end if ( IsEstimation and paint) or CreatePng then -- verifico se gia' processato local Index = 1 local bFound = false while not bFound and Index <= #PNGIdList do if PartExtCode == PNGIdList[Index] then bFound = true end Index = Index + 1 end if not bFound then SavePartImage(revision) table.insert(PNGIdList, PartExtCode) end end return material, pdfPath, paint, flags, errorType, revision end -- -- funzione che salva immagine per etichetta verniciati function SavePartImage(PartExtCode) local nPartId = EgtGetFirstInGroup(GDB_ID.ROOT) local nLayerId = EgtGetFirstLayer( nPartId) while nLayerId and nLayerId ~= GDB_ID.NULL do -- nascondo tutti i layer tranne i contorni, i buchi e le rampe local sLayerName = EgtGetName(nLayerId) local bOutlineLayer = false for Index = 1, #Config.OutlineMachining[1] do if sLayerName == Config.OutlineMachining[1][Index] then bOutlineLayer = true end end if bOutlineLayer == true or sLayerName == Config.HoleMachining[1] or sLayerName == Config.RampMachining[1] then -- coloro i contorni di nero local nGeomId = EgtGetFirstInGroup(nLayerId) while nGeomId and nGeomId ~= GDB_ID.NULL do EgtSetColor(nGeomId, BLACK()) nGeomId = EgtGetNext(nGeomId) end else -- disattivo tutti gli altri layer EgtSetStatus(nLayerId, GDB_ST.OFF) end nLayerId = EgtGetNextLayer(nLayerId) end -- -- calcolo bbox pezzo -- local b3PartId = EgtGetBBox(nPartId, GDB_BB.STANDARD + GDB_BB.ONLY_VISIBLE + GDB_BB.IGNORE_TEXT + GDB_BB.IGNORE_DIM) -- -- lo sposto -- EgtMove(nPartId, Vector3d(- (b3PartId:getDimX() / 2), - (b3PartId:getDimY() / 2), 0)) EgtZoom(SCE_ZM.ALL) EgtGetImage( SCE_SM.SH, WHITE(), WHITE(), 1600, 1000, PNGPath .. "/" .. PartExtCode .. ".png") EgtGetImage( SCE_SM.SH, WHITE(), WHITE(), 2000, 800, PNGPath .. "/" .. PartExtCode .. "_SP.png") -- EgtSaveFile(PNGPath .. "/" .. PartExtCode .. ".nge") end -- --------------------------------------------------------------------- return UtilityLib