3dPrinting :

- slicing multiplanare orizzontale
- sistemata distanza su spina per slicing multiplanare 45°.
This commit is contained in:
SaraP
2026-04-15 09:34:33 +02:00
parent 5b4c136531
commit 1ca6efa10a
6 changed files with 29 additions and 21 deletions
+9 -7
View File
@@ -100,7 +100,7 @@ local function AddZCorrection( LayerParams)
local dCorrZ = 0
-- se slicing multiplanare vtSlicing cambia ad ogni layer quindi la correzione deve essere calcolata sul singolo layer
if nSlicingType == SLICING_TYPE.MULTIPLANAR or nSlicingType == SLICING_TYPE.MULTIPLANAR_DEG45 then
if nSlicingType == SLICING_TYPE.MULTIPLANAR or nSlicingType == SLICING_TYPE.MULTIPLANAR_DEG45 or nSlicingType == SLICING_TYPE.MULTIPLANAR_HOR then
for i = 1, #vLayIds do
-- calcolo i valori legati a vtSlicing per il layer corrente
@@ -111,10 +111,12 @@ local function AddZCorrection( LayerParams)
if not b3Layer:isEmpty() then
-- altezza necessaria per lo strand
local dHStrand = 0
-- nel caso multiplanar con partenza verticale l'altezza necessaria per lo strand non serve perchè l'altezza viene adattata lungo il percorso
if nSlicingType == SLICING_TYPE.MULTIPLANAR_DEG45 then
-- nel caso multiplanar con partenza verticale l'altezza necessaria per lo strand non serve perchè l'altezza viene adattata lungo il percorso
-- nel caso multiplanar 45° si considera come altezza strand quella settata nei parametri visto che varia lungo il percorso ( euristico)
dHStrand = 0.5 * LayerParams.dStrand * dNxy + LayerParams.dLayHeight * dNz
elseif nSlicingType == SLICING_TYPE.MULTIPLANAR_HOR then
dHStrand = 0.5 * LayerParams.dStrand
end
-- altezza necessaria per il tool
local dHTool = LayerParams.dTDiam / 2 * dNxy
@@ -158,13 +160,13 @@ local function AddZCorrection( LayerParams)
-- 2) correzione per i wipe
-- altezza minima necessaria per i wipe. Se slicing multiplanare l'altezza minima per il wipe cambia ad ogni layer, altrimenti è un valore comune
local dHMinWipe
if nSlicingType ~= SLICING_TYPE.MULTIPLANAR and nSlicingType ~= SLICING_TYPE.MULTIPLANAR_DEG45 then
if nSlicingType ~= SLICING_TYPE.MULTIPLANAR and nSlicingType ~= SLICING_TYPE.MULTIPLANAR_DEG45 and nSlicingType ~= SLICING_TYPE.MULTIPLANAR_HOR then
local dNxy = sqrt( LayerParams.vtSlicing:getX() * LayerParams.vtSlicing:getX() + LayerParams.vtSlicing:getY() * LayerParams.vtSlicing:getY())
dHMinWipe = LayerParams.dTDiam / 2 * dNxy + max( dHBox, 0) + s_dHSafeWipe
end
for i = 1, #vLayIds do
if nSlicingType == SLICING_TYPE.MULTIPLANAR or nSlicingType == SLICING_TYPE.MULTIPLANAR_DEG45 then
if nSlicingType == SLICING_TYPE.MULTIPLANAR or nSlicingType == SLICING_TYPE.MULTIPLANAR_DEG45 or nSlicingType == SLICING_TYPE.MULTIPLANAR_HOR then
local vtSlicing = EgtGetInfo( vLayIds[i], KEY_SLICE_DIR, 'v')
local dNxy = sqrt( vtSlicing:getX() * vtSlicing:getX() + vtSlicing:getY() * vtSlicing:getY())
dHMinWipe = LayerParams.dTDiam / 2 * dNxy + max( dHBox, 0) + s_dHSafeWipe
@@ -2341,7 +2343,7 @@ local function SpiralVaseFull( vLayIds, LayerParams)
-- gestione speciale dei primi layers per gestione dell'altezza e feed
local nSlicingType = EgtGetInfo( s_nPartId, KEY_SLICING_TYPE, 'i')
if nSlicingType == SLICING_TYPE.MULTIPLANAR or nSlicingType == SLICING_TYPE.MULTIPLANAR_DEG45 then
if nSlicingType == SLICING_TYPE.MULTIPLANAR or nSlicingType == SLICING_TYPE.MULTIPLANAR_DEG45 or nSlicingType == SLICING_TYPE.MULTIPLANAR_HOR then
return SpiralVaseFullMultiPlanar( vLayIds, LayerParams)
end
@@ -2757,7 +2759,7 @@ local function SpiralVasePartial( vLayIds, LayerParams)
-- la continuità tra i layers viene risolta sul tratto finale del layer percedente
local nSlicingType = EgtGetInfo( s_nPartId, KEY_SLICING_TYPE, 'i')
if nSlicingType == SLICING_TYPE.MULTIPLANAR or nSlicingType == SLICING_TYPE.MULTIPLANAR_DEG45 then
if nSlicingType == SLICING_TYPE.MULTIPLANAR or nSlicingType == SLICING_TYPE.MULTIPLANAR_DEG45 or nSlicingType == SLICING_TYPE.MULTIPLANAR_HOR then
return SpiralVasePartialMultiPlanar( vLayIds, LayerParams)
end
@@ -2968,7 +2970,7 @@ function CalcToolPath.Exec( nPartId)
s_nCurrIdx = nIdx
if nSlicingType == SLICING_TYPE.MULTIPLANAR or nSlicingType == SLICING_TYPE.MULTIPLANAR_DEG45 then
if nSlicingType == SLICING_TYPE.MULTIPLANAR or nSlicingType == SLICING_TYPE.MULTIPLANAR_DEG45 or nSlicingType == SLICING_TYPE.MULTIPLANAR_HOR then
LayerParams.vtSlicing = EgtGetInfo( vLayIds[nIdx], KEY_SLICE_DIR, 'v')
end