Merge pull request #6974 from agren/restore-path-drilling-retract-behaviour

Path: Restore drilling op retract value to user supplied Retract Height
This commit is contained in:
sliptonic
2022-07-02 12:20:54 -05:00
committed by GitHub
3 changed files with 46 additions and 3 deletions

View File

@@ -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

View File

@@ -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)

View File

@@ -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)