3dPrinting :
- aggiunte le diverse tipologie di ribs nell'ordinamento degli elementi di stampa.
This commit is contained in:
+41
-36
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user