From a066ea8f9aec8d2d024db396784ac6a55122cbb9 Mon Sep 17 00:00:00 2001 From: Emmanuele Sassi Date: Tue, 12 Apr 2022 13:10:05 +0200 Subject: [PATCH] - Modificate tutti i lua dei bottoni per portarli in libreria --- GcodeGenerate.lua | 55 +----- LuaLibs/RunGcodeGenerate.lua | 67 +++++++ LuaLibs/RunMachiningParamCalc.lua | 181 ++++++++++++++++++ LuaLibs/RunMachiningParamEdit.lua | 56 ++++++ LuaLibs/RunMaterialParamEdit.lua | 55 ++++++ ...Positioning.lua => RunPartPositioning.lua} | 10 +- LuaLibs/RunShowManager.lua | 110 +++++++++++ LuaLibs/RunSliceAdvancement.lua | 96 ++++++++++ LuaLibs/RunSlicing.lua | 141 ++++++++++++++ LuaLibs/RunViewManager.lua | 117 +++++++++++ MachiningParamCalc.lua | 169 +--------------- MachiningParamEdit.lua | 45 +---- MaterialParamEdit.lua | 44 +---- PartPositioning.lua | 6 +- ShowManager.lua | 99 +--------- SliceAdvancement.lua | 85 +------- Slicing.lua | 126 +----------- ViewManager.lua | 106 +--------- 18 files changed, 871 insertions(+), 697 deletions(-) create mode 100644 LuaLibs/RunGcodeGenerate.lua create mode 100644 LuaLibs/RunMachiningParamCalc.lua create mode 100644 LuaLibs/RunMachiningParamEdit.lua create mode 100644 LuaLibs/RunMaterialParamEdit.lua rename LuaLibs/{CalcPartPositioning.lua => RunPartPositioning.lua} (94%) create mode 100644 LuaLibs/RunShowManager.lua create mode 100644 LuaLibs/RunSliceAdvancement.lua create mode 100644 LuaLibs/RunSlicing.lua create mode 100644 LuaLibs/RunViewManager.lua diff --git a/GcodeGenerate.lua b/GcodeGenerate.lua index 4ed74a6..1047d2b 100644 --- a/GcodeGenerate.lua +++ b/GcodeGenerate.lua @@ -10,54 +10,9 @@ EgtEnableDebug( false) local sBaseDir = EgtGetSourceDir() EgtAddToPackagePath( sBaseDir .. 'LuaLibs\\?.lua') --- Costanti generali -_G.package.loaded.AddManData = nil -local AMD = require( 'AddManData') +-- Librerie +_G.package.loaded.RunGcodeGenerate = nil +local RGCG = require( 'RunGcodeGenerate') --- Recupero il pezzo (per ora primo e unico) -local nPartIndex = 1 -local nPartId = EgtGetFirstNameInGroup( GDB_ID.ROOT, PART .. nPartIndex) -if not nPartId then - EgtOutBox( 'Error missing part', 'GcodeGenerate') - return -end - --- Recupero i layer da processare -local vLayIds = EgtGetNameInGroup( nPartId, SLICE_LAYER.."*") -if not vLayIds then - EgtOutBox( 'Error missing slices', 'ToolPathCalc') - return -end - --- 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', 'ToolPathCalc') - 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', 'ToolPathCalc') - return -end - --- Aggiungo la lavorazione -EgtSetCurrMachGroup() -EgtAddMachining( 'Extrusion 1', 'ExtrusionA') -EgtSetMachiningGeometry( vEntId) -EgtApplyMachining() +-- Calcolo +RGCG.Exec() diff --git a/LuaLibs/RunGcodeGenerate.lua b/LuaLibs/RunGcodeGenerate.lua new file mode 100644 index 0000000..b37260c --- /dev/null +++ b/LuaLibs/RunGcodeGenerate.lua @@ -0,0 +1,67 @@ +-- RunGcodeGenerate.lua by Egaltech s.r.l. 2022/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') + +function RunGcodeGenerate.Exec() + -- Recupero il pezzo (per ora primo e unico) + local nPartIndex = 1 + local nPartId = EgtGetFirstNameInGroup( GDB_ID.ROOT, PART .. nPartIndex) + if not nPartId then + EgtOutBox( 'Error missing part', 'GcodeGenerate') + return + end + + -- Recupero i layer da processare + local vLayIds = EgtGetNameInGroup( nPartId, SLICE_LAYER.."*") + if not vLayIds then + EgtOutBox( 'Error missing slices', 'ToolPathCalc') + return + end + + -- 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', 'ToolPathCalc') + 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', 'ToolPathCalc') + return + end + + -- Aggiungo la lavorazione + EgtSetCurrMachGroup() + EgtAddMachining( 'Extrusion 1', 'ExtrusionA') + EgtSetMachiningGeometry( vEntId) + EgtApplyMachining() +end + +--------------------------------------------------------------------- +return RunGcodeGenerate diff --git a/LuaLibs/RunMachiningParamCalc.lua b/LuaLibs/RunMachiningParamCalc.lua new file mode 100644 index 0000000..eb0cdee --- /dev/null +++ b/LuaLibs/RunMachiningParamCalc.lua @@ -0,0 +1,181 @@ +-- RunMachiningParamCalc.lua by Egaltech s.r.l. 2022/04/05 +-- Gestione visualizzazione per Stampa 3d + +-- Tabella per definizione modulo +local RunMachiningParamCalc = {} + +-- Intestazioni +require( 'EgtBase') + +EgtOutLog( ' RunMachiningParamCalc started', 1) + +-- Costanti generali +local AMD = require( 'AddManData') +local CSV = require( 'CSVManager') + +function RunMachiningParamCalc.Exec() + + nParamsGrp = EgtGetFirstNameInGroup( GDB_ID.ROOT, PARAMS_GRP) or GDB_ID.NULL + if nParamsGrp == GDB_ID.NULL then + EgtOutBox( 'Impossible calculating before applying a machining.', 'Error', 'ERROR') + return + end + + local dMachiningFeed = EgtGetInfo( nParamsGrp, KEY_FEED, 'd') + local dSliceStep = EgtGetInfo( nParamsGrp, KEY_SLICE_STEP, 'd') + local dStrand = EgtGetInfo( nParamsGrp, KEY_STRAND, 'd') + local sMaterial = EgtGetInfo( nParamsGrp, KEY_MATERIAL) + + local sMachiningPath = EgtGetStringFromIni( '3dPrinting', 'ParamFile', "", EgtGetIniFile()) + local dCoeffX = tonumber( EgtGetStringFromIni( DEFAULT_SECTION, KEY_COEFF_X, 0, sMachiningPath)) + local dCoeffY = tonumber( EgtGetStringFromIni( DEFAULT_SECTION, KEY_COEFF_Y, 0, sMachiningPath)) + local sCalcBaseDir = EgtGetStringFromIni( '3dPrinting', 'BaseDir', 'C:\\ProgramData\\Egaltech\\EgtCam5\\3dPrinting', EgtGetIniFile()) + local sCurrProjectPath = EgtGetCurrFilePath() + local _, sCurrProjectName = EgtSplitPath( sCurrProjectPath) + local sResultFile = sCalcBaseDir .. '\\Results\\' .. sCurrProjectName .. '.csv' + local bResultFile = EgtExistsFile( sResultFile) + + -- calcolo intervallo tempi consentito + local sMaterialPath = sCalcBaseDir .. '\\Materials\\' .. sMaterial .. '.csv' + local MaterialCSV = read_file( sMaterialPath) + local dMinTime = 0 + local dMaxTime = 0 + if not MaterialCSV then + EgtOutBox( 'Material csv file not found.', 'Error', 'ERROR') + return + end + local bSectionFound = false + for nSectionIndex = 1, #MaterialCSV do + local Section = MaterialCSV[nSectionIndex] + if tonumber( Section[1]) == dStrand and tonumber( Section[2]) == dSliceStep then + dMinTime = tonumber(Section[3]) + dMaxTime = tonumber(Section[4]) + bSectionFound = true + break + end + end + if not bSectionFound then + EgtOutBox( 'Section not found in Material csv file.', 'Error', 'ERROR') + return + end + + -- carico eventuale file dei risultati + local CSVOldResult + if bResultFile then + CSVOldResult = read_file( sResultFile) + end + + -- tabella del csv del risultato + local CSVNewResult = {} + + -- ciclo sui pezzi + local nPartIndex = 1 + local nPartId = EgtGetFirstNameInGroup( GDB_ID.ROOT, PART .. nPartIndex) + while nPartId do + -- ciclo sui layer + local nLayerIndex = 1 + local nLayerId = EgtGetFirstNameInGroup( nPartId, SLICE_LAYER .. nLayerIndex) + while nLayerId do + local sLayerName = EgtGetName( nLayerId) + local nLayerIndex = tonumber( sLayerName:sub( #SLICE_LAYER + 1)) + -- calcolo lunghezza totale del layer + local dTotLayerLength = 0 + local nCrvId = EgtGetFirstGroupInGroup( nLayerId) + while nCrvId do + local nToolPathId = EgtGetFirstNameInGroup( nCrvId, TOOLPATH_GRP) + -- sommo lunghezze percorsi + local dTotCrvLength = 0 + nShellId = EgtGetFirstInGroup( nToolPathId) + while nShellId do + --local nType = EgtGetInfo( nShellId, KEY_TYPE, 'i') + dTotCrvLength = dTotCrvLength + EgtCurveLength( nShellId) + nShellId = EgtGetNext( nShellId) + end + dTotLayerLength = dTotLayerLength + dTotCrvLength + nCrvId = EgtGetNext( nCrvId) + end + -- recupero feed del layer + local dLayerFeed = 0 + if bResultFile then + -- leggo il valore dal file + local bResultFound = false + for nResultIndex = 1, #CSVOldResult do + local OldResult = CSVOldResult[nResultIndex] + if tonumber( OldResult[1]) == nLayerIndex then + dLayerFeed = tonumber( OldResult[5]) + bResultFound = true + break + end + end + if not bResultFound then + -- uso valore di default + dLayerFeed = dMachiningFeed + end + else + -- uso valore di default + dLayerFeed = dMachiningFeed + end + -- calcolo tempo stimato del layer + local dEsteemedTime = dTotLayerLength / dLayerFeed * 60 + -- calcolo speed + local dSpeed = ((( dLayerFeed * dSliceStep * dStrand ) / 60) - dCoeffX) / dCoeffY + -- scrivo info feed e speed in group toolpath + nCrvId = EgtGetFirstGroupInGroup( nLayerId) + while nCrvId do + local nToolPathId = EgtGetFirstNameInGroup( nCrvId, TOOLPATH_GRP) + EgtSetInfo( nToolPathId, KEY_FEED, dLayerFeed) + EgtSetInfo( nToolPathId, KEY_SPEED, dSpeed) + nCrvId = EgtGetNext( nCrvId) + end + -- riporto valori calcolati in tabella per csv + local sStatus = '' + if dEsteemedTime < dMinTime then + sStatus = 'KO(-)' + elseif dEsteemedTime > dMinTime and dEsteemedTime < dMaxTime then + sStatus = 'OK' + elseif dEsteemedTime > dMaxTime then + sStatus = 'KO(+)' + end + --table.insert( CSVOutTable, { Index = nLayerIndex, EsteemedTime = dEsteemedTime, Feed = dLayerFeed, Speed = dSpeed}) + table.insert( CSVNewResult, { nLayerIndex, dTotLayerLength, dEsteemedTime, sStatus, dLayerFeed, dSpeed}) + nLayerIndex = nLayerIndex + 1 + nLayerId = EgtGetFirstNameInGroup( nPartId, SLICE_LAYER .. nLayerIndex) + end + nPartIndex = nPartIndex + 1 + nPartId = EgtGetFirstNameInGroup( GDB_ID.ROOT, PART .. nPartIndex) + end + + -- scrivo nuovo file csv di risultato + local file = io.open( sResultFile, "w") + if file then + file:write('LayerIndex; Len; Time; Status; Feed; Speed') + file:write('\n') + for NewResultIndex = 1, #CSVNewResult do + local CSVOutLine = CSVNewResult[NewResultIndex] + local sParams = '' + for ParamIndex = 1, #CSVOutLine do + if ParamIndex > 1 then + sParams = sParams .. ";" + end + if ParamIndex == 4 then + sParams = sParams .. CSVOutLine[ParamIndex] + else + sParams = sParams .. EgtNumToString( CSVOutLine[ParamIndex], 1) + end + end + file:write(sParams) + file:write('\n') + end + file:close() + local sReadProgPath = EgtGetStringFromIni( '3dPrinting', RESULT_READ_PROG, "", EgtGetIniFile()) + if not sReadProgPath or not EgtWinExec( sReadProgPath .. ' ' .. sResultFile) then + EgtOutBox( 'Impossible opening software to show results. You can find them in ' .. sResultFile, 'Error', 'ERROR') + end + else + EgtOutBox( 'Impossible writing results file in ' .. sResultFile, 'Error', 'ERROR') + end + +end + +--------------------------------------------------------------------- +return RunMachiningParamCalc diff --git a/LuaLibs/RunMachiningParamEdit.lua b/LuaLibs/RunMachiningParamEdit.lua new file mode 100644 index 0000000..f5614bf --- /dev/null +++ b/LuaLibs/RunMachiningParamEdit.lua @@ -0,0 +1,56 @@ +-- RunMachiningParamEdit.lua by Egaltech s.r.l. 2022/04/05 +-- Gestione visualizzazione per Stampa 3d + +-- Tabella per definizione modulo +local RunMachiningParamEdit = {} + +-- Intestazioni +require( 'EgtBase') + +EgtOutLog( ' RunMachiningParamEdit started', 1) + +-- Costanti generali +local AMD = require( 'AddManData') + +function RunMachiningParamEdit.Exec() + -- recupero cartella delle lavorazioni + local sCalcBaseDir = EgtGetStringFromIni( '3dPrinting', 'BaseDir', 'C:\\ProgramData\\Egaltech\\EgtCam5\\3dPrinting', EgtGetIniFile()) + local sMachiningDirPath = sCalcBaseDir .. '\\Machinings\\' + + -- recupero file delle lavorazioni + --local Machinings = {} + local sMachinings = '' + + local f = io.popen("dir " .. sMachiningDirPath .. " /B", "r") + for entry in f:lines() do + --Machinings[#Machinings + 1] = entry + local sDir, sFile, sExt = EgtSplitPath(entry) + if sExt == '.ini' then + if sMachinings ~= "" then + sMachinings = sMachinings .. ',' + end + sMachinings = sMachinings .. sFile + end + end + + -- chiedo quale file aprire + MachiningValues = EgtDialogBox( 'Machinings edit', { 'Machining', 'CB:' .. sMachinings}) + if not MachiningValues or #MachiningValues < 1 then return end + + -- verifico esistenza file + local sSelMachiningPath = sMachiningDirPath .. MachiningValues[1] .. '.ini' + if not EgtExistsFile( sSelMachiningPath) then + EgtOutBox( 'Machining file not found', 'Error', 'ERROR') + return + end + + -- apro programma di edit + local sEditProgPath = EgtGetStringFromIni( '3dPrinting', 'MachiningEditProg', "", EgtGetIniFile()) + if not sEditProgPath or not EgtWinExec( sEditProgPath .. ' ' .. sSelMachiningPath) then + EgtOutBox( 'Impossible opening software to show Machining. You can find it in ' .. sSelMachiningPath, 'Error', 'ERROR') + end + +end + +--------------------------------------------------------------------- +return RunMachiningParamEdit diff --git a/LuaLibs/RunMaterialParamEdit.lua b/LuaLibs/RunMaterialParamEdit.lua new file mode 100644 index 0000000..0e76d4b --- /dev/null +++ b/LuaLibs/RunMaterialParamEdit.lua @@ -0,0 +1,55 @@ +-- RunMaterialParamEdit.lua by Egaltech s.r.l. 2022/04/09 +-- Gestione edit parametri materiali per Stampa 3d + +-- Tabella per definizione modulo +local RunMaterialParamEdit = {} + +-- Intestazioni +require( 'EgtBase') + +EgtOutLog( ' RunMaterialParamEdit started', 1) + +-- Costanti generali +local AMD = require( 'AddManData') + +function RunMaterialParamEdit.Exec() + -- recupero cartella dei materiali + local sCalcBaseDir = EgtGetStringFromIni( '3dPrinting', 'BaseDir', 'C:\\ProgramData\\Egaltech\\EgtCam5\\3dPrinting', EgtGetIniFile()) + local sMaterialDirPath = sCalcBaseDir .. '\\Materials\\' + + -- recupero elenco file dei materiali + local Files = EgtFindAllFiles( sMaterialDirPath..'*.csv') + if not Files then + EgtOutBox( 'Material files not found', 'Error', 'ERROR') + return + end + local sMaterials = '' + for i = 1, #Files do + local sDir, sFile, sExt = EgtSplitPath( Files[i]) + if sMaterials ~= "" then + sMaterials = sMaterials .. ',' + end + sMaterials = sMaterials .. sFile + end + + -- chiedo quale file aprire + MaterialValues = EgtDialogBox( 'Materials edit', { 'Material', 'CB:' .. sMaterials}) + if not MaterialValues or #MaterialValues < 1 then return end + + -- verifico esistenza file + local sSelMaterialPath = sMaterialDirPath .. MaterialValues[1] .. '.csv' + if not EgtExistsFile( sSelMaterialPath) then + EgtOutBox( 'Material file not found', 'Error', 'ERROR') + return + end + + -- apro programma di edit + local sEditProgPath = EgtGetStringFromIni( '3dPrinting', RESULT_READ_PROG, "", EgtGetIniFile()) + if not sEditProgPath or not EgtWinExec( sEditProgPath .. ' ' .. sSelMaterialPath) then + EgtOutBox( 'Impossible opening software to show Material. You can find them it in ' .. sSelMaterialPath, 'Error', 'ERROR') + end + +end + +--------------------------------------------------------------------- +return RunMaterialParamEdit diff --git a/LuaLibs/CalcPartPositioning.lua b/LuaLibs/RunPartPositioning.lua similarity index 94% rename from LuaLibs/CalcPartPositioning.lua rename to LuaLibs/RunPartPositioning.lua index 49e5383..3faf875 100644 --- a/LuaLibs/CalcPartPositioning.lua +++ b/LuaLibs/RunPartPositioning.lua @@ -1,17 +1,19 @@ --- CalcPartPositioning.lua by Egaltech s.r.l. 2022/04/11 +-- RunPartPositioning.lua by Egaltech s.r.l. 2022/04/11 -- Gestione calcolo disposizione e lavorazioni per stampa 3d -- 2022/03/21 Creazione file -- Tabella per definizione modulo -local CalcPartPositioning = {} +local RunPartPositioning = {} -- Intestazioni require( 'EgtBase') +EgtOutLog( ' RunPartPositioning started', 1) + -- Costanti generali local AMD = require( 'AddManData') -function CalcPartPositioning.Exec() +function RunPartPositioning.Exec() -- Recupero ultimo oggetto selezionato local nPartId = EgtGetParent(EgtGetParent( EgtGetLastSelectedObj())) -- verifico sia un pezzo valido @@ -104,4 +106,4 @@ function CalcPartPositioning.Exec() end --------------------------------------------------------------------- -return CalcPartPositioning +return RunPartPositioning diff --git a/LuaLibs/RunShowManager.lua b/LuaLibs/RunShowManager.lua new file mode 100644 index 0000000..bf9f3d1 --- /dev/null +++ b/LuaLibs/RunShowManager.lua @@ -0,0 +1,110 @@ +-- RunShowManager.lua by Egaltech s.r.l. 2022/04/05 +-- Gestione visualizzazione per Stampa 3d + +-- Tabella per definizione modulo +local RunShowManager = {} + +-- Intestazioni +require( 'EgtBase') + +EgtOutLog( ' RunShowManager started', 1) + +-- Costanti generali +local AMD = require( 'AddManData') + +local function ShowImportedSolid( nPartId, bShow) + local nLayerId = EgtGetFirstNameInGroup( nPartId, ORIGINAL_SOLID) + local nItemId = EgtGetFirstInGroup( nLayerId) + while nItemId do + if EgtGetType( nItemId) == GDB_TY.SRF_MESH then + EgtSetStatus( nItemId, EgtIf( bShow, GDB_ST.ON, GDB_ST.OFF)) + end + nItemId = EgtGetNext(nItemId) + end +end + +function RunShowManager.Exec() + -- Verifico esistenza gruppo stato visualizzazione progetto + local nViewId = EgtGetFirstNameInGroup( GDB_ID.ROOT, VIEWPARAMS) + local bImportedSolid = false + local bOuterCrv = false + local bPath = false + local bSolid = true + local bToolPath = true + + if not nViewId then + nViewId = EgtGroup( GDB_ID.ROOT) + EgtSetName( nViewId, VIEWPARAMS) + else + bImportedSolid = EgtGetInfo( nViewId, IMPORTED_SOLID, 'b') + bOuterCrv = EgtGetInfo( nViewId, OUTER_CRV, 'b') + bPath = EgtGetInfo( nViewId, PATH_GRP, 'b') + bSolid = EgtGetInfo( nViewId, SOLID_GRP, 'b') + bToolPath = EgtGetInfo( nViewId, TOOLPATH_GRP, 'b') + end + + ViewValues = EgtDialogBox( 'Show Manager', { 'Imported Solid', 'CK:' .. EgtIf( bImportedSolid, '1', '0')}, + { 'OuterCrv', 'CK:' .. EgtIf( bOuterCrv, '1', '0')}, + { 'Path', 'CK:' .. EgtIf( bPath, '1', '0')}, + { 'Solid', 'CK:' .. EgtIf( bSolid, '1', '0')}, + { 'ToolPath', 'CK:' .. EgtIf( bToolPath, '1', '0')}) + if not ViewValues or #ViewValues < 5 then return end + + -- dis/attivo solidi originali + local bCurrImportedSolid = ( ViewValues[1] == '1') + local bCurrOuterCrv = ( ViewValues[2] == '1') + local bCurrPath = ( ViewValues[3] == '1') + local bCurrSolid = ( ViewValues[4] == '1') + local bCurrToolPath = ( ViewValues[5] == '1') + + -- ciclo sui pezzi + local nPartIndex = 1 + local nPartId = EgtGetFirstNameInGroup( GDB_ID.ROOT, PART .. nPartIndex) + while nPartId do + if bImportedSolid ~= bCurrImportedSolid then + ShowImportedSolid( nPartId, bCurrImportedSolid) + end + -- ciclo sui layer per dis/attivare il resto + local nLayerIndex = 1 + local nLayerId = EgtGetFirstNameInGroup( nPartId, SLICE_LAYER .. nLayerIndex) + while nLayerId do + local nCrvId = EgtGetFirstGroupInGroup( nLayerId) + while nCrvId do + if bOuterCrv ~= bCurrOuterCrv then + local nOuterCrvId = EgtGetFirstNameInGroup( nCrvId, OUTER_CRV) + EgtSetStatus( nOuterCrvId, EgtIf( bCurrOuterCrv, GDB_ST.ON, GDB_ST.OFF)) + end + if bPath ~= bCurrPath then + local nPathId = EgtGetFirstNameInGroup( nCrvId, PATH_GRP) + EgtSetStatus( nPathId, EgtIf( bCurrPath, GDB_ST.ON, GDB_ST.OFF)) + end + if bSolid ~= bCurrSolid then + local nSolidId = EgtGetFirstNameInGroup( nCrvId, SOLID_GRP) + EgtSetStatus( nSolidId, EgtIf( bCurrSolid, GDB_ST.ON, GDB_ST.OFF)) + end + if bToolPath ~= bCurrToolPath then + local nToolPathId = EgtGetFirstNameInGroup( nCrvId, TOOLPATH_GRP) + EgtSetStatus( nToolPathId, EgtIf( bCurrToolPath, GDB_ST.ON, GDB_ST.OFF)) + end + nCrvId = EgtGetNext( nCrvId) + end + nLayerIndex = nLayerIndex + 1 + nLayerId = EgtGetFirstNameInGroup( nPartId, SLICE_LAYER .. nLayerIndex) + end + nPartIndex = nPartIndex + 1 + nPartId = EgtGetFirstNameInGroup( GDB_ID.ROOT, PART .. nPartIndex) + end + + -- riporto impostazioni in gruppo apposito + EgtSetInfo( nViewId, IMPORTED_SOLID, bCurrImportedSolid) + EgtSetInfo( nViewId, OUTER_CRV, bCurrOuterCrv) + EgtSetInfo( nViewId, PATH_GRP, bCurrPath) + EgtSetInfo( nViewId, SOLID_GRP, bCurrSolid) + EgtSetInfo( nViewId, TOOLPATH_GRP, bCurrToolPath) + + EgtDraw() + +end + +--------------------------------------------------------------------- +return RunShowManager diff --git a/LuaLibs/RunSliceAdvancement.lua b/LuaLibs/RunSliceAdvancement.lua new file mode 100644 index 0000000..b39b875 --- /dev/null +++ b/LuaLibs/RunSliceAdvancement.lua @@ -0,0 +1,96 @@ +-- RunSliceAdvancement.lua by Egaltech s.r.l. 2022/04/05 +-- Gestione visualizzazione per Stampa 3d + +-- Tabella per definizione modulo +local RunSliceAdvancement = {} + +-- Intestazioni +require( 'EgtBase') + +EgtOutLog( ' RunSliceAdvancement started', 1) + +-- Costanti generali +local AMD = require( 'AddManData') + +local function ManageSegmentVisibility( SegmentList, nLastActiveIndex, ToHideList) + for Index = 1, #SegmentList do + EgtSetStatus( SegmentList[Index], EgtIf( Index <= nLastActiveIndex, GDB_ST.ON, GDB_ST.OFF)) + end + if ToHideList and #ToHideList > 0 then + for Index = 1, #ToHideList do + EgtSetStatus( ToHideList[Index], GDB_ST.OFF) + end + end +end + +function RunSliceAdvancement.Exec() + ViewValues = EgtDialogBox( 'Slice advancement', { 'Type', 'CB:*All,Only Outer,Only Inner,Only Infill'}, + { 'Percentage (0-100)', '30'}) + if not ViewValues or #ViewValues < 1 then return end + + local nAdvancementType = 1 -- 1 = All, 2 = Only Outer, 3 = Only Inner, 4 = Only Infill + if ViewValues[1] == 'All' then + nAdvancementType = 1 + elseif ViewValues[1] == 'Only Outer' then + nAdvancementType = 2 + elseif ViewValues[1] == 'Only Inner' then + nAdvancementType = 3 + elseif ViewValues[1] == 'Only Infill' then + nAdvancementType = 4 + end + + local nPercentage = tonumber( ViewValues[2]) + + -- ciclo sui pezzi + local nPartIndex = 1 + local nPartId = EgtGetFirstNameInGroup( GDB_ID.ROOT, PART .. nPartIndex) + while nPartId do + -- ciclo sui layer per dis/attivare il resto + local nLayerIndex = 1 + local nLayerId = EgtGetFirstNameInGroup( nPartId, SLICE_LAYER .. nLayerIndex) + while nLayerId do + local nCrvId = EgtGetFirstGroupInGroup( nLayerId) + while nCrvId do + local nSolidId = EgtGetFirstNameInGroup( nCrvId, SOLID_GRP) + local ShellList = { {}, {}} + local nSurfId = EgtGetFirstInGroup( nSolidId) + while nSurfId do + local nType = EgtGetInfo( nSurfId, KEY_TYPE, 'i') + table.insert( ShellList[nType + 1], nSurfId) + nSurfId = EgtGetNext( nSurfId) + end + local nSegmentQty = 1 + local SegmentList + local ToHideList + if nAdvancementType == 1 then + nSegmentQty = #ShellList[1] + #ShellList[2] + SegmentList = ShellList[1] + for i = 1, #ShellList[2] do + SegmentList[#SegmentList + 1] = ShellList[2][i] + end + elseif nAdvancementType == 2 then + nSegmentQty = #ShellList[1] + SegmentList = ShellList[1] + ToHideList = ShellList[2] + elseif nAdvancementType == 3 then + nSegmentQty = #ShellList[2] + SegmentList = ShellList[2] + ToHideList = ShellList[1] + end + local nLastActiveIndex = ceil( nSegmentQty * nPercentage / 100) + ManageSegmentVisibility( SegmentList, nLastActiveIndex, ToHideList) + nCrvId = EgtGetNext( nCrvId) + end + nLayerIndex = nLayerIndex + 1 + nLayerId = EgtGetFirstNameInGroup( nPartId, SLICE_LAYER .. nLayerIndex) + end + nPartIndex = nPartIndex + 1 + nPartId = EgtGetFirstNameInGroup( GDB_ID.ROOT, PART .. nPartIndex) + end + + EgtDraw() + +end + +--------------------------------------------------------------------- +return RunSliceAdvancement diff --git a/LuaLibs/RunSlicing.lua b/LuaLibs/RunSlicing.lua new file mode 100644 index 0000000..b69a280 --- /dev/null +++ b/LuaLibs/RunSlicing.lua @@ -0,0 +1,141 @@ +-- RunSlicing.lua by Egaltech s.r.l. 2022/03/30 +-- 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 sStartPoint = EgtGetStringFromIni( DEFAULT_SECTION, KEY_START_POINT, '0,0', sFile) + local ptStart = EgtGetVal( 'P='..sStartPoint..',0', 'P', 'p') + EgtSetInfo( nParamsGrp, KEY_START_POINT, ptStart) + + local sStrandOrder = EgtGetStringFromIni( DEFAULT_SECTION, KEY_PRINT_ORDER, 'in', sFile) + if sStrandOrder == 'out' then + EgtSetInfo( nParamsGrp, KEY_PRINT_ORDER, PRINT_ORDER.EXT_INT_INF) + else -- sStrandOrder == 'in' + EgtSetInfo( nParamsGrp, KEY_PRINT_ORDER, PRINT_ORDER.INT_EXT_INF) + 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, 'straight', sFile) + if sLinkType == 'sPath' then + EgtSetInfo( nParamsGrp, KEY_LINK_TYPE, LINK_TYPE.BIARC) + else -- sStrandOrder == 'sPath' + EgtSetInfo( nParamsGrp, KEY_LINK_TYPE, LINK_TYPE.LINEAR) + end + + SetParamInfo( sFile, nParamsGrp, DEFAULT_SECTION, KEY_LINK_PARAM, '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, '') +end + + +function RunSlicing.Exec() + -- 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)) + + -- 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 sCalcBaseDir = EgtGetStringFromIni( '3dPrinting', 'BaseDir', 'C:\\ProgramData\\Egaltech\\EgtCam5\\3dPrinting', EgtGetIniFile()) + local sCurrProjectPath = EgtGetCurrFilePath() + local _, sCurrProjectName = EgtSplitPath( sCurrProjectPath) + local sResultFile = sCalcBaseDir .. '\\Results\\' .. sCurrProjectName .. '.csv' + EgtEraseFile( sResultFile) + + -- Lettura dei parametri + LoadParams( sParamFile, nPartId) + + -- Calcolo delle fette + CSLICES.Exec( nPartId, nStmId) + 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() + +end + +--------------------------------------------------------------------- +return RunSlicing diff --git a/LuaLibs/RunViewManager.lua b/LuaLibs/RunViewManager.lua new file mode 100644 index 0000000..13e8ba4 --- /dev/null +++ b/LuaLibs/RunViewManager.lua @@ -0,0 +1,117 @@ +-- RunViewManager.lua by Egaltech s.r.l. 2022/04/05 +-- Gestione visualizzazione per Stampa 3d + +-- Tabella per definizione modulo +local RunViewManager = {} + +-- Intestazioni +require( 'EgtBase') + +EgtOutLog( ' RunViewManager started', 1) + +-- Costanti generali +local AMD = require( 'AddManData') + +function RunViewManager.Exec() + ViewValues = EgtDialogBox( 'Slicing visibility manager', { 'Visibility Mode', 'CB:*All,Till Selected,Only Selected'}, + { 'Shell type', 'CB:*All,Outer,Inner,Infill'}, + { 'Inner Number', '1'}) + if not ViewValues or #ViewValues < 2 then return end + + + local nVisibilityMode = 1 -- 1 = All, 2 = Till Selected, 3 = Only Selected + if ViewValues[1] == 'All' then + nVisibilityMode = 1 + elseif ViewValues[1] == 'Till Selected' then + nVisibilityMode = 2 + elseif ViewValues[1] == 'Only Selected' then + nVisibilityMode = 3 + end + local nShellType = 0 -- 1 = All, 2 = Outer, 3 = Inner, 4 = infill + if ViewValues[2] == 'All' then + nShellType = 1 + elseif ViewValues[2] == 'Outer' then + nShellType = 2 + elseif ViewValues[2] == 'Inner' then + nShellType = 3 + elseif ViewValues[2] == 'Infill' then + nShellType = 4 + end + local nInnerNumber = tonumber(ViewValues[3]) + + -- Recupero ultimo layer selezionato + -- verifico sia un pezzo valido + local sSelLayerName = '' + local bFound = false + local nSelLayerId = EgtGetLastSelectedObj() + while nSelLayerId do + local sSelLayerName = EgtGetName( nSelLayerId) + if sSelLayerName and sSelLayerName:sub(1, 5) == SLICE_LAYER then + bFound = true + break + end + nSelLayerId = EgtGetParent( nSelLayerId) + end + if not bFound then + if nVisibilityMode ~= 1 then + EgtOutBox( 'No selected element!', 'Warning', 'WARNING') + return + else + nSelLayerId = GDB_ID.NULL + sSelLayerName = '' + end + end + + -- ciclo sui pezzi + local nPartIndex = 1 + local nPartId = EgtGetFirstNameInGroup( GDB_ID.ROOT, PART .. nPartIndex) + while nPartId do + -- ciclo sui layer per dis/attivare il resto + local nLayerIndex = 1 + local nLayerId = EgtGetFirstNameInGroup( nPartId, SLICE_LAYER .. nLayerIndex) + while nLayerId do + if nVisibilityMode == 1 then -- All + EgtSetStatus( nLayerId, GDB_ST.ON) + elseif nVisibilityMode == 2 then -- Till Selected + EgtSetStatus( nLayerId, EgtIf( nLayerId <= nSelLayerId, GDB_ST.ON, GDB_ST.OFF)) + elseif nVisibilityMode == 3 then -- Only Selected + EgtSetStatus( nLayerId, EgtIf( nLayerId == nSelLayerId, GDB_ST.ON, GDB_ST.OFF)) + end + local nCrvId = EgtGetFirstGroupInGroup( nLayerId) + while nCrvId do + local nPathId = EgtGetFirstNameInGroup( nCrvId, PATH_GRP) + local nShellId = EgtGetFirstInGroup( nPathId) + while nShellId do + local nType = EgtGetInfo( nShellId, KEY_TYPE, 'i') + EgtSetStatus( nShellId, EgtIf( nShellType == 1 or ( nShellType == 2 and nType == 0) or (nShellType == 3 and nType == nInnerNumber), GDB_ST.ON, GDB_ST.OFF)) + nShellId = EgtGetNext( nShellId) + end + local nSolidId = EgtGetFirstNameInGroup( nCrvId, SOLID_GRP) + local nSurfId = EgtGetFirstInGroup( nSolidId) + while nSurfId do + local nType = EgtGetInfo( nSurfId, KEY_TYPE, 'i') + EgtSetStatus( nSurfId, EgtIf( nShellType == 1 or ( nShellType == 2 and nType == 0) or (nShellType == 3 and nType == nInnerNumber), GDB_ST.ON, GDB_ST.OFF)) + nSurfId = EgtGetNext( nSurfId) + end + local nToolPathId = EgtGetFirstNameInGroup( nCrvId, TOOLPATH_GRP) + nShellId = EgtGetFirstInGroup( nToolPathId) + while nShellId do + local nType = EgtGetInfo( nShellId, KEY_TYPE, 'i') + EgtSetStatus( nShellId, EgtIf( nType and ( nShellType == 1 or ( nShellType == 2 and nType == 0) or (nShellType == 3 and nType == nInnerNumber)), GDB_ST.ON, GDB_ST.OFF)) + nShellId = EgtGetNext( nShellId) + end + nCrvId = EgtGetNext( nCrvId) + end + nLayerIndex = nLayerIndex + 1 + nLayerId = EgtGetFirstNameInGroup( nPartId, SLICE_LAYER .. nLayerIndex) + end + nPartIndex = nPartIndex + 1 + nPartId = EgtGetFirstNameInGroup( GDB_ID.ROOT, PART .. nPartIndex) + end + + EgtDraw() + +end + +--------------------------------------------------------------------- +return RunViewManager diff --git a/MachiningParamCalc.lua b/MachiningParamCalc.lua index 68ac196..42ec772 100644 --- a/MachiningParamCalc.lua +++ b/MachiningParamCalc.lua @@ -10,168 +10,9 @@ EgtEnableDebug( false) local sBaseDir = EgtGetSourceDir() EgtAddToPackagePath( sBaseDir .. 'LuaLibs\\?.lua') --- Costanti generali -local AMD = require( 'AddManData') -local CSV = require( 'CSVManager') +-- Librerie +_G.package.loaded.RunMachiningParamCalc = nil +local RMPC = require( 'RunMachiningParamCalc') -nParamsGrp = EgtGetFirstNameInGroup( GDB_ID.ROOT, PARAMS_GRP) or GDB_ID.NULL -if nParamsGrp == GDB_ID.NULL then - EgtOutBox( 'Impossible calculating before applying a machining.', 'Error', 'ERROR') - return -end - -local dMachiningFeed = EgtGetInfo( nParamsGrp, KEY_FEED, 'd') -local dSliceStep = EgtGetInfo( nParamsGrp, KEY_SLICE_STEP, 'd') -local dStrand = EgtGetInfo( nParamsGrp, KEY_STRAND, 'd') -local sMaterial = EgtGetInfo( nParamsGrp, KEY_MATERIAL) - -local sMachiningPath = EgtGetStringFromIni( '3dPrinting', 'ParamFile', "", EgtGetIniFile()) -local dCoeffX = tonumber( EgtGetStringFromIni( DEFAULT_SECTION, KEY_COEFF_X, 0, sMachiningPath)) -local dCoeffY = tonumber( EgtGetStringFromIni( DEFAULT_SECTION, KEY_COEFF_Y, 0, sMachiningPath)) -local sCalcBaseDir = EgtGetStringFromIni( '3dPrinting', 'BaseDir', 'C:\\ProgramData\\Egaltech\\EgtCam5\\3dPrinting', EgtGetIniFile()) -local sCurrProjectPath = EgtGetCurrFilePath() -local _, sCurrProjectName = EgtSplitPath( sCurrProjectPath) -local sResultFile = sCalcBaseDir .. '\\Results\\' .. sCurrProjectName .. '.csv' -local bResultFile = EgtExistsFile( sResultFile) - --- calcolo intervallo tempi consentito -local sMaterialPath = sCalcBaseDir .. '\\Materials\\' .. sMaterial .. '.csv' -local MaterialCSV = read_file( sMaterialPath) -local dMinTime = 0 -local dMaxTime = 0 -if not MaterialCSV then - EgtOutBox( 'Material csv file not found.', 'Error', 'ERROR') - return -end -local bSectionFound = false -for nSectionIndex = 1, #MaterialCSV do - local Section = MaterialCSV[nSectionIndex] - if tonumber( Section[1]) == dStrand and tonumber( Section[2]) == dSliceStep then - dMinTime = tonumber(Section[3]) - dMaxTime = tonumber(Section[4]) - bSectionFound = true - break - end -end -if not bSectionFound then - EgtOutBox( 'Section not found in Material csv file.', 'Error', 'ERROR') - return -end - --- carico eventuale file dei risultati -local CSVOldResult -if bResultFile then - CSVOldResult = read_file( sResultFile) -end - --- tabella del csv del risultato -local CSVNewResult = {} - --- ciclo sui pezzi -local nPartIndex = 1 -local nPartId = EgtGetFirstNameInGroup( GDB_ID.ROOT, PART .. nPartIndex) -while nPartId do - -- ciclo sui layer - local nLayerIndex = 1 - local nLayerId = EgtGetFirstNameInGroup( nPartId, SLICE_LAYER .. nLayerIndex) - while nLayerId do - local sLayerName = EgtGetName( nLayerId) - local nLayerIndex = tonumber( sLayerName:sub( #SLICE_LAYER + 1)) - -- calcolo lunghezza totale del layer - local dTotLayerLength = 0 - local nCrvId = EgtGetFirstGroupInGroup( nLayerId) - while nCrvId do - local nToolPathId = EgtGetFirstNameInGroup( nCrvId, TOOLPATH_GRP) - -- sommo lunghezze percorsi - local dTotCrvLength = 0 - nShellId = EgtGetFirstInGroup( nToolPathId) - while nShellId do - --local nType = EgtGetInfo( nShellId, KEY_TYPE, 'i') - dTotCrvLength = dTotCrvLength + EgtCurveLength( nShellId) - nShellId = EgtGetNext( nShellId) - end - dTotLayerLength = dTotLayerLength + dTotCrvLength - nCrvId = EgtGetNext( nCrvId) - end - -- recupero feed del layer - local dLayerFeed = 0 - if bResultFile then - -- leggo il valore dal file - local bResultFound = false - for nResultIndex = 1, #CSVOldResult do - local OldResult = CSVOldResult[nResultIndex] - if tonumber( OldResult[1]) == nLayerIndex then - dLayerFeed = tonumber( OldResult[5]) - bResultFound = true - break - end - end - if not bResultFound then - -- uso valore di default - dLayerFeed = dMachiningFeed - end - else - -- uso valore di default - dLayerFeed = dMachiningFeed - end - -- calcolo tempo stimato del layer - local dEsteemedTime = dTotLayerLength / dLayerFeed * 60 - -- calcolo speed - local dSpeed = ((( dLayerFeed * dSliceStep * dStrand ) / 60) - dCoeffX) / dCoeffY - -- scrivo info feed e speed in group toolpath - nCrvId = EgtGetFirstGroupInGroup( nLayerId) - while nCrvId do - local nToolPathId = EgtGetFirstNameInGroup( nCrvId, TOOLPATH_GRP) - EgtSetInfo( nToolPathId, KEY_FEED, dLayerFeed) - EgtSetInfo( nToolPathId, KEY_SPEED, dSpeed) - nCrvId = EgtGetNext( nCrvId) - end - -- riporto valori calcolati in tabella per csv - local sStatus = '' - if dEsteemedTime < dMinTime then - sStatus = 'KO(-)' - elseif dEsteemedTime > dMinTime and dEsteemedTime < dMaxTime then - sStatus = 'OK' - elseif dEsteemedTime > dMaxTime then - sStatus = 'KO(+)' - end - --table.insert( CSVOutTable, { Index = nLayerIndex, EsteemedTime = dEsteemedTime, Feed = dLayerFeed, Speed = dSpeed}) - table.insert( CSVNewResult, { nLayerIndex, dTotLayerLength, dEsteemedTime, sStatus, dLayerFeed, dSpeed}) - nLayerIndex = nLayerIndex + 1 - nLayerId = EgtGetFirstNameInGroup( nPartId, SLICE_LAYER .. nLayerIndex) - end - nPartIndex = nPartIndex + 1 - nPartId = EgtGetFirstNameInGroup( GDB_ID.ROOT, PART .. nPartIndex) -end - --- scrivo nuovo file csv di risultato -local file = io.open( sResultFile, "w") -if file then - file:write('LayerIndex; Len; Time; Status; Feed; Speed') - file:write('\n') - for NewResultIndex = 1, #CSVNewResult do - local CSVOutLine = CSVNewResult[NewResultIndex] - local sParams = '' - for ParamIndex = 1, #CSVOutLine do - if ParamIndex > 1 then - sParams = sParams .. ";" - end - if ParamIndex == 4 then - sParams = sParams .. CSVOutLine[ParamIndex] - else - sParams = sParams .. EgtNumToString( CSVOutLine[ParamIndex], 1) - end - end - file:write(sParams) - file:write('\n') - end - file:close() - local sReadProgPath = EgtGetStringFromIni( '3dPrinting', RESULT_READ_PROG, "", EgtGetIniFile()) - if not sReadProgPath or not EgtWinExec( sReadProgPath .. ' ' .. sResultFile) then - EgtOutBox( 'Impossible opening software to show results. You can find them in ' .. sResultFile, 'Error', 'ERROR') - end -else - EgtOutBox( 'Impossible writing results file in ' .. sResultFile, 'Error', 'ERROR') -end - -------------------------- MAIN -------------------------------------- +-- Calcolo +RMPC.Exec() diff --git a/MachiningParamEdit.lua b/MachiningParamEdit.lua index d73542c..b66dc0d 100644 --- a/MachiningParamEdit.lua +++ b/MachiningParamEdit.lua @@ -10,44 +10,9 @@ EgtEnableDebug( false) local sBaseDir = EgtGetSourceDir() EgtAddToPackagePath( sBaseDir .. 'LuaLibs\\?.lua') --- Costanti generali -local AMD = require( 'AddManData') +-- Librerie +_G.package.loaded.RunMachiningParamEdit = nil +local RMPE = require( 'RunMachiningParamEdit') --- recupero cartella delle lavorazioni -local sCalcBaseDir = EgtGetStringFromIni( '3dPrinting', 'BaseDir', 'C:\\ProgramData\\Egaltech\\EgtCam5\\3dPrinting', EgtGetIniFile()) -local sMachiningDirPath = sCalcBaseDir .. '\\Machinings\\' - --- recupero file delle lavorazioni ---local Machinings = {} -local sMachinings = '' - -local f = io.popen("dir " .. sMachiningDirPath .. " /B", "r") -for entry in f:lines() do - --Machinings[#Machinings + 1] = entry - local sDir, sFile, sExt = EgtSplitPath(entry) - if sExt == '.ini' then - if sMachinings ~= "" then - sMachinings = sMachinings .. ',' - end - sMachinings = sMachinings .. sFile - end -end - --- chiedo quale file aprire -MachiningValues = EgtDialogBox( 'Machinings edit', { 'Machining', 'CB:' .. sMachinings}) -if not MachiningValues or #MachiningValues < 1 then return end - --- verifico esistenza file -local sSelMachiningPath = sMachiningDirPath .. MachiningValues[1] .. '.ini' -if not EgtExistsFile( sSelMachiningPath) then - EgtOutBox( 'Machining file not found', 'Error', 'ERROR') - return -end - --- apro programma di edit -local sEditProgPath = EgtGetStringFromIni( '3dPrinting', 'MachiningEditProg', "", EgtGetIniFile()) -if not sEditProgPath or not EgtWinExec( sEditProgPath .. ' ' .. sSelMachiningPath) then - EgtOutBox( 'Impossible opening software to show Machining. You can find it in ' .. sSelMachiningPath, 'Error', 'ERROR') -end - -------------------------- MAIN -------------------------------------- +-- Calcolo +RMPE.Exec() diff --git a/MaterialParamEdit.lua b/MaterialParamEdit.lua index 6787dba..6c39045 100644 --- a/MaterialParamEdit.lua +++ b/MaterialParamEdit.lua @@ -10,43 +10,9 @@ EgtEnableDebug( false) local sBaseDir = EgtGetSourceDir() EgtAddToPackagePath( sBaseDir .. 'LuaLibs\\?.lua') --- Costanti generali -local AMD = require( 'AddManData') +-- Librerie +_G.package.loaded.RunMaterialParamEdit = nil +local RMPE = require( 'RunMaterialParamEdit') --- recupero cartella dei materiali -local sCalcBaseDir = EgtGetStringFromIni( '3dPrinting', 'BaseDir', 'C:\\ProgramData\\Egaltech\\EgtCam5\\3dPrinting', EgtGetIniFile()) -local sMaterialDirPath = sCalcBaseDir .. '\\Materials\\' - --- recupero elenco file dei materiali -local Files = EgtFindAllFiles( sMaterialDirPath..'*.csv') -if not Files then - EgtOutBox( 'Material files not found', 'Error', 'ERROR') - return -end -local sMaterials = '' -for i = 1, #Files do - local sDir, sFile, sExt = EgtSplitPath( Files[i]) - if sMaterials ~= "" then - sMaterials = sMaterials .. ',' - end - sMaterials = sMaterials .. sFile -end - --- chiedo quale file aprire -MaterialValues = EgtDialogBox( 'Materials edit', { 'Material', 'CB:' .. sMaterials}) -if not MaterialValues or #MaterialValues < 1 then return end - --- verifico esistenza file -local sSelMaterialPath = sMaterialDirPath .. MaterialValues[1] .. '.csv' -if not EgtExistsFile( sSelMaterialPath) then - EgtOutBox( 'Material file not found', 'Error', 'ERROR') - return -end - --- apro programma di edit -local sEditProgPath = EgtGetStringFromIni( '3dPrinting', RESULT_READ_PROG, "", EgtGetIniFile()) -if not sEditProgPath or not EgtWinExec( sEditProgPath .. ' ' .. sSelMaterialPath) then - EgtOutBox( 'Impossible opening software to show Material. You can find them it in ' .. sSelMaterialPath, 'Error', 'ERROR') -end - -------------------------- MAIN -------------------------------------- +-- Calcolo +RMPE.Exec() diff --git a/PartPositioning.lua b/PartPositioning.lua index 1f9ac4e..76a378e 100644 --- a/PartPositioning.lua +++ b/PartPositioning.lua @@ -13,8 +13,8 @@ local sBaseDir = EgtGetSourceDir() EgtAddToPackagePath( sBaseDir .. 'LuaLibs\\?.lua') -- Librerie -_G.package.loaded.CalcPartPositioning = nil -local CPP = require( 'CalcPartPositioning') +_G.package.loaded.RunPartPositioning = nil +local RPP = require( 'RunPartPositioning') -- Calcolo -CPP.Exec() +RPP.Exec() diff --git a/ShowManager.lua b/ShowManager.lua index 3869967..2509cc0 100644 --- a/ShowManager.lua +++ b/ShowManager.lua @@ -10,98 +10,9 @@ EgtEnableDebug( false) local sBaseDir = EgtGetSourceDir() EgtAddToPackagePath( sBaseDir .. 'LuaLibs\\?.lua') --- Costanti generali -local AMD = require( 'AddManData') +-- Librerie +_G.package.loaded.RunShowManager = nil +local RSM = require( 'RunShowManager') -local function ShowImportedSolid( nPartId, bShow) - local nLayerId = EgtGetFirstNameInGroup( nPartId, ORIGINAL_SOLID) - local nItemId = EgtGetFirstInGroup( nLayerId) - while nItemId do - if EgtGetType( nItemId) == GDB_TY.SRF_MESH then - EgtSetStatus( nItemId, EgtIf( bShow, GDB_ST.ON, GDB_ST.OFF)) - end - nItemId = EgtGetNext(nItemId) - end -end - --- Verifico esistenza gruppo stato visualizzazione progetto -local nViewId = EgtGetFirstNameInGroup( GDB_ID.ROOT, VIEWPARAMS) -local bImportedSolid = false -local bOuterCrv = false -local bPath = false -local bSolid = true -local bToolPath = true - -if not nViewId then - nViewId = EgtGroup( GDB_ID.ROOT) - EgtSetName( nViewId, VIEWPARAMS) -else - bImportedSolid = EgtGetInfo( nViewId, IMPORTED_SOLID, 'b') - bOuterCrv = EgtGetInfo( nViewId, OUTER_CRV, 'b') - bPath = EgtGetInfo( nViewId, PATH_GRP, 'b') - bSolid = EgtGetInfo( nViewId, SOLID_GRP, 'b') - bToolPath = EgtGetInfo( nViewId, TOOLPATH_GRP, 'b') -end - -ViewValues = EgtDialogBox( 'Show Manager', { 'Imported Solid', 'CK:' .. EgtIf( bImportedSolid, '1', '0')}, - { 'OuterCrv', 'CK:' .. EgtIf( bOuterCrv, '1', '0')}, - { 'Path', 'CK:' .. EgtIf( bPath, '1', '0')}, - { 'Solid', 'CK:' .. EgtIf( bSolid, '1', '0')}, - { 'ToolPath', 'CK:' .. EgtIf( bToolPath, '1', '0')}) -if not ViewValues or #ViewValues < 5 then return end - --- dis/attivo solidi originali -local bCurrImportedSolid = ( ViewValues[1] == '1') -local bCurrOuterCrv = ( ViewValues[2] == '1') -local bCurrPath = ( ViewValues[3] == '1') -local bCurrSolid = ( ViewValues[4] == '1') -local bCurrToolPath = ( ViewValues[5] == '1') - --- ciclo sui pezzi -local nPartIndex = 1 -local nPartId = EgtGetFirstNameInGroup( GDB_ID.ROOT, PART .. nPartIndex) -while nPartId do - if bImportedSolid ~= bCurrImportedSolid then - ShowImportedSolid( nPartId, bCurrImportedSolid) - end - -- ciclo sui layer per dis/attivare il resto - local nLayerIndex = 1 - local nLayerId = EgtGetFirstNameInGroup( nPartId, SLICE_LAYER .. nLayerIndex) - while nLayerId do - local nCrvId = EgtGetFirstGroupInGroup( nLayerId) - while nCrvId do - if bOuterCrv ~= bCurrOuterCrv then - local nOuterCrvId = EgtGetFirstNameInGroup( nCrvId, OUTER_CRV) - EgtSetStatus( nOuterCrvId, EgtIf( bCurrOuterCrv, GDB_ST.ON, GDB_ST.OFF)) - end - if bPath ~= bCurrPath then - local nPathId = EgtGetFirstNameInGroup( nCrvId, PATH_GRP) - EgtSetStatus( nPathId, EgtIf( bCurrPath, GDB_ST.ON, GDB_ST.OFF)) - end - if bSolid ~= bCurrSolid then - local nSolidId = EgtGetFirstNameInGroup( nCrvId, SOLID_GRP) - EgtSetStatus( nSolidId, EgtIf( bCurrSolid, GDB_ST.ON, GDB_ST.OFF)) - end - if bToolPath ~= bCurrToolPath then - local nToolPathId = EgtGetFirstNameInGroup( nCrvId, TOOLPATH_GRP) - EgtSetStatus( nToolPathId, EgtIf( bCurrToolPath, GDB_ST.ON, GDB_ST.OFF)) - end - nCrvId = EgtGetNext( nCrvId) - end - nLayerIndex = nLayerIndex + 1 - nLayerId = EgtGetFirstNameInGroup( nPartId, SLICE_LAYER .. nLayerIndex) - end - nPartIndex = nPartIndex + 1 - nPartId = EgtGetFirstNameInGroup( GDB_ID.ROOT, PART .. nPartIndex) -end - --- riporto impostazioni in gruppo apposito -EgtSetInfo( nViewId, IMPORTED_SOLID, bCurrImportedSolid) -EgtSetInfo( nViewId, OUTER_CRV, bCurrOuterCrv) -EgtSetInfo( nViewId, PATH_GRP, bCurrPath) -EgtSetInfo( nViewId, SOLID_GRP, bCurrSolid) -EgtSetInfo( nViewId, TOOLPATH_GRP, bCurrToolPath) - -EgtDraw() - -------------------------- MAIN -------------------------------------- +-- Calcolo +RSM.Exec() diff --git a/SliceAdvancement.lua b/SliceAdvancement.lua index c2e3a2e..54d95d1 100644 --- a/SliceAdvancement.lua +++ b/SliceAdvancement.lua @@ -10,84 +10,9 @@ EgtEnableDebug( false) local sBaseDir = EgtGetSourceDir() EgtAddToPackagePath( sBaseDir .. 'LuaLibs\\?.lua') --- Costanti generali -local AMD = require( 'AddManData') +-- Librerie +_G.package.loaded.RunSliceAdvancement = nil +local RSA = require( 'RunSliceAdvancement') -ViewValues = EgtDialogBox( 'Slice advancement', { 'Type', 'CB:*All,Only Outer,Only Inner,Only Infill'}, - { 'Percentage (0-100)', '30'}) -if not ViewValues or #ViewValues < 1 then return end - -local nAdvancementType = 1 -- 1 = All, 2 = Only Outer, 3 = Only Inner, 4 = Only Infill -if ViewValues[1] == 'All' then - nAdvancementType = 1 -elseif ViewValues[1] == 'Only Outer' then - nAdvancementType = 2 -elseif ViewValues[1] == 'Only Inner' then - nAdvancementType = 3 -elseif ViewValues[1] == 'Only Infill' then - nAdvancementType = 4 -end - -local nPercentage = tonumber( ViewValues[2]) - -local function ManageSegmentVisibility( SegmentList, nLastActiveIndex, ToHideList) - for Index = 1, #SegmentList do - EgtSetStatus( SegmentList[Index], EgtIf( Index <= nLastActiveIndex, GDB_ST.ON, GDB_ST.OFF)) - end - if ToHideList and #ToHideList > 0 then - for Index = 1, #ToHideList do - EgtSetStatus( ToHideList[Index], GDB_ST.OFF) - end - end -end - --- ciclo sui pezzi -local nPartIndex = 1 -local nPartId = EgtGetFirstNameInGroup( GDB_ID.ROOT, PART .. nPartIndex) -while nPartId do - -- ciclo sui layer per dis/attivare il resto - local nLayerIndex = 1 - local nLayerId = EgtGetFirstNameInGroup( nPartId, SLICE_LAYER .. nLayerIndex) - while nLayerId do - local nCrvId = EgtGetFirstGroupInGroup( nLayerId) - while nCrvId do - local nSolidId = EgtGetFirstNameInGroup( nCrvId, SOLID_GRP) - local ShellList = { {}, {}} - local nSurfId = EgtGetFirstInGroup( nSolidId) - while nSurfId do - local nType = EgtGetInfo( nSurfId, KEY_TYPE, 'i') - table.insert( ShellList[nType + 1], nSurfId) - nSurfId = EgtGetNext( nSurfId) - end - local nSegmentQty = 1 - local SegmentList - local ToHideList - if nAdvancementType == 1 then - nSegmentQty = #ShellList[1] + #ShellList[2] - SegmentList = ShellList[1] - for i = 1, #ShellList[2] do - SegmentList[#SegmentList + 1] = ShellList[2][i] - end - elseif nAdvancementType == 2 then - nSegmentQty = #ShellList[1] - SegmentList = ShellList[1] - ToHideList = ShellList[2] - elseif nAdvancementType == 3 then - nSegmentQty = #ShellList[2] - SegmentList = ShellList[2] - ToHideList = ShellList[1] - end - local nLastActiveIndex = ceil( nSegmentQty * nPercentage / 100) - ManageSegmentVisibility( SegmentList, nLastActiveIndex, ToHideList) - nCrvId = EgtGetNext( nCrvId) - end - nLayerIndex = nLayerIndex + 1 - nLayerId = EgtGetFirstNameInGroup( nPartId, SLICE_LAYER .. nLayerIndex) - end - nPartIndex = nPartIndex + 1 - nPartId = EgtGetFirstNameInGroup( GDB_ID.ROOT, PART .. nPartIndex) -end - -EgtDraw() - -------------------------- MAIN -------------------------------------- +-- Calcolo +RSA.Exec() diff --git a/Slicing.lua b/Slicing.lua index b1b34b9..4248f09 100644 --- a/Slicing.lua +++ b/Slicing.lua @@ -10,127 +10,9 @@ EgtEnableDebug( false) local sBaseDir = EgtGetSourceDir() EgtAddToPackagePath( sBaseDir .. 'LuaLibs\\?.lua') --- 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') +_G.package.loaded.RunSlicing = nil +local RS = require( 'RunSlicing') ---------------------------------------------------------------------- -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 sStartPoint = EgtGetStringFromIni( DEFAULT_SECTION, KEY_START_POINT, '0,0', sFile) - local ptStart = EgtGetVal( 'P='..sStartPoint..',0', 'P', 'p') - EgtSetInfo( nParamsGrp, KEY_START_POINT, ptStart) - - local sStrandOrder = EgtGetStringFromIni( DEFAULT_SECTION, KEY_PRINT_ORDER, 'in', sFile) - if sStrandOrder == 'out' then - EgtSetInfo( nParamsGrp, KEY_PRINT_ORDER, PRINT_ORDER.EXT_INT_INF) - else -- sStrandOrder == 'in' - EgtSetInfo( nParamsGrp, KEY_PRINT_ORDER, PRINT_ORDER.INT_EXT_INF) - 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, 'straight', sFile) - if sLinkType == 'sPath' then - EgtSetInfo( nParamsGrp, KEY_LINK_TYPE, LINK_TYPE.BIARC) - else -- sStrandOrder == 'sPath' - EgtSetInfo( nParamsGrp, KEY_LINK_TYPE, LINK_TYPE.LINEAR) - end - - SetParamInfo( sFile, nParamsGrp, DEFAULT_SECTION, KEY_LINK_PARAM, '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, '') -end - -------------------------- MAIN -------------------------------------- --- 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)) - --- 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 sCalcBaseDir = EgtGetStringFromIni( '3dPrinting', 'BaseDir', 'C:\\ProgramData\\Egaltech\\EgtCam5\\3dPrinting', EgtGetIniFile()) -local sCurrProjectPath = EgtGetCurrFilePath() -local _, sCurrProjectName = EgtSplitPath( sCurrProjectPath) -local sResultFile = sCalcBaseDir .. '\\Results\\' .. sCurrProjectName .. '.csv' -EgtEraseFile( sResultFile) - --- Lettura dei parametri -LoadParams( sParamFile, nPartId) - --- Calcolo delle fette -CSLICES.Exec( nPartId, nStmId) -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() +-- Calcolo +RS.Exec() diff --git a/ViewManager.lua b/ViewManager.lua index 81ee06f..07d1b4b 100644 --- a/ViewManager.lua +++ b/ViewManager.lua @@ -10,105 +10,9 @@ EgtEnableDebug( false) local sBaseDir = EgtGetSourceDir() EgtAddToPackagePath( sBaseDir .. 'LuaLibs\\?.lua') --- Costanti generali -local AMD = require( 'AddManData') +-- Librerie +_G.package.loaded.RunViewManager = nil +local RVM = require( 'RunViewManager') -ViewValues = EgtDialogBox( 'Slicing visibility manager', { 'Visibility Mode', 'CB:*All,Till Selected,Only Selected'}, - { 'Shell type', 'CB:*All,Outer,Inner,Infill'}, - { 'Inner Number', '1'}) -if not ViewValues or #ViewValues < 2 then return end - - -local nVisibilityMode = 1 -- 1 = All, 2 = Till Selected, 3 = Only Selected -if ViewValues[1] == 'All' then - nVisibilityMode = 1 -elseif ViewValues[1] == 'Till Selected' then - nVisibilityMode = 2 -elseif ViewValues[1] == 'Only Selected' then - nVisibilityMode = 3 -end -local nShellType = 0 -- 1 = All, 2 = Outer, 3 = Inner, 4 = infill -if ViewValues[2] == 'All' then - nShellType = 1 -elseif ViewValues[2] == 'Outer' then - nShellType = 2 -elseif ViewValues[2] == 'Inner' then - nShellType = 3 -elseif ViewValues[2] == 'Infill' then - nShellType = 4 -end -local nInnerNumber = tonumber(ViewValues[3]) - --- Recupero ultimo layer selezionato --- verifico sia un pezzo valido -local sSelLayerName = '' -local bFound = false -local nSelLayerId = EgtGetLastSelectedObj() -while nSelLayerId do - local sSelLayerName = EgtGetName( nSelLayerId) - if sSelLayerName and sSelLayerName:sub(1, 5) == SLICE_LAYER then - bFound = true - break - end - nSelLayerId = EgtGetParent( nSelLayerId) -end -if not bFound then - if nVisibilityMode ~= 1 then - EgtOutBox( 'No selected element!', 'Warning', 'WARNING') - return - else - nSelLayerId = GDB_ID.NULL - sSelLayerName = '' - end -end - --- ciclo sui pezzi -local nPartIndex = 1 -local nPartId = EgtGetFirstNameInGroup( GDB_ID.ROOT, PART .. nPartIndex) -while nPartId do - -- ciclo sui layer per dis/attivare il resto - local nLayerIndex = 1 - local nLayerId = EgtGetFirstNameInGroup( nPartId, SLICE_LAYER .. nLayerIndex) - while nLayerId do - if nVisibilityMode == 1 then -- All - EgtSetStatus( nLayerId, GDB_ST.ON) - elseif nVisibilityMode == 2 then -- Till Selected - EgtSetStatus( nLayerId, EgtIf( nLayerId <= nSelLayerId, GDB_ST.ON, GDB_ST.OFF)) - elseif nVisibilityMode == 3 then -- Only Selected - EgtSetStatus( nLayerId, EgtIf( nLayerId == nSelLayerId, GDB_ST.ON, GDB_ST.OFF)) - end - local nCrvId = EgtGetFirstGroupInGroup( nLayerId) - while nCrvId do - local nPathId = EgtGetFirstNameInGroup( nCrvId, PATH_GRP) - local nShellId = EgtGetFirstInGroup( nPathId) - while nShellId do - local nType = EgtGetInfo( nShellId, KEY_TYPE, 'i') - EgtSetStatus( nShellId, EgtIf( nShellType == 1 or ( nShellType == 2 and nType == 0) or (nShellType == 3 and nType == nInnerNumber), GDB_ST.ON, GDB_ST.OFF)) - nShellId = EgtGetNext( nShellId) - end - local nSolidId = EgtGetFirstNameInGroup( nCrvId, SOLID_GRP) - local nSurfId = EgtGetFirstInGroup( nSolidId) - while nSurfId do - local nType = EgtGetInfo( nSurfId, KEY_TYPE, 'i') - EgtSetStatus( nSurfId, EgtIf( nShellType == 1 or ( nShellType == 2 and nType == 0) or (nShellType == 3 and nType == nInnerNumber), GDB_ST.ON, GDB_ST.OFF)) - nSurfId = EgtGetNext( nSurfId) - end - local nToolPathId = EgtGetFirstNameInGroup( nCrvId, TOOLPATH_GRP) - nShellId = EgtGetFirstInGroup( nToolPathId) - while nShellId do - local nType = EgtGetInfo( nShellId, KEY_TYPE, 'i') - EgtSetStatus( nShellId, EgtIf( nType and ( nShellType == 1 or ( nShellType == 2 and nType == 0) or (nShellType == 3 and nType == nInnerNumber)), GDB_ST.ON, GDB_ST.OFF)) - nShellId = EgtGetNext( nShellId) - end - nCrvId = EgtGetNext( nCrvId) - end - nLayerIndex = nLayerIndex + 1 - nLayerId = EgtGetFirstNameInGroup( nPartId, SLICE_LAYER .. nLayerIndex) - end - nPartIndex = nPartIndex + 1 - nPartId = EgtGetFirstNameInGroup( GDB_ID.ROOT, PART .. nPartIndex) -end - -EgtDraw() - -------------------------- MAIN -------------------------------------- +-- Calcolo +RVM.Exec()