From 1da71888e7cacb57d7ff179dc315a383ffe14646 Mon Sep 17 00:00:00 2001 From: SaraP Date: Mon, 13 Mar 2023 10:56:56 +0100 Subject: [PATCH] 3dPrinting : - corretto il calcolo della correzione in z per appoggiare sulla tavola/bancaletto. --- LuaLibs/AddManData.lua | 1 + LuaLibs/CalcSlices.lua | 1 + LuaLibs/CalcToolPath.lua | 44 +++++++++++++++++++++------------------- 3 files changed, 25 insertions(+), 21 deletions(-) diff --git a/LuaLibs/AddManData.lua b/LuaLibs/AddManData.lua index 756e6e0..a2a0697 100644 --- a/LuaLibs/AddManData.lua +++ b/LuaLibs/AddManData.lua @@ -153,6 +153,7 @@ KEY_CLOSED_CRV = "ClosedCrv" KEY_ASSOCIATED_SURF = "AssociatedSurf" KEY_ASSOCIATED_CRVS = "AssociatedCrvs" KEY_HAS_SOLIDS = "Solids" +KEY_BOX_MIN_Z = "PartBoxMinZ" SLICING_TYPE = { VERTICAL = 1, diff --git a/LuaLibs/CalcSlices.lua b/LuaLibs/CalcSlices.lua index 530b06d..8d74447 100644 --- a/LuaLibs/CalcSlices.lua +++ b/LuaLibs/CalcSlices.lua @@ -36,6 +36,7 @@ local function ComputeMaxH( vIds, frSlicing, HMax, dSliceStep) local b3Box = EgtGetBBoxGlob( vIds[i], GDB_BB.STANDARD) b3BoxGlob:Add( b3Box) end + EgtSetInfo( s_nPartId, KEY_BOX_MIN_Z, b3BoxGlob:getMin():getZ()) if b3BoxGlob:getMax():getZ() < b3BoxGlob:getMin():getZ() + HMax + GEO.EPS_SMALL then return GEO.INFINITO diff --git a/LuaLibs/CalcToolPath.lua b/LuaLibs/CalcToolPath.lua index 9c71d97..ed5c3d6 100644 --- a/LuaLibs/CalcToolPath.lua +++ b/LuaLibs/CalcToolPath.lua @@ -71,9 +71,10 @@ local function AddZCorrection( b3Box, LayerParams) -- altezza necessaria per lo strand local dHStrand = 0.5 * LayerParams.dStrand * dNxy + LayerParams.dLayHeight * dNz -- altezza necessaria per il tool - local dHTool = s_dHMin + local dHTool = LayerParams.dTDiam / 2 * dNxy -- altezza disponibile - local dHDisp = b3Box:getMin():getZ() + local dHBox = EgtGetInfo( s_nPartId, KEY_BOX_MIN_Z, 'i') or 0 + local dHDisp = b3Box:getMin():getZ() - dHBox local dCorrZ = max( 0, max( dHStrand, dHTool) - dHDisp) @@ -87,6 +88,21 @@ local function AddZCorrection( b3Box, LayerParams) 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 + end + + return ptE +end + ------------------------------------------------------------------- local function AddCurvesToToolPath( vEntIds, nTpathGrpId, nOrder, bInvert, vtSlicing, dLayHeight) @@ -347,14 +363,7 @@ local function AddRetraction( nCrvId, vtSlicing, dCoastingLen, dWipeLen, dWipeDi end vtDir:rotate( vtSlicing, EgtIf( bChangeSign, - dAng, dAng)) local ptS = EgtEP( nCoastingId or nCrvId, GDB_ID.ROOT) - local ptE = ptS + vtDir * dWipeLen - -- verifico soddisfi altezza minima per dimensioni utensile - local k = 1 - while ptE:getZ() < s_dHMin + GEO.EPS_SMALL and k < 36 do - vtDir:rotate( vtSlicing, EgtIf( bChangeSign, 10, -10)) - ptE = ptS + vtDir * dWipeLen - k = k + 1 - end + local ptE = FindWipeEndPoint( ptS, vtDir, dWipeLen, vtSlicing) 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) @@ -958,15 +967,7 @@ local function AddRibsLeadOut( nCrv, nTPathGrp, nLoopsGrp, vtSlicing, dStrand, n 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 = ptE + vtE * dRibsLOWipe - -- verifico soddisfi altezza minima per dimensioni utensile - local k = 1 - while ptFinal:getZ() < s_dHMin + GEO.EPS_SMALL and k < 36 do - vtE:rotate( vtSlicing, EgtIf( bInvert, - 10, 10)) - ptFinal = ptE + vtE * dRibsLOWipe - k = k + 1 - end - + local ptFinal = FindWipeEndPoint( ptE, vtE, dRibsLOWipe, vtSlicing) nWipe = EgtCurveCompoFromPoints( nTPathGrp, { ptE, ptFinal}, GDB_RT.GLOB) EgtModifyCurveExtrusion( nWipe, vtSlicing, GDB_RT.GLOB) EgtRelocateGlob( nWipe, nCoasting or nCrvLO or nCrv, GDB_IN.AFTER) @@ -1260,9 +1261,10 @@ function CalcToolPath.Exec( nPartId) -- recupero i parametri per calcolo dei toolpath local LayerParams = GetLayerParamsForToolPathCalc() - -- altezza necessaria per ugello ( per correzione wipe) + -- altezza necessaria per correzione wipe local dNxy = sqrt( LayerParams.vtSlicing:getX() * LayerParams.vtSlicing:getX() + LayerParams.vtSlicing:getY() * LayerParams.vtSlicing:getY()) - s_dHMin = LayerParams.dTDiam / 2 * dNxy + 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