diff --git a/LuaLibs/AddManData.lua b/LuaLibs/AddManData.lua index 7730d4a..c52b758 100644 --- a/LuaLibs/AddManData.lua +++ b/LuaLibs/AddManData.lua @@ -46,7 +46,8 @@ KEY_STRAND = "StrandW" KEY_STRAND_OVERLAP = "StrandOverlap" KEY_OFFSET_SLICE = "Offset" KEY_SP_OFFSET_ON_SLICE = "StartPointOffsetOnSlice" -KEY_PRINT_ORDER = "StrandOrder" +KEY_STRAND_ORDER = "StrandOrder" +KEY_PRINT_ORDER = "PrintOrder" KEY_PRINT_DIRECTION = "Direction" KEY_TYPE = "Type" KEY_LINK_TYPE = "LinkType" @@ -161,6 +162,14 @@ TYPE = { AUX_SOLID = 10, } +PRINT_ELEMENT = { + SHELL = 1, + EXTRA_SHELL = 2, + INFILL = 3, + AUX_SOLID = 4, + RIB = 5, +} + PRINT_ORDER = { EXT_INT = 1, INT_EXT = 2, @@ -196,15 +205,6 @@ RIB_TYPE = { SUPPORT = 4, } -RIB_PRINT_ORDER = { - INT_EXT_UNBDD = 1, - INT_UNBDD_EXT = 2, - EXT_INT_UNBDD = 3, - EXT_UNBDD_INT = 4, - UNBDD_INT_EXT = 5, - UNBDD_EXT_INT = 6, -} - --------------------------------------------------------------------- TABLE = "Table" PART = "Part" diff --git a/LuaLibs/CalcPaths.lua b/LuaLibs/CalcPaths.lua index 7e20538..1277a93 100644 --- a/LuaLibs/CalcPaths.lua +++ b/LuaLibs/CalcPaths.lua @@ -21,7 +21,7 @@ local function GetLayerParamsForPathCalc() local LayerParams = {} LayerParams.bSpiralVase = EgtGetInfo( s_nPartId, KEY_SPIRAL_VASE, 'b') or false LayerParams.nShellsNbr = EgtGetInfo( s_nPartId, KEY_SHELLS_NBR, 'i') - LayerParams.dStrand = EgtGetInfo( s_nPartId, KEY_STRAND, 'd') + LayerParams.dStrand = EgtGetInfo( s_nPartId, KEY_STRAND, 'd') LayerParams.nStrandOverlap = EgtGetInfo( s_nPartId, KEY_STRAND_OVERLAP, 'i') or 0 LayerParams.dOffs = EgtGetInfo( s_nPartId, KEY_OFFSET_SLICE, 'd') LayerParams.nFloorNbr = EgtGetInfo( s_nPartId, KEY_FLOOR_NBR, 'i') or 0 @@ -33,7 +33,7 @@ local function GetLayerParamsForPathCalc() -- parametri costolature LayerParams.bRibsInvertOrder = EgtGetInfo( s_nPartId, KEY_RIBS_INVERT_ORDER, 'b') LayerParams.bRibsDoLinkFirst = EgtGetInfo( s_nPartId, KEY_RIBS_DO_LINK_FIRST, 'b') or false - LayerParams.nRibsPrintOrder = EgtGetInfo( s_nPartId, KEY_RIBS_PRINT_ORDER, 'i') or 5 + LayerParams.vRibsPrintOrder = EgtGetInfo( s_nPartId, KEY_RIBS_PRINT_ORDER, 'vi') or {3, 1, 4, 2} -- parametri regioni con diverse passate LayerParams.dShellNbrCoasting = EgtGetInfo( s_nPartId, KEY_SHELL_NBR_COASTING, 'd') LayerParams.dShellNbrWipe = EgtGetInfo( s_nPartId, KEY_SHELL_NBR_WIPE, 'd') @@ -210,7 +210,7 @@ local function VerifyPath( nCrvId, dStrand, vtSlicing, nGrp) EgtRelocateGlob( nCrvId, nGrp, GDB_IN.LAST_SON) EgtErase( nGrpTmp) end - -- se non è fattibile con unica passata lo cancello + -- se non è fattibile con unica passata lo cancello if not bSingleStrand then EgtErase( nCrvId) return false @@ -448,7 +448,8 @@ local function ComputeTrimSurfWithOverlapsForRibs( vIds, nSrfBase, nSrfExt, dOff local dNewOffs = nOverlap / 100 * dStrand local bOk, bExists, nSrfOffs = ComputeSurfOffset( nSrfBase, nGrp, dNewOffs, vtSlicing) if bOk then - tSurfOffs[nType][nOverlap] = nSrfOffs + tSurfOffs[RIB_TYPE.INTERNAL][nOverlap] = nSrfOffs + tSurfOffs[RIB_TYPE.SUPPORT][nOverlap] = nSrfOffs end end elseif nType == RIB_TYPE.EXTERNAL then @@ -628,7 +629,7 @@ local function UpdateSplitOrder( nCrv, tInters, nOffsGrp) end -------------------------------------------------------------------- -local function HandleRibsIntersections( nRibsGrp, LayerParams, nOffsGrp, nRibsPathGrp, bAllTwoStrands, vRibsPrintOrder) +local function HandleRibsIntersections( nRibsGrp, LayerParams, nOffsGrp, nRibsPathGrp, bAllTwoStrands, vTypeSequence) local vRibsIds = EgtGetNameInGroup( nRibsGrp, RIBS_CRV .. '*') -- copio gli offset delle costolature nel RibsPathGrp @@ -694,7 +695,7 @@ local function HandleRibsIntersections( nRibsGrp, LayerParams, nOffsGrp, nRibsPa else -- se stessa tipologia taglio il setto già splittato più volte, altrimenti taglio il setto che viene realizzato successivamente if ( nType1 == nType2 and nSplitOrder1 > nSplitOrder2) or - ( nType1 ~= nType2 and vRibsPrintOrder[nType1] > vRibsPrintOrder[nType2]) then + ( nType1 ~= nType2 and vTypeSequence[nType1] > vTypeSequence[nType2]) then nCrv1, nCrv2 = nCrv2, nCrv1 nSplitOrder1, nSplitOrder2 = nSplitOrder2, nSplitOrder1 end @@ -762,7 +763,7 @@ end --------------------------------------------------------------------- -- Funzione che riordina le costolature nel caso generico -local function ReorderRibs( nGrp, bInvertOrder, bDoLinkFirst, dStrand, nMaxNbr, vTypeSequence) +local function ReorderRibs( nGrp, bInvertOrder, bDoLinkFirst, dStrand, nMaxNbr, vRibsPrintOrder) local vIds = EgtGetNameInGroup( nGrp, RIBS_CRV .. '*') if not vIds or #vIds == 0 then return end @@ -776,8 +777,8 @@ local function ReorderRibs( nGrp, bInvertOrder, bDoLinkFirst, dStrand, nMaxNbr, -- riordino ogni tipologia con shortest path local vSplitRibs = {} - for i = 1, #vTypeSequence do - local nCurrType = vTypeSequence[i] + for i = 1, #vRibsPrintOrder do + local nCurrType = vRibsPrintOrder[i] local tSplitOrder = {} local nMax = -1 -- raggruppo i ribs @@ -909,7 +910,7 @@ end --------------------------------------------------------------------------------------------- -- Funzione che riordina le costolature nel caso di intersezioni e 2 passate -local function ReorderRibsInters2Shells( nOffsGrp, dStrand, vTypeSequence) +local function ReorderRibsInters2Shells( nOffsGrp, dStrand, vRibsPrintOrder) local vOffs = {} local vClosed = {} @@ -1059,8 +1060,8 @@ local function ReorderRibsInters2Shells( nOffsGrp, dStrand, vTypeSequence) table.insert( tRibs[nType], vCrvs[nId]) end -- riordino per tipologia - for i = 1, #vTypeSequence do - nCurrType = vTypeSequence[i] + for i = 1, #vRibsPrintOrder do + nCurrType = vRibsPrintOrder[i] for j = 1, #tRibs[nCurrType] do EgtRelocateGlob( tRibs[nCurrType][j], nOffsGrp, GDB_IN.LAST_SON) end @@ -1100,10 +1101,9 @@ end local function CalcRibsPaths( nSliceGrp, nRibsGrp, LayerParams, nIdx, vPtStart) -- stabilisco ordine di realizzazione delle varie tipologie - local vTypeSequence = { 3, 1, 4, 2} - local vRibsPrintOrder = {} - for i = 1, #vTypeSequence do - vRibsPrintOrder[vTypeSequence[i]] = i + local vTypeSequence = {} + for i = 1, #LayerParams.vRibsPrintOrder do + vTypeSequence[LayerParams.vRibsPrintOrder[i]] = i end local vRibs = EgtGetNameInGroup( nRibsGrp, RIBS_CRV .. '*') @@ -1159,7 +1159,7 @@ local function CalcRibsPaths( nSliceGrp, nRibsGrp, LayerParams, nIdx, vPtStart) local tSurfOffs = ComputeTrimSurfWithOverlapsForRibs( vRibs, nSrfBase, nSrfExt, LayerParams.dOffs, LayerParams.dStrand, nRibsPathGrp, LayerParams.vtSlicing) -- gestisco eventuali intersezioni fra costolature - local bInters = HandleRibsIntersections( nRibsGrp, LayerParams, nOffsGrp, nRibsPathGrp, bAllTwoStrands, vRibsPrintOrder) + local bInters = HandleRibsIntersections( nRibsGrp, LayerParams, nOffsGrp, nRibsPathGrp, bAllTwoStrands, vTypeSequence) EgtSetInfo( nRibsPathGrp or GDB_ID.NULL, KEY_RIBS_INTERS, bInters) EgtSetInfo( nRibsPathGrp or GDB_ID.NULL, KEY_RIBS_TWO_STRANDS, bAllTwoStrands) @@ -1240,9 +1240,9 @@ local function CalcRibsPaths( nSliceGrp, nRibsGrp, LayerParams, nIdx, vPtStart) -- riordino le costolature if bAllTwoStrands and bInters then -- gestione caso speciale di intersezione e 2 passate - ReorderRibsInters2Shells( nRibsPathGrp, LayerParams.dStrand, vTypeSequence) + ReorderRibsInters2Shells( nRibsPathGrp, LayerParams.dStrand, LayerParams.vRibsPrintOrder) else - ReorderRibs( nRibsPathGrp, LayerParams.bRibsInvertOrder, LayerParams.bRibsDoLinkFirst, LayerParams.dStrand, nMaxNbr, vTypeSequence) + ReorderRibs( nRibsPathGrp, LayerParams.bRibsInvertOrder, LayerParams.bRibsDoLinkFirst, LayerParams.dStrand, nMaxNbr, LayerParams.vRibsPrintOrder) end if not EgtGetFirstNameInGroup( nRibsPathGrp, RIBS_CRV .. '*') then diff --git a/LuaLibs/CalcToolPath.lua b/LuaLibs/CalcToolPath.lua index 87d34d8..c2b57eb 100644 --- a/LuaLibs/CalcToolPath.lua +++ b/LuaLibs/CalcToolPath.lua @@ -25,7 +25,8 @@ local function GetLayerParamsForToolPathCalc() LayerParams.dLayHeight = EgtGetInfo( s_nPartId, KEY_SLICE_STEP, 'd') LayerParams.dOffs = EgtGetInfo( s_nPartId, KEY_OFFSET_SLICE, 'd') LayerParams.bInvert = ( EgtGetInfo( s_nPartId, KEY_PRINT_DIRECTION, 'i') == PRINT_DIRECTION.CW) - LayerParams.nOrder = EgtGetInfo( s_nPartId, KEY_PRINT_ORDER, 'i') + LayerParams.nOrder = EgtGetInfo( s_nPartId, KEY_STRAND_ORDER, 'i') + LayerParams.vPrintOrder = EgtGetInfo( s_nPartId, KEY_PRINT_ORDER, 'vi') or { 1, 2, 3, 4, 5} LayerParams.nLinkType = EgtGetInfo( s_nPartId, KEY_LINK_TYPE, 'i') LayerParams.dLinkParam = EgtGetInfo( s_nPartId, KEY_LINK_PARAM, 'd') LayerParams.nLeadInType = EgtGetInfo( s_nPartId, KEY_LEAD_IN_TYPE, 'i') @@ -394,7 +395,7 @@ local function CalcExtraShellToolPath( vEntIds, nTpathGrpId, LayerParams, dCorrZ if not vEntIds then return end -- aggiungo le curve nel toolpath local vIds = AddCurvesToToolPath( vEntIds, nTpathGrpId, PRINT_ORDER.EXT_INT, false, LayerParams.vtSlicing, LayerParams.dLayHeight, dCorrZ) - + -- aggiungo gli opportuni raccordi local sPrevName = EgtGetName( vIds[1]) for i = 2, #vIds do @@ -1304,29 +1305,33 @@ function CalcToolPath.Exec( nPartId) EgtEmptyGroup( nTpathGrpId) end - -- shells - local vShellIds = EgtGetNameInGroup( nPathGrpId, SHELL_CRV .. '*') - local vExtraShellIds = EgtGetNameInGroup( nPathGrpId, EXTRA_SHELL_CRV .. '*') - local vInfillIds = EgtGetNameInGroup( nPathGrpId, INFILL_CRV .. '*') - - if LayerParams.nOrder == PRINT_ORDER.EXT_INT then - CalcShellsToolPath( vShellIds, nTpathGrpId, LayerParams, dCorrZ) - CalcExtraShellToolPath( vExtraShellIds, nTpathGrpId, LayerParams, dCorrZ) - CalcInfillToolPath( vInfillIds, nTpathGrpId, LayerParams, dCorrZ) - else - CalcInfillToolPath( vInfillIds, nTpathGrpId, LayerParams, dCorrZ) - CalcExtraShellToolPath( vExtraShellIds, nTpathGrpId, LayerParams, dCorrZ) - CalcShellsToolPath( vShellIds, nTpathGrpId, LayerParams, dCorrZ) + -- realizzo le diverse tipologie in base all'ordine selezionato + for j = 1, #LayerParams.vPrintOrder do + + if LayerParams.vPrintOrder[j] == PRINT_ELEMENT.SHELL then + -- shell + local vShellIds = EgtGetNameInGroup( nPathGrpId, SHELL_CRV .. '*') + CalcShellsToolPath( vShellIds, nTpathGrpId, LayerParams, dCorrZ) + elseif LayerParams.vPrintOrder[j] == PRINT_ELEMENT.EXTRA_SHELL then + -- extra shell + local vExtraShellIds = EgtGetNameInGroup( nPathGrpId, EXTRA_SHELL_CRV .. '*') + CalcExtraShellToolPath( vExtraShellIds, nTpathGrpId, LayerParams, dCorrZ) + elseif LayerParams.vPrintOrder[j] == PRINT_ELEMENT.INFILL then + -- infill + local vInfillIds = EgtGetNameInGroup( nPathGrpId, INFILL_CRV .. '*') + CalcInfillToolPath( vInfillIds, nTpathGrpId, LayerParams, dCorrZ) + elseif LayerParams.vPrintOrder[j] == PRINT_ELEMENT.AUX_SOLID then + -- solidi ausiliari + local nAuxSolidsGrp = EgtGetFirstNameInGroup( vLayIds[nIdx], AUX_SOLIDS_GRP) + local nAuxSolidsPathGrp = EgtGetFirstNameInGroup( nCrvGrpId, AUX_SOLIDS_GRP) + CalcAuxSolidsToolPath( nAuxSolidsGrp, nAuxSolidsPathGrp, nTpathGrpId, LayerParams, dCorrZ) + else + -- costolature + local nRibsGrp = EgtGetFirstNameInGroup( nCrvGrpId, RIBS_GRP) + CalcRibsToolPath( nRibsGrp, nTpathGrpId, LayerParams, dCorrZ) + end + end - - -- solidi ausiliari - local nAuxSolidsGrp = EgtGetFirstNameInGroup( vLayIds[nIdx], AUX_SOLIDS_GRP) - local nAuxSolidsPathGrp = EgtGetFirstNameInGroup( nCrvGrpId, AUX_SOLIDS_GRP) - CalcAuxSolidsToolPath( nAuxSolidsGrp, nAuxSolidsPathGrp, nTpathGrpId, LayerParams, dCorrZ) - - -- costolature - local nRibsGrp = EgtGetFirstNameInGroup( nCrvGrpId, RIBS_GRP) - CalcRibsToolPath( nRibsGrp, nTpathGrpId, LayerParams, dCorrZ) -- passo al gruppo di contorni successivo nCrvGrpId = EgtGetNextName( nCrvGrpId, CONTOUR_GRP.."*") diff --git a/LuaLibs/RunSliceAdvancement.lua b/LuaLibs/RunSliceAdvancement.lua index f013ae2..9471ada 100644 --- a/LuaLibs/RunSliceAdvancement.lua +++ b/LuaLibs/RunSliceAdvancement.lua @@ -102,7 +102,7 @@ function RunSliceAdvancement.Exec() CSOLIDS.Exec() end - local nPrintOrder = EgtGetInfo( nPartId, KEY_PRINT_ORDER, 'i') + local nPrintOrder = EgtGetInfo( nPartId, KEY_STRAND_ORDER, 'i') -- ciclo sui layer per dis/attivare il resto local nLayerIndex = 1 local nLayerId = EgtGetFirstNameInGroup( nPartId, SLICE_LAYER .. nLayerIndex) or EgtGetFirstNameInGroup( nPartId, "__" .. SLICE_LAYER .. nLayerIndex) diff --git a/LuaLibs/RunSlicing.lua b/LuaLibs/RunSlicing.lua index 3fe275d..8a9087b 100644 --- a/LuaLibs/RunSlicing.lua +++ b/LuaLibs/RunSlicing.lua @@ -55,12 +55,13 @@ local function LoadParams( sFile, nPartId) SetParamInfo( sFile, nPartId, SEC_DEFAULT, KEY_SHELLS_NBR, '3') SetParamInfo( sFile, nPartId, SEC_DEFAULT, KEY_STRAND_OVERLAP, '0') SetParamInfo( sFile, nPartId, SEC_DEFAULT, KEY_OFFSET_SLICE, '0.0') + SetParamInfo( sFile, nPartId, SEC_DEFAULT, KEY_PRINT_ORDER, '1,2,3,4,5') - local sStrandOrder = EgtGetStringFromIni( SEC_DEFAULT, KEY_PRINT_ORDER, 'InToOut', sFile) + local sStrandOrder = EgtGetStringFromIni( SEC_DEFAULT, KEY_STRAND_ORDER, 'InToOut', sFile) if sStrandOrder == 'OutToIn' then - EgtSetInfo( nPartId, KEY_PRINT_ORDER, PRINT_ORDER.EXT_INT) + EgtSetInfo( nPartId, KEY_STRAND_ORDER, PRINT_ORDER.EXT_INT) else -- 'InToOut' - EgtSetInfo( nPartId, KEY_PRINT_ORDER, PRINT_ORDER.INT_EXT) + EgtSetInfo( nPartId, KEY_STRAND_ORDER, PRINT_ORDER.INT_EXT) end local sStrandDirection = EgtGetStringFromIni( SEC_DEFAULT, KEY_PRINT_DIRECTION, 'CCW', sFile) @@ -151,7 +152,7 @@ local function LoadParams( sFile, nPartId) end SetParamInfo( sFile, nPartId, SEC_DEFAULT, KEY_RIBS_OVERLAP, '0.0') - SetParamInfo( sFile, nPartId, SEC_DEFAULT, KEY_RIBS_PRINT_ORDER, '1') + SetParamInfo( sFile, nPartId, SEC_DEFAULT, KEY_RIBS_PRINT_ORDER, '3,1,4,2') SetParamInfo( sFile, nPartId, SEC_DEFAULT, KEY_RIBS_SHELLS_NBR, '0') SetParamInfo( sFile, nPartId, SEC_DEFAULT, KEY_RIBS_INVERT_DIR, '0') SetParamInfo( sFile, nPartId, SEC_DEFAULT, KEY_RIBS_INVERT_ORDER, '0')