Files
3dprinting/LuaLibs/RunGcodeGenerate.lua
T
DarioS 412d1b15b5 3dPrinting :
- in generazione CN aggiunta restituzione stringa di errore (PRINT.MSG).
2023-02-02 11:54:43 +01:00

178 lines
4.9 KiB
Lua

-- RunGcodeGenerate.lua by Egaltech s.r.l. 2023/02/02
-- Calcoli prima fase per Stampa 3d
-- Tabella per definizione modulo
local RunGcodeGenerate = {}
-- Intestazioni
require( 'EgtBase')
EgtOutLog( ' RunGcodeGenerate started', 1)
-- Costanti generali
_G.package.loaded.AddManData = nil
local AMD = require( 'AddManData')
---------------------------------------------------------------------
local function GetLayerParamsForGcodeGenerate( nPartId)
local LayerParams = {}
LayerParams.LinkZup = EgtGetInfo( nPartId, KEY_LINK_ZUP, 'd')
return LayerParams
end
---------------------------------------------------------------------
function RunGcodeGenerate.Exec()
-- aggiorno interfaccia
EgtProcessEvents( 601, 0)
-- Recupero il pezzo (per ora primo e unico)
local nPartIndex = 1
local nPartId = EgtGetFirstNameInGroup( GDB_ID.ROOT, PART .. nPartIndex) or EgtGetFirstNameInGroup( GDB_ID.ROOT, PART)
if not nPartId then
EgtOutBox( 'Error missing part', 'GcodeGenerate')
return
end
-- Recupero i layer da processare
local vLayIds = EgtGetNameInGroup( nPartId, SLICE_LAYER.."*")
if not vLayIds then
EgtOutBox( 'Error missing slices', 'GcodeGenerate')
return
end
-- Recupero i parametri relativi al layer
local LayerParams = GetLayerParamsForGcodeGenerate( nPartId)
-- aggiorno interfaccia
EgtProcessEvents( 605, 0)
-- Ciclo sui layer
local vEntId = {}
for nIdx = 1, #vLayIds do
-- scorro tutti i gruppi di contorni
local nCrvGrpId = EgtGetFirstNameInGroup( vLayIds[ nIdx], CONTOUR_GRP.."*")
while nCrvGrpId do
-- recupero il gruppo dei percorsi utensile
local nTpathGrpId = EgtGetFirstNameInGroup( nCrvGrpId, TOOLPATH_GRP)
if not nTpathGrpId then
EgtOutBox( 'Error missing toolpaths', 'GcodeGenerate')
return
end
-- recupero le entità nel gruppo
local nEntId = EgtGetFirstInGroup( nTpathGrpId)
while nEntId do
table.insert( vEntId, nEntId)
nEntId = EgtGetNext( nEntId)
end
--passo al gruppo di contorni successivo
nCrvGrpId = EgtGetNextName( nCrvGrpId, CONTOUR_GRP.."*")
end
end
if #vEntId == 0 then
EgtOutBox( 'Error missing entities', 'GcodeGenerate')
return
end
-- aggiorno interfaccia
EgtProcessEvents( 610, 0)
-- Imposto gruppo di lavoro
EgtSetCurrMachGroup()
-- Assegno il nome del file CN
local MchGrpId = EgtGetCurrMachGroup()
local sPath = EgtGetCurrFilePath()
local sDir, sName, sExt = EgtSplitPath( sPath)
EgtSetInfo( MchGrpId, 'NcName', sName..'.cnc')
-- Rimuovo eventuali precedenti lavorazioni
EgtRemoveAllOperations()
-- Aggiungo la lavorazione
local nMchId = EgtAddMachining( 'Extrusion 1', 'Extrusion')
if not nMchId then
EgtOutBox( 'Error adding Extrusion', 'GcodeGenerate')
return
end
-- aggiorno interfaccia
EgtProcessEvents( 620, 0)
EgtSetMachiningGeometry( vEntId)
local sNotes = EgtAdjustNotes( '', 'LinkZup', LayerParams.LinkZup)
EgtSetMachiningParam( MCH_MP.USERNOTES, sNotes)
if not EgtApplyMachining() then
local nErr, sErr = EgtGetLastMachMgrError()
local sMsg = ''
if nErr == 2803 and string.find( sErr, '(3)', 1, true) then
sMsg = ' Missing Feed & Speed.'
elseif nErr == 2804 then
sMsg = ' Axes Values not calculable.'
elseif nErr == 2805 then
sMsg = ' Outstroke Axes (see Log File).'
else
sMsg = ' See Log File.'
end
EgtResetCurrMachGroup()
if PRINT and PRINT.PROGRAM == 1 then
PRINT.ERR = 1
PRINT.MSG = sMsg
else
EgtOutBox( 'Error in Machining :'..sMsg, 'GcodeGenerate')
end
return
end
-- aggiorno interfaccia
EgtProcessEvents( 650, 0)
-- Salvo il progetto
local sFilePath = EgtGetCurrFilePath()
sFilePath = EgtChangePathExtension( sFilePath, 'nge')
EgtSetCurrFilePath( sFilePath)
EgtSaveFile()
-- aggiorno interfaccia
EgtProcessEvents( 680, 0)
-- Genero il programma CN
local sInfo = 'Icarus ver.' .. EgtGetExeVersion() .. ' - ' .. sPath
local sISOFilePath = ''
if PRINT and PRINT.PROGRAM == 1 and PRINT.ISOFILEPATH then
sISOFilePath = PRINT.ISOFILEPATH
end
local bGenOk = EgtGenerate( sISOFilePath, sInfo)
if bGenOk then
EgtEstimate('')
end
-- aggiorno interfaccia
EgtProcessEvents( 690, 0)
EgtResetCurrMachGroup()
if PRINT and PRINT.PROGRAM == 1 then
if bGenOk then
PRINT.ERR = 0
else
PRINT.ERR = 2
end
else
if bGenOk then
EgtOutBox( 'Generation successful.', 'GcodeGeneration', 'INFO')
else
EgtOutBox( 'Generation failed.', 'GcodeGeneration', 'ERROR')
end
end
-- aggiorno interfaccia
EgtProcessEvents( 700, 0)
end
---------------------------------------------------------------------
return RunGcodeGenerate