diff --git a/LuaLibs/AddManData.lua b/LuaLibs/AddManData.lua index e2872c8..cc1f2b2 100644 --- a/LuaLibs/AddManData.lua +++ b/LuaLibs/AddManData.lua @@ -86,6 +86,8 @@ KEY_WIPE_LEN = 'WipeLen' KEY_WIPE_DIR = 'WipeDir' KEY_WIPE_FEEDPU = 'WipeFeedPu' KEY_TOOL_DIAM = 'ToolDiam' +KEY_MAX_H = 'SlicingHeight' +KEY_MAX_SLICES_NBR = 'MaxSlicesNumber' KEY_MAX_STRANDH_FACTOR = 'MaxStrandHFactor' KEY_MIN_STRANDH_FACTOR = 'MinStrandHFactor' KEY_JOIN_SHELLS = 'JoinShells' @@ -150,6 +152,7 @@ KEY_RIBS_MERGE_WITH_SHELLS = 'RibsMergeWithShell' KEY_INVERT_RIBS_MERGED_SHELL_LINK = 'InvertRibsMergedShellMainLink' KEY_RIBS_LEAD_FILLET = 'RibsLeadFillet' KEY_RIBS_LINK_FILLET = 'RibsLinkFillet' +KEY_RIBS_MAX_SLICES_NBR = 'RibsMaxSlicesNumber' -- Regioni con diverso numero di passate KEY_SHELL_NBR_DIFF = 'ShellNbrDifference' @@ -193,8 +196,6 @@ KEY_LINEAR_APPROX = 'LinearApprox' KEY_LINEAR_TOL = 'LinearTol' -- Altre chiavi -KEY_MAX_H = 'SlicingHeight' -KEY_MAX_SLICES_NBR = 'MaxSlicesNumber' KEY_SLICE_NBR = 'SliceNbr' KEY_SLICE_DIR = 'SliceDir' KEY_SLICE_POS = 'SlicePos' diff --git a/LuaLibs/CalcSlices.lua b/LuaLibs/CalcSlices.lua index 8d6b95f..f7e9154 100644 --- a/LuaLibs/CalcSlices.lua +++ b/LuaLibs/CalcSlices.lua @@ -315,6 +315,7 @@ local function GetRibParams( nId) ReadParam( nId, KEY_RIBS_MERGE_WITH_SHELLS, 'b', false, RibParam) ReadParam( nId, KEY_RIBS_LEAD_FILLET, 'd', 0, RibParam) ReadParam( nId, KEY_RIBS_LINK_FILLET, 'd', 0, RibParam) + ReadParam( nId, KEY_RIBS_MAX_SLICES_NBR, 'i', 0, RibParam) return RibParam end @@ -419,14 +420,29 @@ local function SlicingExtraObjects( nLay, vSlicingDir, vSlicingVal, nSlicingType local vLayIds = EgtGetNameInGroup( s_nPartId, SLICE_LAYER .. '*') for i = 1, #vSliceIds do + -- ricavo i parametri per lo slicing + local vCurrSlicingDir = {} + local vCurrSlicingVal = {} + if nType == TYPE.RIB and tabParams[i][KEY_RIBS_MAX_SLICES_NBR] > 0 and tabParams[i][KEY_RIBS_MAX_SLICES_NBR] < #vSlicingVal then + for j = 1, min( tabParams[i][KEY_RIBS_MAX_SLICES_NBR], #vSlicingDir) do + vCurrSlicingDir[j] = vSlicingDir[j] + end + for j = 1, tabParams[i][KEY_RIBS_MAX_SLICES_NBR] do + vCurrSlicingVal[j] = vSlicingVal[j] + end + else + vCurrSlicingDir = vSlicingDir + vCurrSlicingVal = vSlicingVal + end + -- effettuo lo slicing in layer separati ( analogamente a quanto avviene con il solido) local nResId if nSlicingType ~= SLICING_TYPE.MULTIPLANAR and nSlicingType ~= SLICING_TYPE.MULTIPLANAR_DEG45 and nSlicingType ~= SLICING_TYPE.MULTIPLANAR_HOR then - nResId = EgtParPlanesSurfTmInters( ORIG(), vSlicingDir[1], vSlicingVal, vSliceIds[i], s_nPartId, GDB_RT.GLOB, TOLER) + nResId = EgtParPlanesSurfTmInters( ORIG(), vCurrSlicingDir[1], vCurrSlicingVal, vSliceIds[i], s_nPartId, GDB_RT.GLOB, TOLER) else - for j = 1, #vSlicingVal do - local vtN = vSlicingDir[j] - local ptOn = vSlicingVal[j] + for j = 1, #vCurrSlicingVal do + local vtN = vCurrSlicingDir[j] + local ptOn = vCurrSlicingVal[j] if j == 1 then ptOn = ptOn + DELTAZ * vtN end @@ -442,7 +458,7 @@ local function SlicingExtraObjects( nLay, vSlicingDir, vSlicingVal, nSlicingType -- recupero i risultati e li sposto nei layers opportuni local j = 1 while nResId do - local vtSlicing = vSlicingDir[j] or vSlicingDir[1] + local vtSlicing = vCurrSlicingDir[j] or vCurrSlicingDir[1] -- recupero il gruppo nel layer dove salvare lo slicing degli oggetti o lo creo se non esiste local nGrp = EgtGetFirstNameInGroup( vLayIds[j], sNameGrp)