3dPrinting :

- ordinamento elementi di stampa
- oridinamento per tipologia di setti.
This commit is contained in:
SaraP
2023-01-10 08:54:09 +01:00
parent 1225625a9a
commit f050f49b66
5 changed files with 64 additions and 58 deletions
+10 -10
View File
@@ -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"
+19 -19
View File
@@ -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
+29 -24
View File
@@ -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.."*")
+1 -1
View File
@@ -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)
+5 -4
View File
@@ -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')