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:
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user