3dPrinting 3.1g1 :
- gestione di più solidi da stampare contemporaneamente nel gruppo "PrintSolid".
This commit is contained in:
+11
-12
@@ -27,7 +27,9 @@ local function GetLayerParamsForSolidCalc( nPartId)
|
||||
LayerParams.vtSlicing = EgtGetInfo( nPartId, KEY_SLICE_DIR, 'v') or EgtGetInfo( nPartId, 'SlicingDir', 'v')
|
||||
LayerParams.dStrand = EgtGetInfo( nPartId, KEY_STRAND, 'd')
|
||||
LayerParams.vtCorr = EgtGetInfo( nPartId, KEY_MOVED_PART2, 'v') or V_NULL()
|
||||
LayerParams.nFloorNbr = EgtGetInfo( s_nPartId, KEY_FLOOR_NBR, 'i') or 0
|
||||
local nFloorNbr = EgtGetInfo( s_nPartId, KEY_FLOOR_NBR, 'i') or 0
|
||||
local nFirstSolidLay = EgtGetInfo( s_nPartId, KEY_FIRST_SOLID_LAY, 'i') or 1
|
||||
LayerParams.nFirstSpiralLay = nFloorNbr + nFirstSolidLay
|
||||
return LayerParams
|
||||
end
|
||||
|
||||
@@ -643,7 +645,7 @@ local function CreateFullSpiralVaseMultiPlanarSolids( vIds, nSolidGrpId, LayerPa
|
||||
local ptProj = ptVertex + dDistCrv * LayerParams.vtSlicing
|
||||
local dDistPlanePrev = ( ptProj - ptSlicingPrev) * vtSlicingPrev / dCosAng
|
||||
local dDeltaPos
|
||||
if nSliceNbr == 2 + LayerParams.nFloorNbr and dCurrLen < 0.5 * dLen then
|
||||
if nSliceNbr == LayerParams.nFirstSpiralLay + 1 and dCurrLen < 0.5 * dLen then
|
||||
dDeltaPos = 0.5 * dDistPlanePrev
|
||||
else
|
||||
dDeltaPos = dDistPlanePrev * ( dLen - dCurrLen) / dLen
|
||||
@@ -651,7 +653,7 @@ local function CreateFullSpiralVaseMultiPlanarSolids( vIds, nSolidGrpId, LayerPa
|
||||
|
||||
-- 2) per calcolare la vera altezza del solido calcolo la distanza dal toolpath precedente guardando il punto di riferimento sul percorso corrente
|
||||
local dNewH
|
||||
if nSliceNbr == 2 + LayerParams.nFloorNbr then
|
||||
if nSliceNbr == LayerParams.nFirstSpiralLay + 1 then
|
||||
-- il primo layer è ad altezza costante quindi è semplice distanza dal piano precedente lungo vtSlicing
|
||||
dNewH = ( ptProj - ptSlicingPrev) * vtSlicingPrev / dCosAng - dDeltaPos
|
||||
else
|
||||
@@ -812,7 +814,6 @@ function RunCalcSolids.Exec()
|
||||
s_dMultiPlanarH = min( dMaxFactor, 5) * LayerParams.dLayHeight
|
||||
end
|
||||
|
||||
local bFirst = true
|
||||
for nIdx = 1, #vLayIds do
|
||||
-- flag di interruzione perchè trovati solidi già ok
|
||||
local bSolidsOk = false
|
||||
@@ -843,13 +844,13 @@ function RunCalcSolids.Exec()
|
||||
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')
|
||||
|
||||
if LayerParams.bSpiralVase and nIdx > LayerParams.nFloorNbr then
|
||||
if LayerParams.bSpiralVase and nIdx >= LayerParams.nFirstSpiralLay then
|
||||
local dTransitionLen = EgtGetInfo( nPartId, KEY_SPIRAL_VASE_LEN, 'd') or 0
|
||||
-- a) spiral vase completo ( con transizione in altezza su tutto il layer)
|
||||
if dTransitionLen < GEO.EPS_SMALL then
|
||||
if nIdx == LayerParams.nFloorNbr + 1 then
|
||||
if nIdx == LayerParams.nFirstSpiralLay then
|
||||
-- il primo layer va gestito come uno spiral vase con transizione parziale ( curva a quota costante e ultimo tratto che si alza)
|
||||
CreatePartialSpiralVaseMultiPlanarSolids( vIds, nSolidGrpId, LayerParams, vLayIds[nIdx], bFirst)
|
||||
CreatePartialSpiralVaseMultiPlanarSolids( vIds, nSolidGrpId, LayerParams, vLayIds[nIdx], nIdx == 1)
|
||||
elseif nIdx == #vLayIds then
|
||||
-- gestione speciale per lead out e coasting
|
||||
CreateFullSpiralVaseMultiPlanarSolidsLastLayer( vIds, nSolidGrpId, LayerParams, vLayIds[nIdx])
|
||||
@@ -863,13 +864,13 @@ function RunCalcSolids.Exec()
|
||||
-- ultimo layer è un multiplanare standard perchè non ha tratto finale che si alza
|
||||
CreateMultiPlanarSolids( vIds, nSolidGrpId, LayerParams, vLayIds[nIdx], false)
|
||||
else
|
||||
CreatePartialSpiralVaseMultiPlanarSolids( vIds, nSolidGrpId, LayerParams, vLayIds[nIdx], bFirst)
|
||||
CreatePartialSpiralVaseMultiPlanarSolids( vIds, nSolidGrpId, LayerParams, vLayIds[nIdx], nIdx == 1)
|
||||
end
|
||||
end
|
||||
|
||||
-- c) multiplanare standard
|
||||
else
|
||||
CreateMultiPlanarSolids( vIds, nSolidGrpId, LayerParams, vLayIds[nIdx], bFirst)
|
||||
CreateMultiPlanarSolids( vIds, nSolidGrpId, LayerParams, vLayIds[nIdx], nIdx == 1)
|
||||
end
|
||||
|
||||
-- slicing standard spiral vase
|
||||
@@ -916,14 +917,12 @@ function RunCalcSolids.Exec()
|
||||
CreateSolidFromCurve( vIds[i], nSolidGrpId, LayerParams, nSliceNbr)
|
||||
end
|
||||
end
|
||||
bFirst = false
|
||||
end
|
||||
else
|
||||
bSolidsOk = true
|
||||
break
|
||||
end
|
||||
|
||||
--passo al gruppo di contorni successivo
|
||||
-- passo al gruppo di contorni successivo
|
||||
nCrvGrpId = EgtGetNextName( nCrvGrpId, CONTOUR_GRP.."*") or GDB_ID.NULL
|
||||
end
|
||||
if bSolidsOk then
|
||||
|
||||
Reference in New Issue
Block a user