-- RunSlicing.lua by Egaltech s.r.l. 2022/04/12 -- Calcoli prima fase per Stampa 3d -- Tabella per definizione modulo local RunSlicing = {} -- 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.CalcSolids = nil local CSOLIDS = require( 'CalcSolids') _G.package.loaded.CalcToolPath = nil local CTP = require( 'CalcToolPath') --------------------------------------------------------------------- local function SetParamInfo( sFile, nParamsGrp, sSection, sKey, sDefaultVal) local sVal = EgtGetStringFromIni( sSection, sKey, sDefaultVal, sFile) EgtSetInfo( nParamsGrp, sKey, sVal) end --------------------------------------------------------------------- local function LoadParams( sFile, nPartId) -- creo gruppo dove salvare parametri local nParamsGrp = EgtGetFirstNameInGroup( GDB_ID.ROOT, PARAMS_GRP) or GDB_ID.NULL if nParamsGrp == GDB_ID.NULL then nParamsGrp = EgtGroup( GDB_ID.ROOT) EgtRelocate( nParamsGrp, GDB_ID.ROOT, GDB_IN.FIRST_SON) EgtSetName( nParamsGrp, PARAMS_GRP) EgtSetLevel( nParamsGrp, GDB_LV.SYSTEM) end EgtSetInfo( nParamsGrp, INFO_PARTD_ID, nPartId) SetParamInfo( sFile, nParamsGrp, DEFAULT_SECTION, KEY_SLICE_STEP, '1.0') SetParamInfo( sFile, nParamsGrp, DEFAULT_SECTION, KEY_STRAND, '6.0') SetParamInfo( sFile, nParamsGrp, DEFAULT_SECTION, KEY_SHELLS_NBR, '3') SetParamInfo( sFile, nParamsGrp, DEFAULT_SECTION, KEY_OFFSET_SLICE, '0.0') local sStrandOrder = EgtGetStringFromIni( DEFAULT_SECTION, KEY_PRINT_ORDER, 'InToOut', sFile) if sStrandOrder == 'OutToIn' then EgtSetInfo( nParamsGrp, KEY_PRINT_ORDER, PRINT_ORDER.EXT_INT_INF) else -- 'InToOut' EgtSetInfo( nParamsGrp, KEY_PRINT_ORDER, PRINT_ORDER.INF_INT_EXT) end local sStrandDirection = EgtGetStringFromIni( DEFAULT_SECTION, KEY_PRINT_DIRECTION, 'CCW', sFile) if sStrandDirection == 'CW' then EgtSetInfo( nParamsGrp, KEY_PRINT_DIRECTION, PRINT_DIRECTION.CW) else -- 'CCW' EgtSetInfo( nParamsGrp, KEY_PRINT_DIRECTION, PRINT_DIRECTION.CCW) end local sLinkType = EgtGetStringFromIni( DEFAULT_SECTION, KEY_LINK_TYPE, 'None', sFile) if sLinkType == 'None' then EgtSetInfo( nParamsGrp, KEY_LINK_TYPE, LINK_TYPE.NONE) elseif sLinkType == 'BiArc' then EgtSetInfo( nParamsGrp, KEY_LINK_TYPE, LINK_TYPE.BIARC) else -- 'Linear' EgtSetInfo( nParamsGrp, KEY_LINK_TYPE, LINK_TYPE.LINEAR) end SetParamInfo( sFile, nParamsGrp, DEFAULT_SECTION, KEY_SP_OFFSET_ON_SLICE, '0.0') SetParamInfo( sFile, nParamsGrp, DEFAULT_SECTION, KEY_LINK_PARAM, '0') SetParamInfo( sFile, nParamsGrp, DEFAULT_SECTION, KEY_LINK_ZUP, '0') SetParamInfo( sFile, nParamsGrp, DEFAULT_SECTION, KEY_FLOOR_NBR, '0') SetParamInfo( sFile, nParamsGrp, DEFAULT_SECTION, KEY_SPEED, '0.0') SetParamInfo( sFile, nParamsGrp, DEFAULT_SECTION, KEY_FEED, '0.0') SetParamInfo( sFile, nParamsGrp, DEFAULT_SECTION, KEY_EXT_FEED, '0.0') SetParamInfo( sFile, nParamsGrp, DEFAULT_SECTION, KEY_INT_FEED, '0.0') SetParamInfo( sFile, nParamsGrp, DEFAULT_SECTION, KEY_INFILL_FEED, '0.0') SetParamInfo( sFile, nParamsGrp, DEFAULT_SECTION, KEY_LEAD_IN_FEED, '0.0') SetParamInfo( sFile, nParamsGrp, DEFAULT_SECTION, KEY_LEAD_OUT_FEED, '0.0') SetParamInfo( sFile, nParamsGrp, DEFAULT_SECTION, KEY_SUPPORT_FEED, '0.0') SetParamInfo( sFile, nParamsGrp, DEFAULT_SECTION, KEY_G0_FEED, '0.0') SetParamInfo( sFile, nParamsGrp, DEFAULT_SECTION, KEY_MATERIAL, '') local sLeadInType = EgtGetStringFromIni( DEFAULT_SECTION, KEY_LEAD_IN_TYPE, 'None', sFile) if sLeadInType == 'Linear' then EgtSetInfo( nParamsGrp, KEY_LEAD_IN_TYPE, LEAD_TYPE.LINEAR) elseif sLeadInType == 'Arc' then EgtSetInfo( nParamsGrp, KEY_LEAD_IN_TYPE, LEAD_TYPE.ARC) else -- 'None' EgtSetInfo( nParamsGrp, KEY_LEAD_IN_TYPE, LEAD_TYPE.NONE) end SetParamInfo( sFile, nParamsGrp, DEFAULT_SECTION, KEY_LEAD_IN_TANG_DIST, '0.0') SetParamInfo( sFile, nParamsGrp, DEFAULT_SECTION, KEY_LEAD_IN_ORTHO_DIST, '0.0') local sLeadOutType = EgtGetStringFromIni( DEFAULT_SECTION, KEY_LEAD_OUT_TYPE, 'None', sFile) if sLeadOutType == 'Linear' then EgtSetInfo( nParamsGrp, KEY_LEAD_OUT_TYPE, LEAD_TYPE.LINEAR) elseif sLeadOutType == 'Arc' then EgtSetInfo( nParamsGrp, KEY_LEAD_OUT_TYPE, LEAD_TYPE.ARC) else -- 'None' EgtSetInfo( nParamsGrp, KEY_LEAD_OUT_TYPE, LEAD_TYPE.NONE) end SetParamInfo( sFile, nParamsGrp, DEFAULT_SECTION, KEY_LEAD_OUT_TANG_DIST, '0.0') SetParamInfo( sFile, nParamsGrp, DEFAULT_SECTION, KEY_LEAD_OUT_ORTHO_DIST, '0.0') SetParamInfo( sFile, nParamsGrp, DEFAULT_SECTION, KEY_OFFSET_LEAD_POINT, '0.0') SetParamInfo( sFile, nParamsGrp, DEFAULT_SECTION, KEY_COASTING_LEN, '0.0') SetParamInfo( sFile, nParamsGrp, DEFAULT_SECTION, KEY_WIPE_LEN, '0.0') -- recupero il punto iniziale e lo salvo tra i parametri local ptStart = Point3d( 0, 0, 0) local nPtStartId = EgtGetFirstNameInGroup( nPartId, KEY_START_POINT) if nPtStartId then ptStart = EgtSP( nPtStartId, GDB_ID.ROOT) end EgtSetInfo( nParamsGrp, KEY_START_POINT, ptStart) end function RunSlicing.Exec() -- Verifico che il progetto sia stato salvato local sCurrProjectPath = EgtGetCurrFilePath() if not sCurrProjectPath or sCurrProjectPath == '' then EgtOutBox( 'Save project before calculating slicing!', 'Warning', 'WARNING') return end -- Recupero ultimo oggetto selezionato local nStmId = EgtGetLastSelectedObj() -- Verifico sia una superficie if not nStmId or EgtGetType( nStmId) ~= GDB_TY.SRF_MESH then EgtOutText( "L'oggetto selezionato non รจ una superficie") EgtPause( 1000) return end local nPartId = EgtGetParent( EgtGetParent( nStmId)) -- Verifico che il pezzo sia stato posizionato in macchina local sPartName = EgtGetName( nPartId) if not sPartName or sPartName == '' or sPartName:sub( 1, 4) ~= PART then EgtOutBox( 'Position part on the machine table before slicing it!', 'Error', 'ERROR') return end -- Scelta del file dei parametri local sLastParamFile = EgtGetStringFromIni( '3dPrinting', 'ParamFile', 'C:\\ProgramData\\Egaltech\\EgtCam5\\3dPrinting\\Machinings\\aaa.ini', EgtGetIniFile()) local sDir = EgtSplitPath( sLastParamFile) local sParamFile = EgtFileDialog( true, sDir..'*.ini', '*.ini||') if not sParamFile then EgtOutBox('Error no file', '') return end EgtWriteStringToIni( '3dPrinting', 'ParamFile', sParamFile, EgtGetIniFile()) -- Elimino eventuale precedente file dei risultati local sResultFile = EgtChangePathExtension( sCurrProjectPath, '.csv') EgtEraseFile( sResultFile) -- Lettura dei parametri LoadParams( sParamFile, nPartId) -- Lettura dati macchina local sMachIni = EgtGetCurrMachineDir() .. '\\' .. EgtGetCurrMachineName() .. '.ini' local HMax = tonumber( EgtGetStringFromIni( '3dPrinting', 'HMax', 500, sMachIni)) -- Calcolo delle fette CSLICES.Exec( nPartId, nStmId, HMax) EgtDraw() -- Calcolo dei percorsi sul centro strand in basso CPATHS.Exec( nPartId) EgtDraw() -- Calcolo dei percorsi di lavoro CTP.Exec( nPartId) EgtDraw() -- Calcolo dei solidi degli strand a partire dai percorsi di lavoro CSOLIDS.Exec( nPartId) EgtSetStatus( nStmId, GDB_ST.OFF) EgtDraw() -- Aggiorno impostazioni di visibilita' per ShowManager local nViewId = EgtGetFirstNameInGroup( GDB_ID.ROOT, VIEWPARAMS) if not nViewId then nViewId = EgtGroup( GDB_ID.ROOT) EgtSetName( nViewId, VIEWPARAMS) end EgtSetInfo( nViewId, IMPORTED_SOLID, false) EgtSetInfo( nViewId, OUTER_CRV, false) EgtSetInfo( nViewId, PATH_GRP, false) EgtSetInfo( nViewId, SOLID_GRP, true) EgtSetInfo( nViewId, TOOLPATH_GRP, true) end --------------------------------------------------------------------- return RunSlicing