3dPrinting :
- ottimizzazioni nella fase di slicing - migliorata la funzione che chiude buchi nei setti.
This commit is contained in:
+44
-45
@@ -702,51 +702,50 @@ end
|
||||
--------------------------------------------------------------------
|
||||
local function VerifyRibsHoles( vIds)
|
||||
|
||||
-- raggruppo i setti per nome
|
||||
local tabRibs = { { vIds[1]}}
|
||||
local sPrevName = EgtGetName( vIds[1])
|
||||
local i = 2
|
||||
while i <= #vIds do
|
||||
|
||||
local bAdd = false
|
||||
local sCurrName = EgtGetName( vIds[i])
|
||||
-- se derivano dallo stesso setto verifico se possono essere uniti
|
||||
if sCurrName == sPrevName then
|
||||
local dStrand = EgtGetInfo( vIds[i], KEY_RIBS_STRAND, 'd')
|
||||
local ptS1 = EgtSP( vIds[i-1])
|
||||
local ptE1 = EgtEP( vIds[i-1])
|
||||
local ptS2 = EgtSP( vIds[i])
|
||||
local ptE2 = EgtEP( vIds[i])
|
||||
|
||||
local bAdd1 = dist( ptS1, ptE2) < dStrand + 10 * GEO.EPS_SMALL
|
||||
local bAdd2 = dist( ptE1, ptS2) < dStrand + 10 * GEO.EPS_SMALL
|
||||
bAdd = bAdd1 or bAdd2
|
||||
|
||||
if bAdd1 and bAdd2 then
|
||||
-- da unire in setto chiuso
|
||||
EgtAddCurveCompoLine( vIds[i-1], ptE2, false)
|
||||
EgtAddCurveCompoLine( vIds[i-1], ptS2)
|
||||
EgtAddCurveCompoCurve( vIds[i-1], vIds[i])
|
||||
table.remove( vIds, i) -- rimuovo il setto dalla tabella
|
||||
|
||||
elseif bAdd2 then
|
||||
-- unisco il secondo tratto al primo
|
||||
EgtAddCurveCompoLine( vIds[i-1], ptS2)
|
||||
EgtAddCurveCompoCurve( vIds[i-1], vIds[i])
|
||||
table.remove( vIds, i) -- rimuovo il setto dalla tabella
|
||||
|
||||
elseif bAdd1 then
|
||||
-- unisco il primo tratto al secondo
|
||||
EgtAddCurveCompoLine( vIds[i], ptS1)
|
||||
EgtAddCurveCompoCurve( vIds[i], vIds[i-1])
|
||||
table.remove( vIds, i-1) -- rimuovo il setto dalla tabella
|
||||
end
|
||||
end
|
||||
|
||||
-- aggiorno per iterazione successiva
|
||||
sPrevName = sCurrName
|
||||
if not bAdd then
|
||||
i = i + 1
|
||||
for i = 2, #vIds do
|
||||
if sPrevName == EgtGetName( vIds[i]) then
|
||||
table.insert( tabRibs[#tabRibs], vIds[i])
|
||||
else
|
||||
sPrevName = EgtGetName( vIds[i])
|
||||
table.insert( tabRibs, { vIds[i]})
|
||||
end
|
||||
end
|
||||
|
||||
-- verifico se posso concatenare le curve con lo stesso nome usando come tolleranza lo strand del setto ( se le passate si toccano non ha senso tenerle separate)
|
||||
local nGrp = EgtGetParent( vIds[1])
|
||||
for i = 1, #tabRibs do
|
||||
if #tabRibs[i] > 1 then
|
||||
local dStrand = EgtGetInfo( tabRibs[i][1], KEY_RIBS_STRAND, 'd')
|
||||
|
||||
-- gruppo temporaneo per il concatenamento
|
||||
local nGrpTmp = EgtGroup( nGrp)
|
||||
for j = 1, #tabRibs[i] do
|
||||
EgtRelocateGlob( tabRibs[i][j], nGrpTmp)
|
||||
end
|
||||
EgtReorderCurvesInGroup( nGrpTmp, EgtSP( tabRibs[i][1], GDB_ID.ROOT), GDB_RT.GLOB, dStrand)
|
||||
|
||||
-- recupero le curve e le concateno se possibile
|
||||
local vNewIds = EgtGetAllInGroup( nGrpTmp)
|
||||
local nCurrId = vNewIds[1]
|
||||
EgtRelocateGlob( nCurrId, nGrp)
|
||||
for j = 2, #vNewIds do
|
||||
if dist( EgtEP( nCurrId, GDB_ID.ROOT), EgtSP( vNewIds[j], GDB_ID.ROOT)) < dStrand + GEO.EPS_SMALL then
|
||||
EgtAddCurveCompoLine( nCurrId, EgtSP( vNewIds[j], GDB_ID.ROOT), GDB_RT.GLOB)
|
||||
EgtAddCurveCompoCurve( nCurrId, vNewIds[j])
|
||||
else
|
||||
nCurrId = vNewIds[j]
|
||||
EgtRelocateGlob( nCurrId, nGrp)
|
||||
end
|
||||
end
|
||||
EgtErase( nGrpTmp)
|
||||
end
|
||||
end
|
||||
|
||||
-- aggiorno gli id
|
||||
return EgtGetAllInGroup( nGrp)
|
||||
end
|
||||
|
||||
--------------------------------------------------------------------
|
||||
@@ -2369,7 +2368,7 @@ local function CalcRibsPaths( nSliceGrp, nRibsGrp, LayerParams, vPtStart, bIgnor
|
||||
end
|
||||
|
||||
-- verifico se posso ignorare eventuali buchi nei setti
|
||||
VerifyRibsHoles( vOrigRibs)
|
||||
vOrigRibs = VerifyRibsHoles( vOrigRibs)
|
||||
|
||||
local nTotSrfInt = GDB_ID.NULL
|
||||
local nTotSrfExt = GDB_ID.NULL
|
||||
@@ -2912,7 +2911,7 @@ end
|
||||
local function PrepareRibsForMergeWithShells( vOrigRibs, nGrp, dStrand, dOverlap, bInvertRibsOrder)
|
||||
|
||||
-- verifico se sono presenti buchi che possono essere chiusi
|
||||
VerifyRibsHoles( vOrigRibs)
|
||||
vOrigRibs = VerifyRibsHoles( vOrigRibs)
|
||||
|
||||
-- trim grossolano dei setti
|
||||
local nSrfCoarseTrim = EgtGetFirstNameInGroup( nGrp, COARSE_TRIM_SURF)
|
||||
@@ -3371,7 +3370,7 @@ local function CalcRibsMergedShells( nSlicedRibsGrp, nPathGrp, LayerParams, vPtS
|
||||
end
|
||||
end
|
||||
if #vOrigRibs == 0 then return true end
|
||||
|
||||
|
||||
-- recupero le shell da unire ai setti
|
||||
local nLast = EgtGetLastInGroup( nPathGrp) or GDB_ID.NULL
|
||||
local nShellType = EgtGetInfo( nLast, KEY_TYPE, 'i')
|
||||
|
||||
Reference in New Issue
Block a user