AATA: Fix tests and addsome new. Likely incomplete

This commit is contained in:
Jonathan Wagenet 2025-07-31 23:18:18 -04:00
parent 6d6084ce15
commit ab6eaff52b
2 changed files with 32 additions and 16 deletions

View file

@ -1412,13 +1412,13 @@ class ArcArcTangentArc(BaseEdgeObject):
validate_inputs(context, self) validate_inputs(context, self)
if keep_placement == Keep.BOTH and keep_type != Keep.INSIDE: if keep_placement == Keep.BOTH and keep_type != Keep.INSIDE:
raise ValueError("Start arc must have GeomType.CIRCLE.")
if start_arc.geom_type != GeomType.CIRCLE:
raise ValueError( raise ValueError(
"Keep.BOTH can only be used in configuration: (Keep.BOTH, Keep.INSIDE)" "Keep.BOTH can only be used in configuration: (Keep.BOTH, Keep.INSIDE)"
) )
if start_arc.geom_type != GeomType.CIRCLE:
raise ValueError("Start arc must have GeomType.CIRCLE.")
if end_arc.geom_type != GeomType.CIRCLE: if end_arc.geom_type != GeomType.CIRCLE:
raise ValueError("End arc must have GeomType.CIRCLE.") raise ValueError("End arc must have GeomType.CIRCLE.")

View file

