| | |
| |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| |
|
| | import FreeCAD |
| | import Path |
| | import Path.Base.Generator.rotation as generator |
| | import CAMTests.PathTestUtils as PathTestUtils |
| | import numpy as np |
| |
|
| | Path.Log.setLevel(Path.Log.Level.INFO, Path.Log.thisModule()) |
| | Path.Log.trackModule(Path.Log.thisModule()) |
| |
|
| |
|
| | class TestPathRotationGenerator(PathTestUtils.PathTestBase): |
| | def test00(self): |
| | """Test relAngle function""" |
| | v = FreeCAD.Vector(0.5, 0.5, 0.5) |
| | self.assertTrue(np.isclose(generator.relAngle(v, generator.refAxis.x), 45)) |
| | self.assertTrue(np.isclose(generator.relAngle(v, generator.refAxis.y), 45)) |
| | self.assertTrue(np.isclose(generator.relAngle(v, generator.refAxis.z), 45)) |
| |
|
| | v = FreeCAD.Vector(-0.5, 0.5, 0.5) |
| | self.assertTrue(np.isclose(generator.relAngle(v, generator.refAxis.x), 135)) |
| | self.assertTrue(np.isclose(generator.relAngle(v, generator.refAxis.y), -45)) |
| | self.assertTrue(np.isclose(generator.relAngle(v, generator.refAxis.z), 45)) |
| |
|
| | v = FreeCAD.Vector(-0.5, -0.5, -0.5) |
| | self.assertTrue(np.isclose(generator.relAngle(v, generator.refAxis.x), -135)) |
| | self.assertTrue(np.isclose(generator.relAngle(v, generator.refAxis.y), -135)) |
| | self.assertTrue(np.isclose(generator.relAngle(v, generator.refAxis.z), -135)) |
| |
|
| | def test10(self): |
| | """Test Basic Rotation Generator Return""" |
| | v1 = FreeCAD.Vector(0.0, 0.0, 1.0) |
| | args = { |
| | "normalVector": v1, |
| | "aMin": -360, |
| | "aMax": 360, |
| | "cMin": -360, |
| | "cMax": 360, |
| | "compound": True, |
| | } |
| |
|
| | result = generator.generate(**args) |
| |
|
| | self.assertTrue(type(result) is list) |
| | self.assertTrue(len(result) == 1) |
| | self.assertTrue(type(result[0]) is Path.Command) |
| |
|
| | command = result[0] |
| | self.assertTrue(np.isclose(command.Parameters["A"], 0)) |
| | self.assertTrue(np.isclose(command.Parameters["C"], 0)) |
| |
|
| | args["compound"] = False |
| | result = generator.generate(**args) |
| | self.assertTrue(len(result) == 2) |
| |
|
| | Path.Log.debug(result) |
| |
|
| | def test20(self): |
| | """Test non-zero rotation""" |
| | v1 = FreeCAD.Vector(0.5, 0.5, 0.5) |
| | args = { |
| | "normalVector": v1, |
| | "aMin": -360, |
| | "aMax": 360, |
| | "cMin": -360, |
| | "cMax": 360, |
| | "compound": True, |
| | } |
| |
|
| | result = generator.generate(**args) |
| |
|
| | command = result[0] |
| | Path.Log.debug(command.Parameters) |
| | self.assertTrue(np.isclose(command.Parameters["A"], 54.736)) |
| | self.assertTrue(np.isclose(command.Parameters["C"], 45)) |
| |
|
| | Path.Log.track(result) |
| |
|
| | def test30(self): |
| | """Test A limits""" |
| | v1 = FreeCAD.Vector(0.5, 0.5, 0.5) |
| |
|
| | args = {"normalVector": v1, "cMin": -360, "cMax": 360, "compound": True} |
| |
|
| | |
| | args["aMin"] = -90 |
| | args["aMax"] = 0 |
| |
|
| | result = generator.generate(**args) |
| | Path.Log.debug(result) |
| |
|
| | command = result[0] |
| | self.assertTrue(np.isclose(command.Parameters["A"], -54.736)) |
| | self.assertTrue(np.isclose(command.Parameters["C"], -135)) |
| |
|
| | |
| | args["aMin"] = 0 |
| | args["aMax"] = 90 |
| |
|
| | result = generator.generate(**args) |
| | Path.Log.debug(result) |
| |
|
| | command = result[0] |
| | self.assertTrue(np.isclose(command.Parameters["A"], 54.736)) |
| | self.assertTrue(np.isclose(command.Parameters["C"], 45)) |
| |
|
| | def test40(self): |
| | """Test C limits""" |
| | v1 = FreeCAD.Vector(0.5, 0.5, 0.5) |
| |
|
| | args = {"normalVector": v1, "aMin": -360, "aMax": 360, "compound": True} |
| |
|
| | |
| | args["cMin"] = -180 |
| | args["cMax"] = 0 |
| |
|
| | result = generator.generate(**args) |
| | Path.Log.debug(result) |
| |
|
| | command = result[0] |
| | self.assertTrue(np.isclose(command.Parameters["A"], -54.736)) |
| | self.assertTrue(np.isclose(command.Parameters["C"], -135)) |
| |
|
| | |
| | args["cMin"] = 0 |
| | args["cMax"] = 180 |
| |
|
| | result = generator.generate(**args) |
| | Path.Log.debug(result) |
| |
|
| | command = result[0] |
| | self.assertTrue(np.isclose(command.Parameters["A"], 54.736)) |
| | self.assertTrue(np.isclose(command.Parameters["C"], 45)) |
| |
|
| | def test50(self): |
| | """Test handling of no valid solution""" |
| | v1 = FreeCAD.Vector(0.5, 0.5, 0.5) |
| | args = { |
| | "normalVector": v1, |
| | "aMin": 0, |
| | "aMax": 10, |
| | "cMin": 0, |
| | "cMax": 10, |
| | "compound": True, |
| | } |
| |
|
| | self.assertRaises(ValueError, generator.generate, **args) |
| |
|