3dPrinting :

- ottimizzazioni nella fase di slicing
- migliorata la funzione che chiude buchi nei setti.
This commit is contained in:
SaraP
2026-05-12 15:09:52 +02:00
parent 31be25313a
commit 2d78f4d348
2 changed files with 306 additions and 284 deletions
+44 -45
View File
@@ -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')