173465984a
- aggiunta materiali - aggiunta possibilita' di creare svg su richiesta - aggiunta gestione etichetta remnant
254 lines
8.4 KiB
Lua
254 lines
8.4 KiB
Lua
--
|
|
-- 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
|