Skip to content

Commit 5c164c0

Browse files
authored
Merge pull request #1226 from jdegenstein/fix_jernarc
fix: `JernArc` detect and modify global/local tangent directions as appropriate
2 parents 83070dc + 9dc6409 commit 5c164c0

File tree

2 files changed

+15
-5
lines changed

2 files changed

+15
-5
lines changed

src/build123d/objects_curve.py

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1102,9 +1102,14 @@ def __init__(
11021102
WorkplaneList._get_context().workplanes[0]
11031103
)
11041104
jern_workplane.origin = start
1105-
start_tangent = Vector(tangent).transform(
1106-
jern_workplane.reverse_transform, is_direction=True
1107-
)
1105+
1106+
if isinstance(tangent, tuple) and len(tangent) == 2:
1107+
# de-localize to global tangent if supplied tangent is a 2-tuple
1108+
start_tangent = Vector(tangent).transform(
1109+
jern_workplane.reverse_transform, is_direction=True
1110+
).normalized()
1111+
else:
1112+
start_tangent = Vector(tangent).normalized()
11081113

11091114
arc_direction = copysign(1.0, arc_size)
11101115
self.center_point = start + start_tangent.rotate(

tests/test_build_line.py

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -353,13 +353,18 @@ def test_jern_arc(self):
353353
self.assertAlmostEqual(off1.radius, 1)
354354
self.assertAlmostEqual(off1.length, pi / 2)
355355

356-
plane_iso = Plane(origin=(0, 0, 0), x_dir=(1, 1, 0), z_dir=(1, -1, 1))
357-
with BuildLine(plane_iso) as iso_l:
356+
with BuildLine(Plane.isometric) as iso_l:
358357
iso1 = JernArc((0, 0), (0, 1), 1, 180)
359358
self.assertTupleAlmostEquals(iso_l.line @ 1, (-sqrt(2), -sqrt(2), 0), 5)
360359
self.assertAlmostEqual(iso1.radius, 1)
361360
self.assertAlmostEqual(iso1.length, pi)
362361

362+
with BuildLine(Plane.YZ) as jern_arc_vector:
363+
jv1 = JernArc(start=Vector(0, 5, 4), tangent=Vector(0, 0, 1), radius=1, arc_size=90)
364+
self.assertTupleAlmostEquals(jv1 @ 1, (0, 4, 5), 5)
365+
self.assertAlmostEqual(jv1.radius, 1)
366+
self.assertAlmostEqual(jv1.length, pi / 2)
367+
363368
with BuildLine() as full_l:
364369
l1 = JernArc(start=(0, 0, 0), tangent=(1, 0, 0), radius=1, arc_size=360)
365370
l2 = JernArc(start=(0, 0, 0), tangent=(1, 0, 0), radius=1, arc_size=300)

0 commit comments

Comments
 (0)