From ff373809b19cbee17bd4f0ad0e743997640a3f46 Mon Sep 17 00:00:00 2001 From: Nikolay Khabarov <2xl@mail.ru> Date: Sun, 21 May 2017 18:50:07 +0300 Subject: [PATCH] simplyfy ijk handling --- cnc/gcode.py | 13 +------------ tests/test_gcode.py | 36 ++++++------------------------------ 2 files changed, 7 insertions(+), 42 deletions(-) diff --git a/cnc/gcode.py b/cnc/gcode.py index 81d7616..837adee 100644 --- a/cnc/gcode.py +++ b/cnc/gcode.py @@ -52,9 +52,8 @@ class GCode(object): """ return 'X' in self.params or 'Y' in self.params or 'Z' in self.params - def radius(self, plane, default, multiply): + def radius(self, default, multiply): """ Get radius for circular interpolation(I, J, K or R). - :param plane: If R is present, specify which axises should be used. :param default: Default values, if any of coords is not specified. :param multiply: If value exist, multiply it by this value. :return: Coord object. @@ -62,14 +61,6 @@ class GCode(object): i = self.get('I', default.x, multiply) j = self.get('J', default.y, multiply) k = self.get('K', default.z, multiply) - if 'R' in self.params: - r1 = self.get('R', None, multiply) / math.sqrt(2.0) - if plane == Plane.PLANE_XY: - i = j = r1 - elif plane == Plane.PLANE_ZX: - k = i = r1 - elif plane == Plane.PLANE_YZ: - j = k = r1 return Coordinates(i, j, k) def command(self): @@ -104,6 +95,4 @@ class GCode(object): raise GCodeException('duplicated gcode entries') if 'G' in params and 'M' in params: raise GCodeException('g and m command found') - if 'R' in params and ('I' in params or 'J' in params or 'K' in params): - raise GCodeException('r and component radius found') return GCode(params) diff --git a/tests/test_gcode.py b/tests/test_gcode.py index acc93ac..f83e32c 100644 --- a/tests/test_gcode.py +++ b/tests/test_gcode.py @@ -69,37 +69,13 @@ class TestGCode(unittest.TestCase): def test_radius(self): gc = GCode.parse_line("G2I1J2K3") - self.assertEqual(gc.radius(None, self.default, 1).x, 1) - self.assertEqual(gc.radius(None, self.default, 1).y, 2) - self.assertEqual(gc.radius(None, self.default, 1).z, 3) + self.assertEqual(gc.radius(self.default, 1).x, 1) + self.assertEqual(gc.radius(self.default, 1).y, 2) + self.assertEqual(gc.radius(self.default, 1).z, 3) gc = GCode.parse_line("G3") - self.assertEqual(gc.radius(None, self.default, 1).x, self.default.x) - self.assertEqual(gc.radius(None, self.default, 1).y, self.default.y) - self.assertEqual(gc.radius(None, self.default, 1).z, self.default.z) - self.assertRaises(GCodeException, GCode.parse_line, "R1I2") - self.assertRaises(GCodeException, GCode.parse_line, "R1J2") - self.assertRaises(GCodeException, GCode.parse_line, "R1K2") - gc = GCode.parse_line("G3R9") - self.assertAlmostEqual(gc.radius(Plane.PLANE_XY, self.default, 1).x, - math.sqrt(40.5), 9) - self.assertAlmostEqual(gc.radius(Plane.PLANE_XY, self.default, 1).y, - math.sqrt(40.5), 9) - self.assertEqual(gc.radius(Plane.PLANE_XY, self.default, 1).z, - self.default.z) - gc = GCode.parse_line("G3R-10") - self.assertAlmostEqual(gc.radius(Plane.PLANE_ZX, self.default, 1).x, - -math.sqrt(50), 9) - self.assertEqual(gc.radius(Plane.PLANE_ZX, self.default, 1).y, - self.default.y) - self.assertAlmostEqual(gc.radius(Plane.PLANE_ZX, self.default, 1).z, - -math.sqrt(50), 9) - gc = GCode.parse_line("G3R11") - self.assertEqual(gc.radius(Plane.PLANE_YZ, self.default, 1).x, - self.default.x) - self.assertAlmostEqual(gc.radius(Plane.PLANE_YZ, self.default, 1).y, - math.sqrt(60.5), 9) - self.assertAlmostEqual(gc.radius(Plane.PLANE_YZ, self.default, 1).z, - math.sqrt(60.5), 9) + self.assertEqual(gc.radius(self.default, 1).x, self.default.x) + self.assertEqual(gc.radius(self.default, 1).y, self.default.y) + self.assertEqual(gc.radius(self.default, 1).z, self.default.z) def test_multiply(self): # getting coordinates could modify value be specified multiplier.