3dPrinting :
- modifiche nei setti per conservare i link disegnati dall'utente ( prima versione) - aggiunti ingressi/uscite per setti che non iniziano/terminano su shell.
This commit is contained in:
+53
-86
@@ -560,7 +560,7 @@ local function CalcRibsLink( nCurr, nNext, nLoopGrp, dStrand, bForceLink, vtSlic
|
||||
local ptS = EgtEP( nCurr)
|
||||
local ptE = EgtSP( nNext)
|
||||
|
||||
local nCrvId = EgtGetFirstInGroup( nLoopGrp)
|
||||
local nCrvId = EgtGetFirstNameInGroup( nLoopGrp, TRIM_SURF_LOOP)
|
||||
-- recupero la curva di offset su cui calcolare link
|
||||
while nCrvId do
|
||||
local dParS = EgtCurveParamAtPoint( nCrvId, ptS)
|
||||
@@ -607,18 +607,31 @@ local function CalcRibsLink( nCurr, nNext, nLoopGrp, dStrand, bForceLink, vtSlic
|
||||
return
|
||||
end
|
||||
|
||||
-- elimino dalle curve di contorno il link appena trovato
|
||||
if bClosed then
|
||||
EgtTrimCurveStartEndAtParam( nCrvId, dParE, dParS)
|
||||
EgtErase( nCopyId)
|
||||
else
|
||||
EgtTrimCurveEndAtParam( nCrvId, dParS)
|
||||
EgtTrimCurveStartAtParam( nCopyId, dParE)
|
||||
if dParS < GEO.EPS_SMALL then
|
||||
-- forzare la fine della curva nel suo inizio significa cancellarla completamente
|
||||
EgtErase( nCrvId)
|
||||
else
|
||||
EgtTrimCurveEndAtParam( nCrvId, dParS)
|
||||
end
|
||||
|
||||
local _, dEnd = EgtCurveDomain( nCopyId)
|
||||
if abs( dParE - dEnd) < GEO.EPS_SMALL then
|
||||
-- forzare l'inizio della curva nella sua fine significa cancellarla completamente
|
||||
EgtErase( nCopyId)
|
||||
else
|
||||
EgtTrimCurveStartAtParam( nCopyId, dParE)
|
||||
end
|
||||
end
|
||||
|
||||
return nLinkId
|
||||
end
|
||||
|
||||
nCrvId = EgtGetNext( nCrvId)
|
||||
nCrvId = EgtGetNextName( nCrvId, TRIM_SURF_LOOP)
|
||||
end
|
||||
|
||||
-- se non ho trovato un collegamento sul bordo, creo una linea tra ptS e ptE
|
||||
@@ -630,7 +643,7 @@ local function CalcRibsLink( nCurr, nNext, nLoopGrp, dStrand, bForceLink, vtSlic
|
||||
EgtSetName( nLinkId, LINK_CRV)
|
||||
EgtModifyCurveExtrusion( nLinkId, vtSlicing, GDB_RT.GLOB)
|
||||
EgtRelocateGlob( nLinkId, nCurr, GDB_IN.AFTER)
|
||||
else
|
||||
else
|
||||
EgtErase( nLinkId)
|
||||
end
|
||||
end
|
||||
@@ -737,7 +750,7 @@ local function FindCorrectRibsLead( dPar, nCrv, nCrvOffs, bLeadInvert, dLeadLen,
|
||||
local bOnlyOneCurve = not bClosed and ( dPar < GEO.EPS_SMALL or abs( dPar - dParEnd) < GEO.EPS_SMALL)
|
||||
|
||||
local nMainCrv = nCrvOffs -- curva preferita da utilizzare per lead in
|
||||
local nOtherCrv -- altra possibile curva da ultizzare nel caso nMainCrv non sia adatta
|
||||
local nOtherCrv -- altra possibile curva da ultizzare nel caso nMainCrv non sia adatta
|
||||
|
||||
if bClosed then
|
||||
EgtChangeClosedCurveStart( nCrvOffs, dPar)
|
||||
@@ -796,7 +809,7 @@ local function FindCorrectRibsLead( dPar, nCrv, nCrvOffs, bLeadInvert, dLeadLen,
|
||||
end
|
||||
else
|
||||
EgtErase( nLeadId)
|
||||
bInvert = not bInvert
|
||||
bInvert = not bInvert
|
||||
return nil
|
||||
end
|
||||
-- aggiorno parametro bInvert
|
||||
@@ -808,7 +821,7 @@ end
|
||||
|
||||
--------------------------------------------------------------------
|
||||
local function AddRibsLeadIn( nCrv, nLoopsGrp, dStrand, vtSlicing, nGrpTmp)
|
||||
|
||||
|
||||
local dLILen = EgtGetInfo( nCrv, KEY_RIBS_LEAD_IN_LEN, 'd')
|
||||
local bLIInvert = EgtGetInfo( nCrv, KEY_RIBS_LEAD_IN_INVERT, 'b')
|
||||
|
||||
@@ -817,7 +830,7 @@ local function AddRibsLeadIn( nCrv, nLoopsGrp, dStrand, vtSlicing, nGrpTmp)
|
||||
-- recupero la curva di offset su cui calcolare leadin
|
||||
local ptS = EgtSP( nCrv)
|
||||
local nCrvOffs = EgtGetFirstInGroup( nLoopsGrp)
|
||||
while nCrvOffs do
|
||||
while nCrvOffs do
|
||||
local dParS = EgtCurveParamAtPoint( nCrvOffs, ptS)
|
||||
if dParS then
|
||||
|
||||
@@ -947,7 +960,7 @@ local function CalcRibsToolPath( nRibsGrp, nTpathGrpId, LayerParams, dCorrZ)
|
||||
-- aggiungo le costolature nel toolpath
|
||||
local vEntIds = EgtGetNameInGroup( nRibsGrp, RIBS_CRV .. '*')
|
||||
for i = 1, #vEntIds do
|
||||
-- copio entità nel gruppo toolpath
|
||||
-- copio entità nel gruppo toolpath
|
||||
local nNewEntId = EgtCopyGlob( vEntIds[i], nTpathGrpId, GDB_IN.LAST_SON)
|
||||
-- correggo posizione in Z ( per essere sicuri di appoggiare sul piano)
|
||||
EgtMove( nNewEntId, dCorrZ * Z_AX(), GDB_RT.GLOB)
|
||||
@@ -957,20 +970,21 @@ local function CalcRibsToolPath( nRibsGrp, nTpathGrpId, LayerParams, dCorrZ)
|
||||
EgtSetColor( nNewEntId, EgtStdColor('MAROON'))
|
||||
end
|
||||
|
||||
-- estraggo i contorni di tutte le superfici di offset
|
||||
local nLoopGrp = EgtGroup( nRibsGrp)
|
||||
local nSrfId = EgtGetFirstNameInGroup( nRibsGrp, TOT_SHELL_TRIM_SURF)
|
||||
while nSrfId do
|
||||
EgtMove( nSrfId, dCorrZ * Z_AX(), GDB_RT.GLOB)
|
||||
-- mi sposto dell'altezza layer
|
||||
EgtMove( nSrfId, LayerParams.dLayHeight * LayerParams.vtSlicing, GDB_RT.GLOB)
|
||||
local nChunksNbr = EgtSurfFrChunkCount( nSrfId)
|
||||
for i = 0, nChunksNbr do
|
||||
local nRes, nCnt = EgtExtractSurfFrChunkLoops( nSrfId, i, nLoopGrp)
|
||||
end
|
||||
nSrfId = EgtGetNextName( nSrfId, TOT_SHELL_TRIM_SURF)
|
||||
-- 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], dCorrZ * Z_AX(), GDB_RT.GLOB)
|
||||
EgtMove( vLoopIds[i], LayerParams.dLayHeight * LayerParams.vtSlicing, GDB_RT.GLOB)
|
||||
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], dCorrZ * Z_AX(), GDB_RT.GLOB)
|
||||
EgtMove( vSrfIds[i], LayerParams.dLayHeight * LayerParams.vtSlicing, GDB_RT.GLOB)
|
||||
end
|
||||
|
||||
-- recupero i gruppi delle costolature
|
||||
local tabRibs = {}
|
||||
local nFirst = EgtGetFirstNameInGroup( nTpathGrpId, RIBS_CRV .. '*')
|
||||
@@ -981,82 +995,35 @@ local function CalcRibsToolPath( nRibsGrp, nTpathGrpId, LayerParams, dCorrZ)
|
||||
nFirst = EgtGetNextName( vIds[#vIds], RIBS_CRV .. '*')
|
||||
end
|
||||
|
||||
local bInters = EgtGetInfo( nRibsGrp, KEY_RIBS_INTERS, 'b') or false
|
||||
local bAllTwoStrands = EgtGetInfo( nRibsGrp, KEY_RIBS_TWO_STRANDS, 'b') or false
|
||||
local bSpecialCase = bInters and bAllTwoStrands
|
||||
local bSwap = false
|
||||
|
||||
local bInvert = false -- curve già orientate in CalcPaths
|
||||
if not bSpecialCase then
|
||||
for i = 1, #tabRibs do
|
||||
local nInfo = EgtGetInfo( tabRibs[i][1], KEY_SPLIT_RIB, 'i')
|
||||
local nShellsNbr = EgtGetInfo( tabRibs[i][1], KEY_RIBS_SHELLS_NBR, 'i')
|
||||
|
||||
if i > 1 then
|
||||
-- verifico se link
|
||||
local bPrevLink = EgtGetInfo( tabRibs[i-1][1], KEY_RIBS_LINK, 'b')
|
||||
local bCurrLink = EgtGetInfo( tabRibs[i][1], KEY_RIBS_LINK, 'b')
|
||||
if bPrevLink and bCurrLink then
|
||||
nPrevType = EgtGetInfo( tabRibs[i-1][1], KEY_RIBS_TYPE, 'i')
|
||||
nCurrType = EgtGetInfo( tabRibs[i][1], KEY_RIBS_TYPE, 'i')
|
||||
-- se cambio tipologia di setto, l'orientamento della curva è già corretto
|
||||
if nPrevType ~= nCurrType then
|
||||
bInvert = false
|
||||
elseif not nInfo then
|
||||
-- aggiorno bInvert per il gruppo di costolature corrente in modo da essere coerente con il collegamento
|
||||
local nPrevShellsNbr = EgtGetInfo( tabRibs[i-1][1], KEY_RIBS_SHELLS_NBR, 'i')
|
||||
if nPrevShellsNbr % 2 == 1 then
|
||||
bInvert = not bInvert
|
||||
end
|
||||
end
|
||||
else
|
||||
bInvert = false
|
||||
end
|
||||
end
|
||||
|
||||
if nShellsNbr == 1 and nInfo and bInvert then
|
||||
-- se inverto direzione di costolature divise allora devo invertirne anche l'ordine di realizzazione
|
||||
bSwap = true
|
||||
EgtRelocateGlob( tabRibs[i][1], tabRibs[i-1][1], GDB_IN.BEFORE)
|
||||
end
|
||||
|
||||
-- oriento tutte le passate relative ad una stessa costolatura
|
||||
if not EgtCurveIsClosed( tabRibs[i][1]) then
|
||||
for j = 1, #tabRibs[i] do
|
||||
if ( bInvert and j % 2 == 1) or ( not bInvert and j % 2 == 0) then
|
||||
EgtInvertCurve( tabRibs[i][j])
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
local bSpecialCase = EgtGetInfo( nRibsGrp, KEY_RIBS_SPECIAL_CASE, 'b') or false
|
||||
|
||||
-- Link
|
||||
-- se modifiche nell'ordine ricalcolo i gruppi di costolature
|
||||
if bSwap then
|
||||
tabRibs = {}
|
||||
nFirst = EgtGetFirstNameInGroup( nTpathGrpId, RIBS_CRV .. '*')
|
||||
while nFirst do
|
||||
local sName = EgtGetName( nFirst)
|
||||
local vIds = EgtGetNameInGroup( nTpathGrpId, sName)
|
||||
table.insert( tabRibs, vIds)
|
||||
nFirst = EgtGetNextName( vIds[#vIds], RIBS_CRV .. '*')
|
||||
end
|
||||
end
|
||||
|
||||
-- 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
|
||||
CalcRibsLink( tabRibs[i][j], tabRibs[i][j + 1], nLoopGrp, LayerParams.dStrand, true, LayerParams.vtSlicing, nGrpTmp)
|
||||
if not bSpecialCase then
|
||||
-- creo link fittizio per eliminare tratto corrispondente sulla curva di offset
|
||||
local nOrig1 = EgtGetInfo( tabRibs[i][j], KEY_ORIGINAL_RIB, 'i')
|
||||
local nOrig2 = EgtGetInfo( tabRibs[i][j + 1], KEY_ORIGINAL_RIB, 'i')
|
||||
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)
|
||||
|
||||
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
|
||||
|
||||
-- verifico se necessario collegamento tra primo e ultimo setto del gruppo
|
||||
local bOriginalClosed = EgtGetInfo( tabRibs[i][1], KEY_ORIGINAL_RIB_CLOSED, 'b') or false
|
||||
if bOriginalClosed then
|
||||
CalcRibsLink( tabRibs[i][#tabRibs[i]], tabRibs[i][1], nLoopGrp, LayerParams.dStrand, false, LayerParams.vtSlicing, nGrpTmp)
|
||||
end
|
||||
|
||||
if bSpecialCase then
|
||||
local nFakeLink = CalcRibsLink( tabRibs[i][#tabRibs[i]], tabRibs[i][1], nLoopGrp, LayerParams.dStrand, false, LayerParams.vtSlicing, nGrpTmp)
|
||||
EgtErase( nFakeLink)
|
||||
|
||||
Reference in New Issue
Block a user