3dPrinting :

- modifica della lunghezza dei wipe che entrano nella tavola mantenendo la direzione scelta.
This commit is contained in:
SaraP
2023-11-06 09:43:57 +01:00
parent 3cdb99f795
commit 6c2e16a13e
+28 -23
View File
@@ -15,7 +15,6 @@ local AMD = require( 'AddManData')
---------------------------------------------------------------------
local s_nPartId
local s_nDefaultWipeAng = -90 -- angolo = 0° per wipe significa che esce ortogonalmente alla direzione del movimento
local s_dHMin
---------------------------------------------------------------------
local function GetLayerParamsForToolPathCalc()
@@ -83,7 +82,7 @@ local function AddZCorrection( b3Box, LayerParams)
local dHTool = LayerParams.dTDiam / 2 * dNxy
-- altezza disponibile
local dHBox = EgtGetInfo( s_nPartId, KEY_BOX_MIN_Z, 'i') or 0
local dHDisp = b3Box:getMin():getZ() - dHBox
local dHDisp = b3Box:getMin():getZ() - max( dHBox, 0)
local dCorrZ = max( 0, max( dHStrand, dHTool) - dHDisp)
@@ -95,21 +94,32 @@ local function AddZCorrection( b3Box, LayerParams)
local nFrameId = EgtGetFirstNameInGroup( s_nPartId, LAY_FRAME)
EgtMove( nFrameId, - vtMove, GDB_RT.GLOB)
end
------------------------------------------------------------------
local function FindWipeEndPoint( ptS, vtDir, dLen, vtSlicing)
local ptE = ptS + vtDir * dLen
-- verifico soddisfi altezza minima per non entrare nella tavola
local k = 1
while ptE:getZ() < s_dHMin + GEO.EPS_SMALL and k < 36 do
vtDir:rotate( vtSlicing, 10)
ptE = ptS + vtDir * dLen
k = k + 1
-- correzione per i wipe
-- altezza minima necessaria per i wipe
local dHMinWipe = LayerParams.dTDiam / 2 * dNxy + max( dHBox, 0)
local vLayIds = EgtGetNameInGroup( s_nPartId, SLICE_LAYER.."*")
for i = 1, #vLayIds do
local vCrvGrps = EgtGetNameInGroup( vLayIds[i], CONTOUR_GRP.."*")
for j = 1, #vCrvGrps do
local nTPath = EgtGetFirstNameInGroup( vCrvGrps[j], TOOLPATH_GRP)
if nTPath then
local vIds = EgtGetAllInGroup( nTPath)
for k = 1, #vIds do
-- se wipe verifico se ha lunghezza sensata per non finire nella tavola
if EgtGetInfo( vIds[k], KEY_TYPE, 'i') == TYPE.WIPE then
local dLen = EgtCurveLength( vIds[k])
local vtDir = EgtSV( vIds[k], GDB_ID.ROOT)
local ptE = EgtEP( vIds[k], GDB_ID.ROOT)
if ptE:getZ() < dHMinWipe then
-- modifico la lunghezza per non finire nella tavola
local dDiffLen = ( dHMinWipe - ptE:getZ()) / vtDir:getZ()
EgtTrimCurveEndAtLen( vIds[k], dLen - abs( dDiffLen))
end
end
end
end
end
end
return ptE
end
-------------------------------------------------------------------
@@ -452,7 +462,7 @@ local function AddRetraction( nCrvId, vtSlicing, dCoastingLen, dWipeLen, dWipeDi
end
vtDir:rotate( vtSlicing, EgtIf( bChangeSign, - dAng, dAng))
local ptE = FindWipeEndPoint( ptS, vtDir, dWipeLen, vtSlicing)
local ptE = ptS + vtDir * dWipeLen
nWipeId = EgtCurveCompoFromPoints( EgtGetParent( nCoastingId or nCrvId), {ptS, ptE}, GDB_RT.GLOB)
EgtModifyCurveExtrusion( nWipeId, vtSlicing, GDB_RT.GLOB)
EgtRelocateGlob( nWipeId, nCoastingId or nCrvId, GDB_IN.AFTER)
@@ -1663,7 +1673,7 @@ local function AddRibsLeadOut( nCrv, nLoopsGrp, vtSlicing, nGrpTmp, bForceNoSoli
local nType = EgtGetInfo( nCrv, KEY_RIBS_TYPE, 'i')
if nType == RIB_TYPE.EXTERNAL then dAng = - dAng end
vtE:rotate( vtSlicing, EgtIf( bInvert, - dAng, dAng))
local ptFinal = FindWipeEndPoint( ptE, vtE, dRibsLOWipe, vtSlicing)
local ptFinal = ptE + vtE * dRibsLOWipe
nWipe = EgtCurveCompoFromPoints( EgtGetParent( nCrv), { ptE, ptFinal}, GDB_RT.GLOB)
if nWipe then
EgtModifyCurveExtrusion( nWipe, vtSlicing, GDB_RT.GLOB)
@@ -1993,11 +2003,6 @@ function CalcToolPath.Exec( nPartId)
-- recupero i parametri per calcolo dei toolpath
local LayerParams = GetLayerParamsForToolPathCalc()
-- altezza necessaria per correzione wipe
local dNxy = sqrt( LayerParams.vtSlicing:getX() * LayerParams.vtSlicing:getX() + LayerParams.vtSlicing:getY() * LayerParams.vtSlicing:getY())
local dHBox = EgtGetInfo( s_nPartId, KEY_BOX_MIN_Z, 'i') or 0
s_dHMin = LayerParams.dTDiam / 2 * dNxy + dHBox
-- caso spiral vase
if LayerParams.bSpiralVase then
return SpiralVase( vLayIds, LayerParams)