@ -646,12 +646,10 @@ class BuildLineTests(unittest.TestCase):
Considerations: Considerations:
- Should produce a GeomType.CIRCLE located on and tangent to arcs - Should produce a GeomType.CIRCLE located on and tangent to arcs
- Tangent arcs that share a side have arc centers on the same side of the midline - Tangent arcs that share a side have arc centers on the same side of the midline
- LEFT arcs have centers to right of midline - LEFT arcs have centers to left of midline (for (INSIDE, *) case, non overlapping))
- INSIDE lines should always have equal length as long as arcs are same distance - Mirrored arcs should always have equal length as long as arcs are same distance
- OUTSIDE lines should always have equal length as long as arcs are same distance
- Tangent should be GeomType.CIRCLE - Tangent should be GeomType.CIRCLE
- Arcs must be coplanar - Arcs must be coplanar
- Cannot make tangent for radius under certain size
- Cannot make tangent for concentric arcs - Cannot make tangent for concentric arcs
""" """
# Test line properties in algebra mode # Test line properties in algebra mode
@ -665,7 +663,8 @@ class BuildLineTests(unittest.TestCase):
end_arc = CenterArc(end_point, end_r, 0, 360) end_arc = CenterArc(end_point, end_r, 0, 360)
radius = 15 radius = 15
lines = [] lines = []
for keep in [Keep.INSIDE, Keep.OUTSIDE]: for keep_placement in [Keep.INSIDE, Keep.OUTSIDE]:
keep = (keep_placement, Keep.OUTSIDE)
for side in [Side.LEFT, Side.RIGHT]: for side in [Side.LEFT, Side.RIGHT]:
l1 = ArcArcTangentArc(start_arc, end_arc, radius, side=side, keep=keep) l1 = ArcArcTangentArc(start_arc, end_arc, radius, side=side, keep=keep)
self.assertEqual(l1.geom_type, GeomType.CIRCLE) self.assertEqual(l1.geom_type, GeomType.CIRCLE)
@ -699,18 +698,18 @@ class BuildLineTests(unittest.TestCase):
start_arc = CenterArc(point_arc @ (point / 16), start_r, 0, 360) start_arc = CenterArc(point_arc @ (point / 16), start_r, 0, 360)
mid_vector = end_center - start_center mid_vector = end_center - start_center
mid_perp = mid_vector.cross(workplane.z_dir) mid_perp = mid_vector.cross(workplane.z_dir)
for keep in [Keep.INSIDE, Keep.OUTSIDE]: for keep_placement in [Keep.INSIDE, Keep.OUTSIDE]:
keep = (keep_placement, Keep.OUTSIDE)
for side in [Side.LEFT, Side.RIGHT]: for side in [Side.LEFT, Side.RIGHT]:
l2 = ArcArcTangentArc( l2 = ArcArcTangentArc(
start_arc, end_arc, radius, side=side, keep=keep start_arc, end_arc, radius, side=side, keep=keep
) )
# Check length against algebraic length # Check length against algebraic length
if keep == Keep.INSIDE: if keep_placement == Keep.OUTSIDE:
self.assertAlmostEqual(lines[0].length, l2.length, 5)
side_sign = 1
elif keep == Keep.OUTSIDE:
self.assertAlmostEqual(lines[2].length, l2.length, 5) self.assertAlmostEqual(lines[2].length, l2.length, 5)
side_sign = 1
elif keep_placement == Keep.INSIDE:
self.assertAlmostEqual(lines[0].length, l2.length, 5)
side_sign = -1 side_sign = -1
# Check side of midline # Check side of midline
@ -720,7 +719,6 @@ class BuildLineTests(unittest.TestCase):
if side == Side.LEFT: if side == Side.LEFT:
self.assertLess(side_sign * coincident_dir, 0) self.assertLess(side_sign * coincident_dir, 0)
self.assertLess(center_dir, 0) self.assertLess(center_dir, 0)
elif side == Side.RIGHT: elif side == Side.RIGHT:
self.assertGreater(side_sign * coincident_dir, 0) self.assertGreater(side_sign * coincident_dir, 0)
self.assertGreater(center_dir, 0) self.assertGreater(center_dir, 0)
@ -728,7 +726,8 @@ class BuildLineTests(unittest.TestCase):
# Verify arc is tangent for a reversed start arc # Verify arc is tangent for a reversed start arc
c1 = CenterArc((0, 80), 40, 0, -180) c1 = CenterArc((0, 80), 40, 0, -180)
c2 = CenterArc((80, 0), 40, 90, 180) c2 = CenterArc((80, 0), 40, 90, 180)
arc = ArcArcTangentArc(c1, c2, 25, side=Side.RIGHT) keep = (Keep.OUTSIDE, Keep.OUTSIDE)
arc = ArcArcTangentArc(c1, c2, 25, side=Side.RIGHT, keep=keep)
_, _, point = c1.distance_to_with_closest_points(arc) _, _, point = c1.distance_to_with_closest_points(arc)
self.assertAlmostEqual( self.assertAlmostEqual(
c1.tangent_at(point).cross(arc.tangent_at(point)).length, 0, 5 c1.tangent_at(point).cross(arc.tangent_at(point)).length, 0, 5
@ -737,6 +736,7 @@ class BuildLineTests(unittest.TestCase):
## Error Handling ## Error Handling
start_arc = CenterArc(start_point, start_r, 0, 360) start_arc = CenterArc(start_point, start_r, 0, 360)
end_arc = CenterArc(end_point, end_r, 0, 360) end_arc = CenterArc(end_point, end_r, 0, 360)
# GeomType # GeomType
bad_type = Line((0, 0), (0, 10)) bad_type = Line((0, 0), (0, 10))
with self.assertRaises(ValueError): with self.assertRaises(ValueError):
@ -745,10 +745,26 @@ class BuildLineTests(unittest.TestCase):
with self.assertRaises(ValueError): with self.assertRaises(ValueError):
ArcArcTangentArc(bad_type, end_arc, radius) ArcArcTangentArc(bad_type, end_arc, radius)
# Keep.BOTH
with self.assertRaises(ValueError):
ArcArcTangentArc(bad_type, end_arc, radius, keep=(Keep.BOTH, Keep.OUTSIDE))
# Coplanar # Coplanar
with self.assertRaises(ValueError): with self.assertRaises(ValueError):
ArcArcTangentArc(CenterArc((0, 0, 1), 5, 0, 360), end_arc, radius) ArcArcTangentArc(CenterArc((0, 0, 1), 5, 0, 360), end_arc, radius)
# Coincidence (already tangent)
with self.assertRaises(ValueError):
ArcArcTangentArc(start_arc, CenterArc((0, 2 * start_r), start_r, 0, 360), 3)
with self.assertRaises(ValueError):
ArcArcTangentArc(start_arc, CenterArc(start_point, start_r, 0, 360), 3)
with self.assertRaises(ValueError):
ArcArcTangentArc(
start_arc, CenterArc((0, end_r - start_r), end_r, 0, 360), 3
)
# Radius size # Radius size
with self.assertRaises(ValueError): with self.assertRaises(ValueError):
r = (separation - (start_r + end_r)) / 2 - 1 r = (separation - (start_r + end_r)) / 2 - 1