From 25242430f4efaf947277f7f29d03e77d7c7ec4da Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mikael=20=C3=85gren?= Date: Sun, 5 Jun 2022 07:55:11 +0200 Subject: [PATCH] Restore drilling op retract value to user supplied Retract Height Restores the retract behaviour to pre 5b23af3. After 5b23af3 Retract Height is no longer used. --- src/Mod/Path/Generators/drill_generator.py | 7 +++- src/Mod/Path/PathScripts/PathDrilling.py | 4 +- .../Path/PathTests/TestPathDrillGenerator.py | 38 +++++++++++++++++++ 3 files changed, 46 insertions(+), 3 deletions(-) diff --git a/src/Mod/Path/Generators/drill_generator.py b/src/Mod/Path/Generators/drill_generator.py index 550b678a67..ac9b6b1e63 100644 --- a/src/Mod/Path/Generators/drill_generator.py +++ b/src/Mod/Path/Generators/drill_generator.py @@ -38,7 +38,7 @@ else: PathLog.setLevel(PathLog.Level.INFO, PathLog.thisModule()) -def generate(edge, dwelltime=0.0, peckdepth=0.0, repeat=1): +def generate(edge, dwelltime=0.0, peckdepth=0.0, repeat=1, retractheight=None): startPoint = edge.Vertexes[0].Point endPoint = edge.Vertexes[1].Point @@ -61,6 +61,9 @@ def generate(edge, dwelltime=0.0, peckdepth=0.0, repeat=1): if not type(dwelltime) is float: raise ValueError("dwelltime must be a float") + if retractheight is not None and not type(retractheight) is float: + raise ValueError("retractheight must be a float") + if not ( numpy.isclose(startPoint.sub(endPoint).x, 0, rtol=1e-05, atol=1e-06) and (numpy.isclose(startPoint.sub(endPoint).y, 0, rtol=1e-05, atol=1e-06)) @@ -74,7 +77,7 @@ def generate(edge, dwelltime=0.0, peckdepth=0.0, repeat=1): cmdParams["X"] = startPoint.x cmdParams["Y"] = startPoint.y cmdParams["Z"] = endPoint.z - cmdParams["R"] = startPoint.z + cmdParams["R"] = retractheight if retractheight is not None else startPoint.z if repeat > 1: cmdParams["L"] = repeat diff --git a/src/Mod/Path/PathScripts/PathDrilling.py b/src/Mod/Path/PathScripts/PathDrilling.py index b53bfd0ec6..fcb894c9ec 100644 --- a/src/Mod/Path/PathScripts/PathDrilling.py +++ b/src/Mod/Path/PathScripts/PathDrilling.py @@ -233,7 +233,9 @@ class ObjectDrilling(PathCircularHoleBase.ObjectOp): repeat = 1 # technical debt: Add a repeat property for user control try: - drillcommands = generator.generate(edge, dwelltime, peckdepth, repeat) + drillcommands = generator.generate( + edge, dwelltime, peckdepth, repeat, obj.RetractHeight.Value + ) except ValueError as e: # any targets that fail the generator are ignored PathLog.info(e) diff --git a/src/Mod/Path/PathTests/TestPathDrillGenerator.py b/src/Mod/Path/PathTests/TestPathDrillGenerator.py index 78837b1965..ef8d814304 100644 --- a/src/Mod/Path/PathTests/TestPathDrillGenerator.py +++ b/src/Mod/Path/PathTests/TestPathDrillGenerator.py @@ -114,3 +114,41 @@ class TestPathDrillGenerator(PathTestUtils.PathTestBase): # dwelltime should be a float args = {"edge": e, "dwelltime": 1} self.assertRaises(ValueError, generator.generate, **args) + + def test40(self): + """Specifying retract height should set R parameter to specified value""" + v1 = FreeCAD.Vector(0, 0, 10) + v2 = FreeCAD.Vector(0, 0, 0) + + e = Part.makeLine(v1, v2) + + result = generator.generate(e, retractheight=20.0) + + command = result[0] + + self.assertTrue(command.Parameters["R"] == 20.0) + + def test41(self): + """Not specifying retract height should set R parameter to Z position of start point""" + v1 = FreeCAD.Vector(0, 0, 10) + v2 = FreeCAD.Vector(0, 0, 0) + + e = Part.makeLine(v1, v2) + + result = generator.generate(e) + + command = result[0] + + self.assertTrue(command.Parameters["R"] == 10.0) + + def test42(self): + """Non-float retract height should raise ValueError""" + v1 = FreeCAD.Vector(0, 0, 10) + v2 = FreeCAD.Vector(0, 0, 0) + + e = Part.makeLine(v1, v2) + + args = {"edge": e, "retractheight": 1} + self.assertRaises(ValueError, generator.generate, **args) + args = {"edge": e, "retractheight": "1"} + self.assertRaises(ValueError, generator.generate, **args)