|
|
|
|
@ -1074,6 +1074,36 @@ class AutoRoutingTest(unittest.TestCase):
|
|
|
|
|
self.assertEqual("CollisionWarning", result["route_status"])
|
|
|
|
|
self.assertEqual("CollisionWarning", result["wire"].RouteStatus)
|
|
|
|
|
self.assertEqual(1, result["collision_count"])
|
|
|
|
|
self.assertEqual("HardIntersection", result["collisions"][0]["collision_kind"])
|
|
|
|
|
|
|
|
|
|
def test_eplan_connection_route_marks_clearance_warning_against_expanded_obstacle_bbox(self):
|
|
|
|
|
_install_fake_freecad()
|
|
|
|
|
terminal_objects, _wiring_objects, routing_network, auto_routing = _reload_modules()
|
|
|
|
|
app = sys.modules["FreeCAD"]
|
|
|
|
|
doc = FakeDocument()
|
|
|
|
|
terminal_objects.ensure_root_group(doc, "project-1")
|
|
|
|
|
start = _terminal(doc, terminal_objects, "TerminalStart", "terminal-start", app.Vector(0, 0, 0))
|
|
|
|
|
end = _terminal(doc, terminal_objects, "TerminalEnd", "terminal-end", app.Vector(100, 0, 0))
|
|
|
|
|
routing_network.create_route_carrier(
|
|
|
|
|
doc,
|
|
|
|
|
[app.Vector(0, 0, 100), app.Vector(100, 0, 100)],
|
|
|
|
|
project_uuid="project-1",
|
|
|
|
|
)
|
|
|
|
|
obstacle = doc.addObject("Part::Feature", "NearObstacle")
|
|
|
|
|
obstacle.Shape = FakeShape(FakeBoundBox(40, 60, 3, 6, 90, 110))
|
|
|
|
|
|
|
|
|
|
result = auto_routing.route_eplan_connection_between_terminals(
|
|
|
|
|
doc,
|
|
|
|
|
start,
|
|
|
|
|
end,
|
|
|
|
|
options={"obstacle_clearance": 5.0},
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
self.assertEqual("CollisionWarning", result["route_status"])
|
|
|
|
|
self.assertEqual(1, result["collision_count"])
|
|
|
|
|
self.assertEqual("ClearanceWarning", result["collisions"][0]["collision_kind"])
|
|
|
|
|
self.assertEqual(3.0, result["collisions"][0]["obstacle_bbox"]["ymin"])
|
|
|
|
|
self.assertEqual(-2.0, result["collisions"][0]["collision_bbox"]["ymin"])
|
|
|
|
|
|
|
|
|
|
def test_eplan_connection_route_ignores_terminal_exit_segment_collision(self):
|
|
|
|
|
_install_fake_freecad()
|
|
|
|
|
@ -1432,6 +1462,7 @@ class AutoRoutingTest(unittest.TestCase):
|
|
|
|
|
self.assertEqual("wire-1", report["collision_samples"][0]["wire_uuid"])
|
|
|
|
|
self.assertEqual("N4111", report["collision_samples"][0]["wire_label"])
|
|
|
|
|
self.assertEqual("MiddleObstacle", report["collision_samples"][0]["obstacle_name"])
|
|
|
|
|
self.assertEqual("HardIntersection", report["collision_samples"][0]["collision_kind"])
|
|
|
|
|
self.assertEqual({"x": 0.0, "y": 0.0, "z": 100.0}, report["collision_samples"][0]["segment_start"])
|
|
|
|
|
self.assertEqual({"x": 100.0, "y": 0.0, "z": 100.0}, report["collision_samples"][0]["segment_end"])
|
|
|
|
|
self.assertEqual(40.0, report["collision_samples"][0]["obstacle_bbox"]["xmin"])
|
|
|
|
|
@ -1501,6 +1532,27 @@ class AutoRoutingTest(unittest.TestCase):
|
|
|
|
|
self.assertIn("首个错误:没有可用的线槽/路由路径网络", message)
|
|
|
|
|
self.assertIn("缺失示例:terminal-a -> terminal-b", message)
|
|
|
|
|
|
|
|
|
|
def test_route_eplan_connections_report_calls_out_clearance_collision_kind(self):
|
|
|
|
|
_install_fake_freecad()
|
|
|
|
|
_terminal_objects, _wiring_objects, _routing_network, auto_routing = _reload_modules()
|
|
|
|
|
report = {
|
|
|
|
|
"routed": 1,
|
|
|
|
|
"collision_warnings": 1,
|
|
|
|
|
"skipped_missing_terminal": 0,
|
|
|
|
|
"collision_samples": [
|
|
|
|
|
{
|
|
|
|
|
"wire_label": "N4111",
|
|
|
|
|
"obstacle_label": "柜体侧板",
|
|
|
|
|
"collision_kind": "ClearanceWarning",
|
|
|
|
|
}
|
|
|
|
|
],
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
message = auto_routing.format_eplan_connection_route_report(report)
|
|
|
|
|
|
|
|
|
|
self.assertIn("安全间隙", message)
|
|
|
|
|
self.assertIn("柜体侧板", message)
|
|
|
|
|
|
|
|
|
|
def test_route_eplan_connections_report_ignores_non_numeric_status_counts(self):
|
|
|
|
|
_install_fake_freecad()
|
|
|
|
|
_terminal_objects, _wiring_objects, _routing_network, auto_routing = _reload_modules()
|
|
|
|
|
|