-- 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