-- RunSlicing.lua by Egaltech s.r.l. 2022/09/16 -- Calcoli prima fase per Stampa 3d -- Tabella per definizione modulo local RunSlicing = {} --PRINT.PROGRAM = 1 -- Intestazioni require( 'EgtBase') EgtOutLog( ' RunSlicing started', 1) -- Costanti generali _G.package.loaded.AddManData = nil local AMD = require( 'AddManData') -- Librerie _G.package.loaded.CalcSlices = nil local CSLICES = require( 'CalcSlices') _G.package.loaded.CalcPaths = nil local CPATHS = require( 'CalcPaths') _G.package.loaded.RunCalcSolids = nil local CSOLIDS = require( 'RunCalcSolids') _G.package.loaded.CalcToolPath = nil local CTP = require( 'CalcToolPath') --------------------------------------------------------------------- local function RestoreOriginalPosition( nPartId) if not nPartId then return end -- correzione solo del solido ( progetti vecchi) local vtMove1 = EgtGetInfo( nPartId, KEY_MOVED_PART, 'v') if vtMove1 then vtMove1 = - vtMove1 EgtRemoveInfo( nPartId, KEY_MOVED_PART) local SolidLayId = EgtGetFirstNameInGroup( nPartId, PRINT_SOLID) if SolidLayId then local EntId = EgtGetFirstInGroup( SolidLayId) while EntId do EgtMove( EntId, vtMove1, GDB_RT.GLOB) EntId = EgtGetNext( EntId) end end end -- correzione dell'intero pezzo local vtMove = EgtGetInfo( nPartId, KEY_MOVED_PART2, 'v') if vtMove then EgtRemoveInfo( nPartId, KEY_MOVED_PART2) EgtMove( nPartId, - vtMove, GDB_RT.GLOB) -- sistemo il riferimento local nFrameId = EgtGetFirstNameInGroup( nPartId, LAY_FRAME) EgtMove( nFrameId, vtMove, GDB_RT.GLOB) end end --------------------------------------------------------------------- local function RemoveOldSlices( nPartId) if not nPartId then return end -- se slicing già presente lo cancello for i = 1, 2 do local sFind = EgtIf( i == 1, '', '__') .. SLICE_LAYER .. "*" local vOldSliceId = EgtGetNameInGroup( nPartId, sFind) for i = 1, #( vOldSliceId or {}) do EgtErase( vOldSliceId[i]) end end end --------------------------------------------------------------------- local function RemoveOldTFS() local nTFSCalcId = EgtGetFirstNameInGroup( GDB_ID.ROOT, LAY_TFSCALC) if nTFSCalcId then EgtEmptyGroup( nTFSCalcId) end end --------------------------------------------------------------------- local function SetViewInfo( bCalcSolids) local nViewId = EgtGetFirstNameInGroup( GDB_ID.ROOT, VIEWPARAMS) if not nViewId then nViewId = EgtGroup( GDB_ID.ROOT) EgtSetName( nViewId, VIEWPARAMS) EgtSetLevel( nViewId, GDB_LV.SYSTEM) end EgtSetInfo( nViewId, IMPORTED_SOLID, false) EgtSetInfo( nViewId, OUTER_CRV, false) EgtSetInfo( nViewId, PATH_GRP, false) EgtSetInfo( nViewId, SOLID_GRP, bCalcSolids) EgtSetInfo( nViewId, TOOLPATH_GRP, true) end --------------------------------------------------------------------- local function VerifyNgeFile( sFilePath) if not sFilePath or type( sFilePath) ~= 'string' then return false end if EgtGetFileType then return ( EgtGetFileType( sFilePath) == EEX_FT.NGE) else local _, _, sExt = EgtSplitPath( sFilePath or '') return ( sExt:lower() == '.nge') end end --------------------------------------------------------------------- function RunSlicing.Exec() -- Verifico che il progetto abbia un nome valido local sCurrProjectPath = EgtGetCurrFilePath() if not PRINT or PRINT.PROGRAM ~= 1 then if not VerifyNgeFile( sCurrProjectPath) then EgtOutBox( 'Save project before calculating slices!', 'Warning', 'WARNING') return end end -- Recupero il primo pezzo già posizionato in macchina local nPartId = EgtGetFirstPart() while nPartId do if EgtGetInfo( nPartId, KEY_PART_ON_TABLE, 'b') then break end nPartId = EgtGetNextPart( nPartId) end if not nPartId then EgtOutBox( 'Position part on the machine table before slicing it!', 'Error', 'ERROR') return end local nSolidLayId = EgtGetFirstNameInGroup( nPartId, PRINT_SOLID) local nStmId = EgtGetFirstInGroup( nSolidLayId or GDB_ID.NULL) if nStmId and EgtGetType( nStmId) ~= GDB_TY.SRF_MESH then EgtOutBox( "Part without surface!", 'Warning', 'WARNING') return end local nRibsLayId = EgtGetFirstNameInGroup( nPartId, LAY_RIBS) local nShellNbrLay = EgtGetFirstNameInGroup( nPartId, LAY_SHELL_NBR) local nAuxSolidsLay = EgtGetFirstNameInGroup( nPartId, LAY_AUX_SOLIDS) local nStartLayId = EgtGetFirstNameInGroup( nPartId, LAY_MACH_START) -- Elimino eventuale precedente lavorazione EgtSetCurrMachGroup() EgtRemoveAllOperations() EgtResetCurrMachGroup() -- Lettura dati macchina local sMachIni = EgtGetCurrMachineDir() .. '\\' .. EgtGetCurrMachineName() .. '.ini' local HMax = tonumber( EgtGetStringFromIni( '3dPrinting', 'HMax', 500, sMachIni)) -- Eventuale ripristino posizione originaria RestoreOriginalPosition( nPartId) -- Rimozione vecchi conti RemoveOldSlices( nPartId) -- Rimozione vecchi TFS RemoveOldTFS() -- Calcolo delle fette local bOk = CSLICES.Exec( nPartId, nStmId, HMax) EgtDraw() -- Calcolo dei percorsi sul centro strand in basso bOk = bOk and CPATHS.Exec( nPartId) EgtDraw() -- Calcolo dei percorsi di lavoro bOk = bOk and CTP.Exec( nPartId) EgtDraw() -- Calcolo dei solidi degli strand a partire dai percorsi di lavoro local bCalcSolids = EgtGetInfo( nPartId, KEY_CALC_SOLIDS, 'b') EgtRemoveInfo( nPartId, KEY_HAS_SOLIDS) if bCalcSolids and bOk then CSOLIDS.Exec( nPartId) end if not bOk then -- eventuale ripristino posizione originaria RestoreOriginalPosition( nPartId) -- rimozione vecchi conti RemoveOldSlices( nPartId) EgtDraw() return false end EgtSetStatus( nSolidLayId, GDB_ST.OFF) EgtSetStatus( nRibsLayId or GDB_ID.NULL, GDB_ST.OFF) EgtSetStatus( nShellNbrLay or GDB_ID.NULL, GDB_ST.OFF) EgtSetStatus( nAuxSolidsLay or GDB_ID.NULL, GDB_ST.OFF) EgtSetStatus( nStartLayId or GDB_ID.NULL, GDB_ST.OFF) EgtDraw() -- Aggiorno impostazioni di visibilita' per ShowManager SetViewInfo( bCalcSolids) return true end --------------------------------------------------------------------- return RunSlicing