From 767bf035789d9cb3b445d9ac186ab6dac4bdfa9e Mon Sep 17 00:00:00 2001 From: jdegenstein Date: Mon, 11 Dec 2023 11:01:35 -0600 Subject: [PATCH 1/2] Trapezoid width is now fully controlled by width param --- src/build123d/objects_sketch.py | 29 ++++++++++++++++++++++++----- 1 file changed, 24 insertions(+), 5 deletions(-) diff --git a/src/build123d/objects_sketch.py b/src/build123d/objects_sketch.py index ff870ab2..dcc80ea3 100644 --- a/src/build123d/objects_sketch.py +++ b/src/build123d/objects_sketch.py @@ -621,13 +621,32 @@ def __init__( reduction_right = ( 0 if right_side_angle == 90 else height / tan(radians(right_side_angle)) ) - if reduction_left + reduction_right >= width: + + top_width_left = width / 2 + top_width_right = width / 2 + bot_width_left = width / 2 + bot_width_right = width / 2 + + if reduction_left > 0: + top_width_left -= reduction_left + else: + bot_width_left += reduction_left + + if reduction_right > 0: + top_width_right -= reduction_right + else: + bot_width_right += reduction_right + + if (bot_width_left + bot_width_right) < 0: + raise ValueError("Trapezoid bottom invalid - change angles") + if (top_width_left + top_width_right) < 0: raise ValueError("Trapezoid top invalid - change angles") + pts = [] - pts.append(Vector(-width / 2, -height / 2)) - pts.append(Vector(width / 2, -height / 2)) - pts.append(Vector(width / 2 - reduction_right, height / 2)) - pts.append(Vector(-width / 2 + reduction_left, height / 2)) + pts.append(Vector(-bot_width_left, -height / 2)) + pts.append(Vector(bot_width_right, -height / 2)) + pts.append(Vector(top_width_right, height / 2)) + pts.append(Vector(-top_width_left, height / 2)) pts.append(pts[0]) face = Face.make_from_wires(Wire.make_polygon(pts)) super().__init__(face, rotation, self.align, mode) From c75e8d3123c26cd721b49d527c60eef60537df89 Mon Sep 17 00:00:00 2001 From: jdegenstein Date: Mon, 11 Dec 2023 11:24:40 -0600 Subject: [PATCH 2/2] Update test_build_sketch.py -> Trapezoid tests add coverage for Trapezoid changes --- tests/test_build_sketch.py | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/tests/test_build_sketch.py b/tests/test_build_sketch.py index dcf487b0..8b287be3 100644 --- a/tests/test_build_sketch.py +++ b/tests/test_build_sketch.py @@ -382,6 +382,18 @@ def test_trapezoid(self): with BuildSketch() as test: Trapezoid(6, 2, 30) + with self.assertRaises(ValueError): + with BuildSketch() as test: + Trapezoid(6, 2, 150) + + with BuildSketch() as test: + t = Trapezoid(12,8,135,90) + self.assertEqual(t.width, 12) + self.assertEqual(t.trapezoid_height, 8) + self.assertEqual(t.left_side_angle, 135) + self.assertEqual(t.right_side_angle, 90) + self.assertAlmostEqual(test.sketch.area, 8 * (12 + 4) / 2, 5) + def test_triangle(self): tri = Triangle(a=3, b=4, c=5) self.assertAlmostEqual(tri.area, (3 * 4) / 2, 5)