Files
3dprinting/LuaLibs/RunSlicing.lua
T
DarioS 2bdc03d1ca 3dPrinting :
- aggiunta gestione CoastingFeed e WipeFeedPu.
2022-06-14 05:53:12 +02:00

204 lines
8.3 KiB
Lua

-- RunSlicing.lua by Egaltech s.r.l. 2022/06/13
-- 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_SLICING_45, '0')
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, '')
SetParamInfo( sFile, nParamsGrp, DEFAULT_SECTION, KEY_TOOL_DIAM, '0.0')
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_COASTING_FEED, '20000.0')
SetParamInfo( sFile, nParamsGrp, DEFAULT_SECTION, KEY_WIPE_LEN, '0.0')
SetParamInfo( sFile, nParamsGrp, DEFAULT_SECTION, KEY_WIPE_FEEDPU, '0.9')
-- 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