3dPrinting :

- aggiunte le diverse tipologie di ribs nell'ordinamento degli elementi di stampa.
This commit is contained in:
SaraP
2023-02-15 14:39:47 +01:00
parent df0cb0dfa3
commit 31f27d66c1
4 changed files with 87 additions and 79 deletions
+41 -36
View File
@@ -26,7 +26,7 @@ local function GetLayerParamsForToolPathCalc()
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_STRAND_ORDER, 'i')
LayerParams.vPrintOrder = EgtGetInfo( s_nPartId, KEY_PRINT_ORDER, 'vi') or { 1, 2, 3, 4, 5}
LayerParams.vPrintOrder = EgtGetInfo( s_nPartId, KEY_PRINT_ORDER, 'vi') or { 1, 2, 3, 4, 5, 6, 7, 8}
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')
@@ -671,7 +671,7 @@ local function CalcRibsLink( nCurr, nNext, nLoopGrp, dStrand, bForceLink, vtSlic
return nLinkId
end
nCrvId = EgtGetNextName( nCrvId, TRIM_SURF_LOOP)
nCrvId = EgtGetNextName( nCrvId, TRIM_SURF_LOOP)
end
-- se non ho trovato un collegamento sul bordo, creo una linea tra ptS e ptE
@@ -989,16 +989,16 @@ local function AddRibsLeadOut( nCrv, nTPathGrp, nLoopsGrp, vtSlicing, dStrand, n
end
---------------------------------------------------------------------
local function CalcRibsToolPath( nRibsGrp, nTpathGrpId, LayerParams)
local function CalcRibsToolPath( vEntIds, nRibsGrp, nTpathGrpId, LayerParams)
if not nRibsGrp then return end
if not vEntIds or #vEntIds == 0 then return end
-- gruppo temporaneo con sistema di riferimento locale per conti
local frLoc = Frame3d( ORIG(), LayerParams.vtSlicing)
local nGrpTmp = EgtGroup( nRibsGrp, frLoc, GDB_RT.GLOB)
-- aggiungo le costolature nel toolpath
local vEntIds = EgtGetNameInGroup( nRibsGrp, RIBS_CRV .. '*')
local nNewFirstEnt
for i = 1, #vEntIds do
-- copio entità nel gruppo toolpath
local nNewEntId = EgtCopyGlob( vEntIds[i], nTpathGrpId, GDB_IN.LAST_SON)
@@ -1006,24 +1006,12 @@ local function CalcRibsToolPath( nRibsGrp, nTpathGrpId, LayerParams)
EgtMove( nNewEntId, LayerParams.dLayHeight * LayerParams.vtSlicing, GDB_RT.GLOB)
EgtModifyCurveExtrusion( nNewEntId, LayerParams.vtSlicing, GDB_RT.GLOB)
EgtSetColor( nNewEntId, EgtStdColor('MAROON'))
end
-- posiziono alla quota corretta i loop degli offset da utlizzare per link, ingressi e uscite
local nLoopGrp = EgtGetFirstGroupInGroup( nRibsGrp)
local vLoopIds = EgtGetAllInGroup( nLoopGrp)
for i = 1, #vLoopIds do
EgtMove( vLoopIds[i], LayerParams.dLayHeight * LayerParams.vtSlicing, GDB_RT.GLOB)
if i == 1 then nNewFirstEnt = nNewEntId end
end
-- posizono alla quota corretta le superfici usate per i trim
local vSrfIds = EgtGetNameInGroup( nRibsGrp, TOT_SHELL_TRIM_SURF) or {}
for i = 1, #vSrfIds do
EgtMove( vSrfIds[i], LayerParams.dLayHeight * LayerParams.vtSlicing, GDB_RT.GLOB)
end
-- recupero i gruppi delle costolature
local tabRibs = {}
local nFirst = EgtGetFirstNameInGroup( nTpathGrpId, RIBS_CRV .. '*')
local nFirst = nNewFirstEnt
while nFirst do
local sName = EgtGetName( nFirst)
local vIds = EgtGetNameInGroup( nTpathGrpId, sName)
@@ -1034,23 +1022,27 @@ local function CalcRibsToolPath( nRibsGrp, nTpathGrpId, LayerParams)
local bSpecialCase = EgtGetInfo( nRibsGrp, KEY_RIBS_SPECIAL_CASE, 'b') or false
-- Link
local nLoopGrp = EgtGetFirstGroupInGroup( nRibsGrp)
-- collego le passate di una stessa costolatura
for i = 1, #tabRibs do
if EgtCurveIsClosed( tabRibs[i][1]) then
AddLink( tabRibs[i], nTpathGrpId, LINK_TYPE.NONE, LayerParams.dLinkParam, LayerParams.dSPOffs, LayerParams.dStrand, LayerParams.vtSlicing)
else
for j = 1, #tabRibs[i] - 1 do
local nOrig1 = EgtGetInfo( tabRibs[i][j], KEY_ORIGINAL_RIB, 'i')
local nOrig2 = EgtGetInfo( tabRibs[i][j + 1], KEY_ORIGINAL_RIB, 'i')
local bUserLink = EgtGetInfo( tabRibs[i][j], KEY_RIBS_USER_LINK, 'b') or false
local nOrig1 = EgtGetInfo( tabRibs[i][j], KEY_ORIGINAL_RIB, 'i') or 0
local nOrig2 = EgtGetInfo( tabRibs[i][j + 1], KEY_ORIGINAL_RIB, 'i') or 0
local nSplitId1 = EgtGetInfo( tabRibs[i][j], KEY_SPLIT_ID, 'i') or 0
local nSplitId2 = EgtGetInfo( tabRibs[i][j + 1], KEY_SPLIT_ID, 'i') or 0
local bForceLink = ( nOrig1 == nOrig2 and nSplitId1 == nSplitId2)
local bForceLink = ( nOrig1 == nOrig2)
CalcRibsLink( tabRibs[i][j], tabRibs[i][j + 1], nLoopGrp, LayerParams.dStrand, bForceLink, LayerParams.vtSlicing, nGrpTmp)
-- creo link fittizio per eliminare tratto corrispondente sulla curva di offset
if not bSpecialCase and bForceLink then
local nFakeLink = CalcRibsLink( tabRibs[i][j + 1], tabRibs[i][j], nLoopGrp, LayerParams.dStrand, false, LayerParams.vtSlicing, nGrpTmp)
EgtErase( nFakeLink)
if ( nOrig1 ~= nOrig2 and bUserLink) or ( nSplitId1 == nSplitId2 and nOrig1 == nOrig2) then
CalcRibsLink( tabRibs[i][j], tabRibs[i][j + 1], nLoopGrp, LayerParams.dStrand, bForceLink, LayerParams.vtSlicing, nGrpTmp)
-- creo link fittizio per eliminare tratto corrispondente sulla curva di offset
if not bSpecialCase and bForceLink then
local nFakeLink = CalcRibsLink( tabRibs[i][j + 1], tabRibs[i][j], nLoopGrp, LayerParams.dStrand, false, LayerParams.vtSlicing, nGrpTmp)
EgtErase( nFakeLink)
end
end
end
@@ -1071,16 +1063,14 @@ local function CalcRibsToolPath( nRibsGrp, nTpathGrpId, LayerParams)
for i = 1, #tabRibs - 1 do
local bLink1 = EgtGetInfo( tabRibs[i][1], KEY_RIBS_LINK, 'b')
local bLink2 = EgtGetInfo( tabRibs[i + 1][1], KEY_RIBS_LINK, 'b')
local nType1 = EgtGetInfo( tabRibs[i][1], KEY_RIBS_TYPE, 'i')
local nType2 = EgtGetInfo( tabRibs[i + 1][1], KEY_RIBS_TYPE, 'i')
if bLink1 and bLink2 and nType1 == nType2 then
if bLink1 and bLink2 then
local nCnt = #tabRibs[i]
CalcRibsLink( tabRibs[i][nCnt], tabRibs[i + 1][1], nLoopGrp, LayerParams.dStrand, false, LayerParams.vtSlicing, nGrpTmp)
end
end
-- leadin/leadout
local nCrvRib = EgtGetFirstNameInGroup( nTpathGrpId, RIBS_CRV .. '*')
local nCrvRib = nNewFirstEnt
while nCrvRib do
-- verifico se necessario lead in
local nPrev = EgtGetPrev( nCrvRib)
@@ -1251,13 +1241,13 @@ end
function CalcToolPath.Exec( nPartId)
s_nPartId = nPartId
-- Verifico il pezzo
if not s_nPartId then
EgtOutBox( 'Error missing part', 'ToolPathCalc')
return
end
-- Recupero i layer da processare
local vLayIds = EgtGetNameInGroup( s_nPartId, SLICE_LAYER.."*")
if not vLayIds then
@@ -1303,6 +1293,15 @@ function CalcToolPath.Exec( nPartId)
EgtEmptyGroup( nTpathGrpId)
end
-- suddivido i ribs per tipologia
local nRibsGrp = EgtGetFirstNameInGroup( nCrvGrpId, RIBS_GRP)
local tRibs = {{}, {}, {}, {}}
local vRibsIds = EgtGetNameInGroup( nRibsGrp, RIBS_CRV .. '*') or {}
for i = 1, #vRibsIds do
local nType = EgtGetInfo( vRibsIds[i], KEY_RIBS_TYPE, 'i') or 1
table.insert( tRibs[nType], vRibsIds[i])
end
-- realizzo le diverse tipologie in base all'ordine selezionato
for j = 1, #LayerParams.vPrintOrder do
@@ -1323,10 +1322,16 @@ function CalcToolPath.Exec( nPartId)
local nAuxSolidsGrp = EgtGetFirstNameInGroup( vLayIds[nIdx], AUX_SOLIDS_GRP)
local nAuxSolidsPathGrp = EgtGetFirstNameInGroup( nCrvGrpId, AUX_SOLIDS_GRP)
CalcAuxSolidsToolPath( nAuxSolidsGrp, nAuxSolidsPathGrp, nTpathGrpId, LayerParams)
else
-- costolature
local nRibsGrp = EgtGetFirstNameInGroup( nCrvGrpId, RIBS_GRP)
CalcRibsToolPath( nRibsGrp, nTpathGrpId, LayerParams)
elseif LayerParams.vPrintOrder[j] == PRINT_ELEMENT.RIB_UNBOUNDED then
CalcRibsToolPath( tRibs[RIB_TYPE.UNBOUNDED], nRibsGrp, nTpathGrpId, LayerParams)
elseif LayerParams.vPrintOrder[j] == PRINT_ELEMENT.RIB_INTERNAL then
CalcRibsToolPath( tRibs[RIB_TYPE.INTERNAL], nRibsGrp, nTpathGrpId, LayerParams)
elseif LayerParams.vPrintOrder[j] == PRINT_ELEMENT.RIB_SUPPORT then
CalcRibsToolPath( tRibs[RIB_TYPE.SUPPORT], nRibsGrp, nTpathGrpId, LayerParams)
elseif LayerParams.vPrintOrder[j] == PRINT_ELEMENT.RIB_EXTERNAL then
CalcRibsToolPath( tRibs[RIB_TYPE.EXTERNAL], nRibsGrp, nTpathGrpId, LayerParams)
end
end