3dPrinting :

- riorganizzato CalcSlices per MultiPlanar
- nello spiral vase MultiPlanar aggiunto layer extra finale a quota costante.
This commit is contained in:
SaraP
2026-02-13 16:23:09 +01:00
parent 9df7f78665
commit 6a60cd2b5e
4 changed files with 299 additions and 201 deletions
+50 -11
View File
@@ -2024,23 +2024,25 @@ local function SpiralVaseFull( vLayIds, LayerParams)
-- la differenza in altezza tra due layers viene distribuita uniformemente lungo tutto il percorso
-- la continuità tra i layers viene risolta sul layer corrente ( uniformemente su tutto il tratto o solo nella parte iniziale di lunghezza dSpiralVaseInterpLen)
-- gestione speciale dei primi layers per gestione dell'altezza e feed
-- nel caso di slicing multiplanare viene realizzato un layer extra ( uguale all'ultimo) alla quota finale del pezzo
local nOldId, nOldPathId
local nRealLayer = 1
local nSlicingType = EgtGetInfo( s_nPartId, KEY_SLICING_TYPE, 'i')
-- copio ultimo layer
if nSlicingType ~= SLICING_TYPE.DEG45_X and nSlicingType ~= SLICING_TYPE.DEG45_Y then
if nSlicingType ~= SLICING_TYPE.MULTIPLANAR and nSlicingType ~= SLICING_TYPE.DEG45_X and nSlicingType ~= SLICING_TYPE.DEG45_Y then
local nNewLay = EgtCopyGlob( vLayIds[#vLayIds], vLayIds[#vLayIds], GDB_IN.AFTER)
table.insert( vLayIds, nNewLay)
-- aggiorno nome e numero slice
local nSliceNbr = EgtGetInfo( nNewLay, KEY_SLICE_NBR, 'i') + 1
EgtSetName( nNewLay, SLICE_LAYER .. EgtNumToString( nSliceNbr))
EgtSetInfo( nNewLay, KEY_SLICE_NBR, nSliceNbr)
-- porto alla nuova quota
EgtMove( nNewLay, LayerParams.dLayHeight * LayerParams.vtSlicing, GDB_RT.GLOB)
-- aggiorno nome e info
local sOldIdx = string.sub( EgtGetName( vLayIds[#vLayIds]), 6)
local nNewIdx = tonumber( sOldIdx) + 1
EgtSetName( nNewLay, SLICE_LAYER .. EgtNumToString( nNewIdx))
EgtSetInfo( nNewLay, KEY_SLICE_NBR, nNewIdx)
local dZOld = EgtGetInfo( vLayIds[#vLayIds], KEY_SLICE_Z, 'd') or 0
EgtSetInfo( nNewLay, KEY_SLICE_Z, dZOld + LayerParams.dLayHeight)
local ptSlice = EgtGetInfo( nNewLay, KEY_SLICE_POS, 'p')
ptSlice = ptSlice + LayerParams.dLayHeight * LayerParams.vtSlicing
EgtSetInfo( nNewLay, KEY_SLICE_POS, ptSlice)
end
-- ciclo sui layer
@@ -2237,12 +2239,48 @@ local function SpiralVaseFull( vLayIds, LayerParams)
nRealLayer = nRealLayer + 1
end
if EgtProcessEvents( EgtIf( PRINT, 300, 0) + nIdx / #vLayIds * 100, 0) == 1 then
EgtDraw()
return false
end
end
-- se slicing multiplanare creo un un layer extra piano alla quota finale
if nSlicingType == SLICING_TYPE.MULTIPLANAR then
local nLastLay = EgtCopyGlob( vLayIds[#vLayIds], vLayIds[#vLayIds], GDB_IN.AFTER)
-- aggiorno nome e numero slice
local nSliceNbr = EgtGetInfo( nLastLay, KEY_SLICE_NBR, 'i') + 1
EgtSetName( nLastLay, SLICE_LAYER .. EgtNumToString( nSliceNbr))
EgtSetInfo( nLastLay, KEY_SLICE_NBR, nSliceNbr)
-- creo la curva di toolpath alla quota finale
local nCrvGrpId = EgtGetFirstNameInGroup( nLastLay, CONTOUR_GRP.."*")
local nPathGrpId = EgtGetFirstNameInGroup( nCrvGrpId, PATH_GRP)
local nTpathGrpId = EgtGetFirstNameInGroup( nCrvGrpId, TOOLPATH_GRP)
EgtEmptyGroup( nTpathGrpId)
local nId = EgtCopyGlob( EgtGetFirstInGroup( nPathGrpId), nTpathGrpId)
local vtSlicing = EgtGetInfo( nLastLay, KEY_SLICE_DIR, 'v')
EgtMove( nId, LayerParams.dLayHeight * vtSlicing, GDB_RT.GLOB)
local ptS = EgtEP( nOldId, GDB_ID.ROOT)
EgtChangeClosedCurveStartPoint( nId, ptS, GDB_RT.GLOB)
EgtModifyCurveExtrusion( nId, LayerParams.vtSlicing, GDB_RT.GLOB)
EgtSetInfo( nId, KEY_CRV_STRAND, LayerParams.dStrand)
if LayerParams.bInvert then
EgtInvertCurve( nId)
EgtSetInfo( nId, KEY_INVERTED_CRV, 1)
end
EgtSetColor( nId, EgtStdColor('GRAY'))
-- approssimo
EgtApproxCurve( nId, GDB_CA.ARCS, s_dApproxTol)
if LayerParams.bLinearApprox then
EgtApproxCurve( nId, GDB_CA.LINES, LayerParams.dLinearApproxTol)
end
if EgtCurveIsClosed( nId) then
EgtChangeClosedCurveStartPoint( nId, ptS, GDB_RT.GLOB)
end
end
return true
end
@@ -2427,8 +2465,9 @@ local function SpiralVase( vLayIds, LayerParams)
-- calcolo il box dei percorsi
local b3Tot = BBox3d()
local nLastTPath
for i = 1, #vLayIds do
local vCrvGrpIds = EgtGetNameInGroup( vLayIds[i], CONTOUR_GRP.."*")
local vLayers = EgtGetNameInGroup( s_nPartId, SLICE_LAYER .. '*')
for i = 1, #vLayers do
local vCrvGrpIds = EgtGetNameInGroup( vLayers[i], CONTOUR_GRP.."*")
local nTpathGrpId = EgtGetFirstNameInGroup( vCrvGrpIds[1], TOOLPATH_GRP)
nLastTPath = EgtGetLastInGroup( nTpathGrpId)
local b3Box = ComputeToolPathBox( nTpathGrpId)