3dPrinting :
- riorganizzato CalcSlices per MultiPlanar - nello spiral vase MultiPlanar aggiunto layer extra finale a quota costante.
This commit is contained in:
+50
-11
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user