8708a8daea
- la lavorazione speciale per estrusione Orizzontale si usa anche per estrusione Multiplanare Orizzontale.
186 lines
5.3 KiB
Lua
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
|