Files
3dprinting/LuaLibs/RunGcodeGenerate.lua
Dario Sassi 8708a8daea 3dPrinting :
- la lavorazione speciale per estrusione Orizzontale si usa anche per estrusione Multiplanare Orizzontale.
2026-04-24 14:50:00 +02:00

186 lines
5.3 KiB
Lua

-- RunGcodeGenerate.lua by Egaltech s.r.l. 2023/04/11
-- 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
local nSlicingType = EgtGetInfo( nPartId, KEY_SLICING_TYPE, 'i')
-- Recupero i layer da processare
local vLayIds = EgtGetNameInGroup( nPartId, SLICE_LAYER.."*")
if not vLayIds or #vLayIds == 0 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()
-- Determino lavorazione di libreria
local sExtrName = 'Extrusion'
if nSlicingType == SLICING_TYPE.HORIZONTAL or nSlicingType == SLICING_TYPE.MULTIPLANAR_HOR then
local sMachIni = EgtGetCurrMachineDir() .. '\\' .. EgtGetCurrMachineName() .. '.ini'
sExtrName = EgtGetStringFromIni( SEC_3DPRINTING, KEY_HORIZ_EXTR, sExtrName, sMachIni)
end
-- Aggiungo la lavorazione
local nMchId = EgtAddMachining( 'Extrusion 1', sExtrName)
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, 'icrs')
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