2
# ***************************************************************************
3
# * Copyright (c) 2021 sliptonic <shopinthewoods@gmail.com> *
5
# * This program is free software; you can redistribute it and/or modify *
6
# * it under the terms of the GNU Lesser General Public License (LGPL) *
7
# * as published by the Free Software Foundation; either version 2 of *
8
# * the License, or (at your option) any later version. *
9
# * for detail see the LICENCE text file. *
11
# * This program is distributed in the hope that it will be useful, *
12
# * but WITHOUT ANY WARRANTY; without even the implied warranty of *
13
# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
14
# * GNU Library General Public License for more details. *
16
# * You should have received a copy of the GNU Library General Public *
17
# * License along with this program; if not, write to the Free Software *
18
# * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 *
21
# ***************************************************************************
25
import Path.Base.Generator.rotation as generator
26
import Tests.PathTestUtils as PathTestUtils
29
Path.Log.setLevel(Path.Log.Level.INFO, Path.Log.thisModule())
30
Path.Log.trackModule(Path.Log.thisModule())
33
class TestPathRotationGenerator(PathTestUtils.PathTestBase):
35
"""Test relAngle function"""
36
v = FreeCAD.Vector(0.5, 0.5, 0.5)
37
self.assertTrue(np.isclose(generator.relAngle(v, generator.refAxis.x), 45))
38
self.assertTrue(np.isclose(generator.relAngle(v, generator.refAxis.y), 45))
39
self.assertTrue(np.isclose(generator.relAngle(v, generator.refAxis.z), 45))
41
v = FreeCAD.Vector(-0.5, 0.5, 0.5)
42
self.assertTrue(np.isclose(generator.relAngle(v, generator.refAxis.x), 135))
43
self.assertTrue(np.isclose(generator.relAngle(v, generator.refAxis.y), -45))
44
self.assertTrue(np.isclose(generator.relAngle(v, generator.refAxis.z), 45))
46
v = FreeCAD.Vector(-0.5, -0.5, -0.5)
47
self.assertTrue(np.isclose(generator.relAngle(v, generator.refAxis.x), -135))
48
self.assertTrue(np.isclose(generator.relAngle(v, generator.refAxis.y), -135))
49
self.assertTrue(np.isclose(generator.relAngle(v, generator.refAxis.z), -135))
52
"""Test Basic Rotation Generator Return"""
53
v1 = FreeCAD.Vector(0.0, 0.0, 1.0)
63
result = generator.generate(**args)
65
self.assertTrue(type(result) is list)
66
self.assertTrue(len(result) == 1)
67
self.assertTrue(type(result[0]) is Path.Command)
70
self.assertTrue(np.isclose(command.Parameters["A"], 0))
71
self.assertTrue(np.isclose(command.Parameters["C"], 0))
73
args["compound"] = False
74
result = generator.generate(**args)
75
self.assertTrue(len(result) == 2)
77
Path.Log.debug(result)
80
"""Test non-zero rotation"""
81
v1 = FreeCAD.Vector(0.5, 0.5, 0.5)
91
result = generator.generate(**args)
94
Path.Log.debug(command.Parameters)
95
self.assertTrue(np.isclose(command.Parameters["A"], 54.736))
96
self.assertTrue(np.isclose(command.Parameters["C"], 45))
98
Path.Log.track(result)
102
v1 = FreeCAD.Vector(0.5, 0.5, 0.5)
104
args = {"normalVector": v1, "cMin": -360, "cMax": 360, "compound": True}
106
# Constrain a axis rotation negative
110
result = generator.generate(**args)
111
Path.Log.debug(result)
114
self.assertTrue(np.isclose(command.Parameters["A"], -54.736))
115
self.assertTrue(np.isclose(command.Parameters["C"], -135))
117
# Constrain a axis rotation positive
121
result = generator.generate(**args)
122
Path.Log.debug(result)
125
self.assertTrue(np.isclose(command.Parameters["A"], 54.736))
126
self.assertTrue(np.isclose(command.Parameters["C"], 45))
130
v1 = FreeCAD.Vector(0.5, 0.5, 0.5)
132
args = {"normalVector": v1, "aMin": -360, "aMax": 360, "compound": True}
134
# Constrain a axis rotation negative
138
result = generator.generate(**args)
139
Path.Log.debug(result)
142
self.assertTrue(np.isclose(command.Parameters["A"], -54.736))
143
self.assertTrue(np.isclose(command.Parameters["C"], -135))
145
# Constrain a axis rotation positive
149
result = generator.generate(**args)
150
Path.Log.debug(result)
153
self.assertTrue(np.isclose(command.Parameters["A"], 54.736))
154
self.assertTrue(np.isclose(command.Parameters["C"], 45))
157
"""Test handling of no valid solution"""
158
v1 = FreeCAD.Vector(0.5, 0.5, 0.5)
168
self.assertRaises(ValueError, generator.generate, **args)