diff --git a/CalcSolids.lua b/CalcSolids.lua new file mode 100644 index 0000000..c0adffa --- /dev/null +++ b/CalcSolids.lua @@ -0,0 +1,18 @@ +-- CalcSolids.lua by Egaltech s.r.l. 2022/09/26 +-- Calcola i solidi a partire dallo slicing + +-- Intestazioni +require( 'EgtBase') +_ENV = EgtProtectGlobal() +EgtEnableDebug( false) + +-- Imposto direttorio libreria specializzata per Stampa 3d +local sBaseDir = EgtGetSourceDir() +EgtAddToPackagePath( sBaseDir .. 'LuaLibs\\?.lua') + +-- Librerie +_G.package.loaded.RunCalcSolids = nil +local RCS = require( 'RunCalcSolids') + +-- Calcolo +RCS.Exec() \ No newline at end of file diff --git a/LuaLibs/AddManData.lua b/LuaLibs/AddManData.lua index 9530770..07ace81 100644 --- a/LuaLibs/AddManData.lua +++ b/LuaLibs/AddManData.lua @@ -35,6 +35,7 @@ MIN_RIBS_LEN = 2 -- Parametri di lavorazione SEC_DEFAULT = "Default" KEY_PARAMS = "Params" +KEY_CALC_SOLIDS = "CalcSolids" KEY_SLICING_45 = "Slicing45" KEY_SLICING_DIR="SlicingDir" KEY_SLICE_STEP = "StrandH" @@ -127,6 +128,7 @@ KEY_ZIG_ZAG_DIR = "ZigZagDir" KEY_INVERTED_CRV = "InvertedCrv" KEY_CLOSED_CRV = "ClosedCrv" KEY_ASSOCIATED_SURF = "AssociatedSurf" +KEY_HAS_SOLIDS = "Solids" TYPE = { OUTER_SHELL = 1, diff --git a/LuaLibs/CalcSlices.lua b/LuaLibs/CalcSlices.lua index e39075f..1a864c8 100644 --- a/LuaLibs/CalcSlices.lua +++ b/LuaLibs/CalcSlices.lua @@ -536,6 +536,7 @@ function CalcSlices.Exec( nPartId, nStmId, HMax) local nCsId, nCsCnt = EgtExtractSurfFrChunkLoops( nId, 0, nGrpCrv) for nId2 = nCsId, nCsId + nCsCnt - 1 do EgtSetName( nId2, OUTER_CRV) + EgtSetStatus( nId2, GDB_ST.OFF) EgtSetColor( nId2, 'BLACK') end end diff --git a/LuaLibs/CalcSolids.lua b/LuaLibs/RunCalcSolids.lua similarity index 92% rename from LuaLibs/CalcSolids.lua rename to LuaLibs/RunCalcSolids.lua index e1e2e46..35f2d87 100644 --- a/LuaLibs/CalcSolids.lua +++ b/LuaLibs/RunCalcSolids.lua @@ -1,17 +1,19 @@ --- CalcSolids.lua by Egaltech s.r.l. 2022/07/01 +-- RunCalcSolids.lua by Egaltech s.r.l. 2022/07/01 -- Calcolo percorsi di lavoro per Stampa 3d -- Tabella per definizione modulo -local CalcSolids = {} +local RunCalcSolids = {} -- Intestazioni require( 'EgtBase') -EgtOutLog( ' CalcSolids started', 1) +EgtOutLog( ' RunCalcSolids started', 1) -- Dati local AMD = require( 'AddManData') +-- PROG_PARTID = 1 + --------------------------------------------------------------------- local s_nPartId @@ -203,15 +205,22 @@ local function CreateSolidFromCurve( nCrvId, nSolidGrp, LayerParams) end --------------------------------------------------------------------- -function CalcSolids.Exec( nPartId) - - s_nPartId = nPartId - - local vLayIds = EgtGetNameInGroup( s_nPartId, SLICE_LAYER.."*") - if not vLayIds then - EgtOutBox( 'Error no slice', 'SolidCalc') - return +function RunCalcSolids.Exec( nPartId) + + s_nPartId = nPartId or PROG_PARTID + if not s_nPartId then + EgtOutBox( 'No part for solid calc', 'Error', 'ERROR') + return end + + -- recupero i suoi slice + local vLayIds = EgtGetNameInGroup( s_nPartId, SLICE_LAYER .. '*') + if not vLayIds then + EgtOutBox( 'No sliced part in this project!', 'Error', 'ERROR') + return + end + + EgtSetInfo( s_nPartId, KEY_HAS_SOLIDS, 1) local vErr = {} -- recupero i parametri necessari al calcolo dei solidi @@ -249,12 +258,6 @@ function CalcSolids.Exec( nPartId) nId = EgtGetNext( nId) end - -- nascondo ExternCurve del gruppo - local vExtCrvs = EgtGetNameInGroup( nCrvGrpId, OUTER_CRV) - for nInd = 1, #vExtCrvs do - EgtSetStatus( vExtCrvs[nInd], GDB_ST.OFF) - end - -- processo gli eventi if ( nIdx % 20) == 0 then EgtDraw() @@ -267,7 +270,7 @@ function CalcSolids.Exec( nPartId) nCrvGrpId = EgtGetNextName( nCrvGrpId, CONTOUR_GRP.."*") or GDB_ID.NULL end EgtDraw() - if EgtProcessEvents( EgtIf( PRINT, 300, 0) + nIdx / #vLayIds * 100, 0) == 1 then + if EgtProcessEvents( nIdx / #vLayIds * 100, 0) == 1 then return end end @@ -281,7 +284,13 @@ function CalcSolids.Exec( nPartId) EgtOutLog( 'Error on solid creation (layer ' .. vErr[i] .. ') - SolidCalc') end + -- eventuale aggiornamento delle ViewInfo + local nViewId = EgtGetFirstNameInGroup( GDB_ID.ROOT, VIEWPARAMS) + if nViewId then + EgtSetInfo( nViewId, SOLID_GRP, true) + end + end --------------------------------------------------------------------- -return CalcSolids +return RunCalcSolids diff --git a/LuaLibs/RunShowManager.lua b/LuaLibs/RunShowManager.lua index f4f257f..7f62893 100644 --- a/LuaLibs/RunShowManager.lua +++ b/LuaLibs/RunShowManager.lua @@ -12,6 +12,10 @@ EgtOutLog( ' RunShowManager started', 1) -- Costanti generali local AMD = require( 'AddManData') +-- Librerie +_G.package.loaded.RunCalcSolids = nil +local CSOLIDS = require( 'RunCalcSolids') + --------------------------------------------------------------------- local function ShowImportedSolid( nPartId, bShow) local nSolidLayId = EgtGetFirstNameInGroup( nPartId, PRINT_SOLID) @@ -78,6 +82,12 @@ function RunShowManager.Exec() local nPartIndex = 1 local nPartId = EgtGetFirstNameInGroup( GDB_ID.ROOT, PART .. nPartIndex) while nPartId do + -- eventuale calcolo dei solidi + local bHasSolids = EgtGetInfo( nPartId, KEY_HAS_SOLIDS, 'b') or false + if not bHasSolids and bCurrSolid then + CSOLIDS.Exec( nPartId) + end + if bImportedSolid ~= bCurrImportedSolid then ShowImportedSolid( nPartId, bCurrImportedSolid) end diff --git a/LuaLibs/RunSliceAdvancement.lua b/LuaLibs/RunSliceAdvancement.lua index 89b52d0..d644fc4 100644 --- a/LuaLibs/RunSliceAdvancement.lua +++ b/LuaLibs/RunSliceAdvancement.lua @@ -12,6 +12,10 @@ EgtOutLog( ' RunSliceAdvancement started', 1) -- Costanti generali local AMD = require( 'AddManData') +-- Librerie +_G.package.loaded.RunCalcSolids = nil +local CSOLIDS = require( 'RunCalcSolids') + --------------------------------------------------------------------- local function ManageSegmentVisibility( SegmentList, nLastActiveIndex, ToHideList) for Index = 1, #SegmentList do @@ -90,6 +94,13 @@ function RunSliceAdvancement.Exec() local nPartIndex = 1 local nPartId = EgtGetFirstNameInGroup( GDB_ID.ROOT, PART .. nPartIndex) while nPartId do + + -- eventuale calcolo dei solidi + local bHasSolids = EgtGetInfo( nPartId, KEY_HAS_SOLIDS, 'b') or false + if not bHasSolids then + CSOLIDS.Exec( nPartId) + end + local nPrintOrder = EgtGetInfo( nPartId, KEY_PRINT_ORDER, 'i') -- ciclo sui layer per dis/attivare il resto local nLayerIndex = 1 diff --git a/LuaLibs/RunSlicePalette.lua b/LuaLibs/RunSlicePalette.lua index beb3af9..b20610b 100644 --- a/LuaLibs/RunSlicePalette.lua +++ b/LuaLibs/RunSlicePalette.lua @@ -12,12 +12,22 @@ EgtOutLog( ' RunSlicePalette started', 1) -- Costanti generali local AMD = require( 'AddManData') +-- Librerie +_G.package.loaded.RunCalcSolids = nil +local CSOLIDS = require( 'RunCalcSolids') + --------------------------------------------------------------------- function RunSlicePalette.UpdateColors( nPaletteType) -- ciclo sui pezzi local nPartIndex = 1 local nPartId = EgtGetFirstNameInGroup( GDB_ID.ROOT, PART .. nPartIndex) while nPartId do + -- eventuale calcolo dei solidi + local bHasSolids = EgtGetInfo( nPartId, KEY_HAS_SOLIDS, 'b') or false + if not bHasSolids then + CSOLIDS.Exec( nPartId) + end + -- ciclo sui layer per dis/attivare il resto local nLayerIndex = 1 local nLayerId = EgtGetFirstNameInGroup( nPartId, SLICE_LAYER .. nLayerIndex) diff --git a/LuaLibs/RunSlicing.lua b/LuaLibs/RunSlicing.lua index 0d5b261..1b252d5 100644 --- a/LuaLibs/RunSlicing.lua +++ b/LuaLibs/RunSlicing.lua @@ -20,8 +20,8 @@ _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.RunCalcSolids = nil +local CSOLIDS = require( 'RunCalcSolids') _G.package.loaded.CalcToolPath = nil local CTP = require( 'CalcToolPath') @@ -36,6 +36,7 @@ local function LoadParams( sFile, nPartId) EgtSetInfo( nPartId, KEY_PARAMS, sFile) + SetParamInfo( sFile, nPartId, SEC_DEFAULT, KEY_CALC_SOLIDS, '1') SetParamInfo( sFile, nPartId, SEC_DEFAULT, KEY_SLICING_45, '0') SetParamInfo( sFile, nPartId, SEC_DEFAULT, KEY_SLICE_STEP, '1.0') SetParamInfo( sFile, nPartId, SEC_DEFAULT, KEY_STRAND, '6.0') @@ -220,7 +221,7 @@ local function RemoveOldTFS() end --------------------------------------------------------------------- -local function SetViewInfo() +local function SetViewInfo( bCalcSolids) local nViewId = EgtGetFirstNameInGroup( GDB_ID.ROOT, VIEWPARAMS) if not nViewId then nViewId = EgtGroup( GDB_ID.ROOT) @@ -230,7 +231,7 @@ local function SetViewInfo() EgtSetInfo( nViewId, IMPORTED_SOLID, false) EgtSetInfo( nViewId, OUTER_CRV, false) EgtSetInfo( nViewId, PATH_GRP, false) - EgtSetInfo( nViewId, SOLID_GRP, true) + EgtSetInfo( nViewId, SOLID_GRP, bCalcSolids) EgtSetInfo( nViewId, TOOLPATH_GRP, true) end @@ -340,7 +341,12 @@ function RunSlicing.Exec() EgtDraw() -- Calcolo dei solidi degli strand a partire dai percorsi di lavoro - CSOLIDS.Exec( nPartId) + local bCalcSolids = EgtGetInfo( nPartId, KEY_CALC_SOLIDS, 'b') + EgtRemoveInfo( nPartId, KEY_HAS_SOLIDS) + if bCalcSolids or bCalcSolids == nil then + CSOLIDS.Exec( nPartId) + end + EgtSetStatus( nSolidLayId, GDB_ST.OFF) EgtSetStatus( nRibsLayId or GDB_ID.NULL, GDB_ST.OFF) EgtSetStatus( nShellNbrLay or GDB_ID.NULL, GDB_ST.OFF) @@ -349,7 +355,7 @@ function RunSlicing.Exec() EgtDraw() -- Aggiorno impostazioni di visibilita' per ShowManager - SetViewInfo() + SetViewInfo( bCalcSolids) end