diff --git a/LuaLibs/RunCalcSolids.lua b/LuaLibs/RunCalcSolids.lua index 35f2d87..6a872af 100644 --- a/LuaLibs/RunCalcSolids.lua +++ b/LuaLibs/RunCalcSolids.lua @@ -12,19 +12,14 @@ EgtOutLog( ' RunCalcSolids started', 1) -- Dati local AMD = require( 'AddManData') --- PROG_PARTID = 1 - --------------------------------------------------------------------- -local s_nPartId - ---------------------------------------------------------------------- -local function GetLayerParamsForSolidCalc() +local function GetLayerParamsForSolidCalc( nPartId) local LayerParams = {} - LayerParams.bInvert = EgtGetInfo( s_nPartId, KEY_PRINT_DIRECTION, 'b') - LayerParams.dLayHeight = EgtGetInfo( s_nPartId, KEY_SLICE_STEP, 'd') - LayerParams.dStrand = EgtGetInfo( s_nPartId, KEY_STRAND, 'd') - LayerParams.nOrder = EgtGetInfo( s_nPartId, KEY_PRINT_ORDER, 'i') - LayerParams.vtSlicing = EgtGetInfo( s_nPartId, KEY_SLICING_DIR, 'v') + LayerParams.bInvert = EgtGetInfo( nPartId, KEY_PRINT_DIRECTION, 'b') + LayerParams.dLayHeight = EgtGetInfo( nPartId, KEY_SLICE_STEP, 'd') + LayerParams.dStrand = EgtGetInfo( nPartId, KEY_STRAND, 'd') + LayerParams.nOrder = EgtGetInfo( nPartId, KEY_PRINT_ORDER, 'i') + LayerParams.vtSlicing = EgtGetInfo( nPartId, KEY_SLICING_DIR, 'v') return LayerParams end @@ -205,89 +200,102 @@ local function CreateSolidFromCurve( nCrvId, nSolidGrp, LayerParams) end --------------------------------------------------------------------- -function RunCalcSolids.Exec( nPartId) +function RunCalcSolids.Exec() - 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 - local LayerParams = GetLayerParamsForSolidCalc() - - for nIdx = 1, #vLayIds do + local nPartIndex = 1 + local nPartId = EgtGetFirstNameInGroup( GDB_ID.ROOT, PART .. nPartIndex) + while nPartId do - -- scorro tutti i gruppi di contorni - local nCrvGrpId = EgtGetFirstNameInGroup( vLayIds[ nIdx], CONTOUR_GRP.."*") or GDB_ID.NULL - while nCrvGrpId ~= GDB_ID.NULL do - - -- recupero il gruppo dei percorsi utensile - local nTPathGrpId = EgtGetFirstNameInGroup( nCrvGrpId, TOOLPATH_GRP) or GDB_ID.NULL - if nTPathGrpId == GDB_ID.NULL then - EgtOutBox( 'Error no tool paths', 'SolidCalc') - return - end - - -- recupero il gruppo dei solidi - local nSolidGrpId = EgtGetFirstNameInGroup( nCrvGrpId, SOLID_GRP) or GDB_ID.NULL - if nSolidGrpId == GDB_ID.NULL then - nSolidGrpId = EgtGroup( nCrvGrpId) - EgtSetName( nSolidGrpId, SOLID_GRP) - else - EgtEmptyGroup( nSolidGrpId) - end - - -- scorro le curve del percorso utensile - local nId = EgtGetFirstInGroup( nTPathGrpId) - while nId do - local bOk = CreateSolidFromCurve( nId, nSolidGrpId, LayerParams) - if not bOk then - table.insert( vErr, nIdx) - end - nId = EgtGetNext( nId) - end + if EgtGetInfo( nPartId, KEY_PART_ON_TABLE, 'b') then + -- verifico se necessario calcolare il solido + local bCalcSolid = EgtGetInfo( nPartId, KEY_CALC_SOLIDS, 'b') or false + local bHasSolids = EgtGetInfo( nPartId, KEY_HAS_SOLIDS, 'b') or false - -- processo gli eventi - if ( nIdx % 20) == 0 then - EgtDraw() - if EgtProcessEvents( nIdx / #vLayIds * 100, 0) == 1 then + if bCalcSolid and not bHasSolids then + + -- recupero i suoi slice + local vLayIds = EgtGetNameInGroup( nPartId, SLICE_LAYER .. '*') + if not vLayIds then + EgtOutBox( 'No sliced part in this project!', 'Error', 'ERROR') return end + + EgtSetInfo( nPartId, KEY_HAS_SOLIDS, 1) + + local vErr = {} + -- recupero i parametri necessari al calcolo dei solidi + local LayerParams = GetLayerParamsForSolidCalc( nPartId) + + for nIdx = 1, #vLayIds do + + -- scorro tutti i gruppi di contorni + local nCrvGrpId = EgtGetFirstNameInGroup( vLayIds[ nIdx], CONTOUR_GRP.."*") or GDB_ID.NULL + while nCrvGrpId ~= GDB_ID.NULL do + + -- recupero il gruppo dei percorsi utensile + local nTPathGrpId = EgtGetFirstNameInGroup( nCrvGrpId, TOOLPATH_GRP) or GDB_ID.NULL + if nTPathGrpId == GDB_ID.NULL then + EgtOutBox( 'Error no tool paths', 'SolidCalc') + return + end + + -- recupero il gruppo dei solidi + local nSolidGrpId = EgtGetFirstNameInGroup( nCrvGrpId, SOLID_GRP) or GDB_ID.NULL + if nSolidGrpId == GDB_ID.NULL then + nSolidGrpId = EgtGroup( nCrvGrpId) + EgtSetName( nSolidGrpId, SOLID_GRP) + EgtSetLevel( nSolidGrpId, GDB_LV.TEMP) + else + EgtEmptyGroup( nSolidGrpId) + end + + -- scorro le curve del percorso utensile + local nId = EgtGetFirstInGroup( nTPathGrpId) + while nId do + local bOk = CreateSolidFromCurve( nId, nSolidGrpId, LayerParams) + if not bOk then + table.insert( vErr, nIdx) + end + nId = EgtGetNext( nId) + end + + -- processo gli eventi + if ( nIdx % 20) == 0 then + EgtDraw() + if EgtProcessEvents( nIdx / #vLayIds * 100, 0) == 1 then + return + end + end + + --passo al gruppo di contorni successivo + nCrvGrpId = EgtGetNextName( nCrvGrpId, CONTOUR_GRP.."*") or GDB_ID.NULL + end + EgtDraw() + if EgtProcessEvents( nIdx / #vLayIds * 100, 0) == 1 then + return + end + end + + -- eventuale segnalazione errori + -- if #vErr > 0 then + -- EgtOutBox( 'Error on layers :\n' .. table.concat( vErr, ','), 'SolidCalc') + -- end + + for i = 1, #vErr do + 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 - --passo al gruppo di contorni successivo - nCrvGrpId = EgtGetNextName( nCrvGrpId, CONTOUR_GRP.."*") or GDB_ID.NULL end - EgtDraw() - if EgtProcessEvents( nIdx / #vLayIds * 100, 0) == 1 then - return - end - end - - -- eventuale segnalazione errori - -- if #vErr > 0 then - -- EgtOutBox( 'Error on layers :\n' .. table.concat( vErr, ','), 'SolidCalc') - -- end - - for i = 1, #vErr do - 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) + + nPartIndex = nPartIndex + 1 + nPartId = EgtGetFirstNameInGroup( GDB_ID.ROOT, PART .. nPartIndex) end end diff --git a/LuaLibs/RunShowManager.lua b/LuaLibs/RunShowManager.lua index 7f62893..8c19016 100644 --- a/LuaLibs/RunShowManager.lua +++ b/LuaLibs/RunShowManager.lua @@ -85,7 +85,8 @@ function RunShowManager.Exec() -- eventuale calcolo dei solidi local bHasSolids = EgtGetInfo( nPartId, KEY_HAS_SOLIDS, 'b') or false if not bHasSolids and bCurrSolid then - CSOLIDS.Exec( nPartId) + EgtSetInfo( nPartId, KEY_CALC_SOLIDS, true) + CSOLIDS.Exec() end if bImportedSolid ~= bCurrImportedSolid then diff --git a/LuaLibs/RunSliceAdvancement.lua b/LuaLibs/RunSliceAdvancement.lua index d644fc4..b172f97 100644 --- a/LuaLibs/RunSliceAdvancement.lua +++ b/LuaLibs/RunSliceAdvancement.lua @@ -98,7 +98,8 @@ function RunSliceAdvancement.Exec() -- eventuale calcolo dei solidi local bHasSolids = EgtGetInfo( nPartId, KEY_HAS_SOLIDS, 'b') or false if not bHasSolids then - CSOLIDS.Exec( nPartId) + EgtSetInfo( nPartId, KEY_CALC_SOLIDS, true) + CSOLIDS.Exec() end local nPrintOrder = EgtGetInfo( nPartId, KEY_PRINT_ORDER, 'i') diff --git a/LuaLibs/RunSlicePalette.lua b/LuaLibs/RunSlicePalette.lua index b20610b..b3b2bab 100644 --- a/LuaLibs/RunSlicePalette.lua +++ b/LuaLibs/RunSlicePalette.lua @@ -25,7 +25,8 @@ function RunSlicePalette.UpdateColors( nPaletteType) -- eventuale calcolo dei solidi local bHasSolids = EgtGetInfo( nPartId, KEY_HAS_SOLIDS, 'b') or false if not bHasSolids then - CSOLIDS.Exec( nPartId) + EgtSetInfo( nPartId, KEY_CALC_SOLIDS, true) + CSOLIDS.Exec() end -- ciclo sui layer per dis/attivare il resto diff --git a/LuaLibs/RunSlicing.lua b/LuaLibs/RunSlicing.lua index 1b252d5..6afb327 100644 --- a/LuaLibs/RunSlicing.lua +++ b/LuaLibs/RunSlicing.lua @@ -36,7 +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_CALC_SOLIDS, '0') 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') @@ -343,7 +343,7 @@ function RunSlicing.Exec() -- 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 or bCalcSolids == nil then + if bCalcSolids then CSOLIDS.Exec( nPartId) end