From 6c2e16a13ed0fd7553b2e4850d30f162ddc2980c Mon Sep 17 00:00:00 2001 From: SaraP Date: Mon, 6 Nov 2023 09:43:57 +0100 Subject: [PATCH] 3dPrinting : - modifica della lunghezza dei wipe che entrano nella tavola mantenendo la direzione scelta. --- LuaLibs/CalcToolPath.lua | 51 ++++++++++++++++++++++------------------ 1 file changed, 28 insertions(+), 23 deletions(-) diff --git a/LuaLibs/CalcToolPath.lua b/LuaLibs/CalcToolPath.lua index 2b21cf8..f215c7e 100644 --- a/LuaLibs/CalcToolPath.lua +++ b/LuaLibs/CalcToolPath.lua @@ -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)