From 04644ff73318398d3affd508ccfd0c584e756293 Mon Sep 17 00:00:00 2001 From: Patrick Felixberger Date: Tue, 23 Apr 2019 00:16:25 +0200 Subject: [PATCH] Cleaned up PathAdaptive script --- src/Mod/Path/PathScripts/PathAdaptive.py | 252 ++++++++++++++--------- 1 file changed, 152 insertions(+), 100 deletions(-) diff --git a/src/Mod/Path/PathScripts/PathAdaptive.py b/src/Mod/Path/PathScripts/PathAdaptive.py index 332d38a372..7e13b274dd 100644 --- a/src/Mod/Path/PathScripts/PathAdaptive.py +++ b/src/Mod/Path/PathScripts/PathAdaptive.py @@ -54,6 +54,7 @@ def sceneDrawPath(path, color=(0, 0, 1)): global sceneGraph global scenePathNodes coPoint = coin.SoCoordinate3() + pts = [] for pt in path: pts.append([pt[0], pt[1], topZ]) @@ -72,41 +73,54 @@ def sceneDrawPath(path, color=(0, 0, 1)): def sceneClean(): global scenePathNodes + for n in scenePathNodes: sceneGraph.removeChild(n) + del scenePathNodes[:] -def discretize(edge, flipDirection=False): - pts=edge.discretize(Deflection=0.0001) - if flipDirection: pts.reverse() +def discretize(edge, flipDirection = False): + pts = edge.discretize(Deflection = 0.0001) + if flipDirection: + pts.reverse() + return pts def GenerateGCode(op,obj,adaptiveResults, helixDiameter): - if len(adaptiveResults)==0 or len(adaptiveResults[0]["AdaptivePaths"])==0: - return + if len(adaptiveResults) == 0 or len(adaptiveResults[0]["AdaptivePaths"]) == 0: + return minLiftDistance = op.tool.Diameter - helixRadius=0 + helixRadius = 0 for region in adaptiveResults: p1 = region["HelixCenterPoint"] p2 = region["StartPoint"] r =math.sqrt((p1[0]-p2[0]) * (p1[0]-p2[0]) + (p1[1]-p2[1]) * (p1[1]-p2[1])) - if r>helixRadius: helixRadius=r + if r > helixRadius: + helixRadius = r stepDown = obj.StepDown.Value passStartDepth=obj.StartDepth.Value - if stepDown<0.1 : stepDown=0.1 + + if stepDown < 0.1 : + stepDown = 0.1 + length = 2*math.pi * helixRadius - if float(obj.HelixAngle)<1: obj.HelixAngle=1 - helixAngleRad = math.pi * float(obj.HelixAngle)/180.0 + + if float(obj.HelixAngle) < 1: + obj.HelixAngle = 1 + + helixAngleRad = math.pi * float(obj.HelixAngle) / 180.0 depthPerOneCircle=length * math.tan(helixAngleRad) - stepUp = obj.LiftDistance.Value - if stepUp<0: - stepUp=0 + + stepUp = obj.LiftDistance.Value + if stepUp < 0: + stepUp = 0 finish_step = obj.FinishDepth.Value if hasattr(obj, "FinishDepth") else 0.0 - if finish_step>stepDown: finish_step = stepDown + if finish_step > stepDown: + finish_step = stepDown depth_params = PathUtils.depth_params( clearance_height=obj.ClearanceHeight.Value, @@ -119,111 +133,137 @@ def GenerateGCode(op,obj,adaptiveResults, helixDiameter): - lx=adaptiveResults[0]["HelixCenterPoint"][0] - ly=adaptiveResults[0]["HelixCenterPoint"][1] - lz=passStartDepth - step=0 + lx = adaptiveResults[0]["HelixCenterPoint"][0] + ly = adaptiveResults[0]["HelixCenterPoint"][1] + lz = passStartDepth + step = 0 + for passEndDepth in depth_params.data: - step=step+1 + step = step + 1 + for region in adaptiveResults: startAngle = math.atan2(region["StartPoint"][1] - region["HelixCenterPoint"][1], region["StartPoint"][0] - region["HelixCenterPoint"][0]) - lx=region["HelixCenterPoint"][0] - ly=region["HelixCenterPoint"][1] + lx = region["HelixCenterPoint"][0] + ly = region["HelixCenterPoint"][1] passDepth = (passStartDepth - passEndDepth) - p1 = region["HelixCenterPoint"] - p2 = region["StartPoint"] - helixRadius =math.sqrt((p1[0]-p2[0]) * (p1[0]-p2[0]) + (p1[1]-p2[1]) * (p1[1]-p2[1])) + p1 = region["HelixCenterPoint"] + p2 = region["StartPoint"] + helixRadius = math.sqrt((p1[0]-p2[0]) * (p1[0]-p2[0]) + (p1[1]-p2[1]) * (p1[1]-p2[1])) - #helix ramp - if helixRadius>0.0001: + # helix ramp + if helixRadius > 0.001: r = helixRadius - 0.01 - maxfi = passDepth / depthPerOneCircle * 2 * math.pi + maxfi = passDepth / depthPerOneCircle * 2 * math.pi fi = 0 offsetFi =-maxfi + startAngle-math.pi/16 helixStart = [region["HelixCenterPoint"][0] + r * math.cos(offsetFi), region["HelixCenterPoint"][1] + r * math.sin(offsetFi)] - op.commandlist.append(Path.Command("(helix to depth: %f)"%passEndDepth)) + op.commandlist.append(Path.Command("(Helix to depth: %f)"%passEndDepth)) - #rapid move to start point - op.commandlist.append(Path.Command( - "G0", {"X": helixStart[0], "Y": helixStart[1], "Z": obj.ClearanceHeight.Value})) - #rapid move to safe height - op.commandlist.append(Path.Command( - "G0", {"X": helixStart[0], "Y": helixStart[1], "Z": obj.SafeHeight.Value})) + # rapid move to start point + op.commandlist.append(Path.Command("G0", {"X": helixStart[0], "Y": helixStart[1], "Z": obj.ClearanceHeight.Value})) - op.commandlist.append(Path.Command("G1", { - "X": helixStart[0], "Y": helixStart[1], "Z": passStartDepth, "F": op.vertFeed})) + # rapid move to safe height + op.commandlist.append(Path.Command("G0", {"X": helixStart[0], "Y": helixStart[1], "Z": obj.SafeHeight.Value})) - while fi