|
|
|
|
@ -480,6 +480,45 @@ class AutoRoutingTest(unittest.TestCase):
|
|
|
|
|
self.assertEqual("network-dijkstra-v1", result["algorithm"])
|
|
|
|
|
self.assertEqual("Routed", result["route_status"])
|
|
|
|
|
|
|
|
|
|
def test_connect_point_to_network_replaces_bridged_edge_without_stale_reverse_edge(self):
|
|
|
|
|
_install_fake_freecad()
|
|
|
|
|
_terminal_objects, _wiring_objects, routing_network, _auto_routing = _reload_modules()
|
|
|
|
|
app = sys.modules["FreeCAD"]
|
|
|
|
|
doc = FakeDocument()
|
|
|
|
|
routing_network.create_route_carrier(
|
|
|
|
|
doc,
|
|
|
|
|
[app.Vector(0, 0, 20), app.Vector(50, 0, 20)],
|
|
|
|
|
project_uuid="project-1",
|
|
|
|
|
kind="WireDuct",
|
|
|
|
|
)
|
|
|
|
|
routing_network.create_route_carrier(
|
|
|
|
|
doc,
|
|
|
|
|
[app.Vector(54, 0, 20), app.Vector(100, 0, 20)],
|
|
|
|
|
project_uuid="project-1",
|
|
|
|
|
kind="WireDuct",
|
|
|
|
|
)
|
|
|
|
|
network = routing_network.build_route_graph(doc)
|
|
|
|
|
original_keys = set(network["nodes"].keys())
|
|
|
|
|
bridge_keys = {
|
|
|
|
|
key
|
|
|
|
|
for key, point in network["nodes"].items()
|
|
|
|
|
if point.x in {50.0, 54.0}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
projected_key, _distance, mode = routing_network.connect_point_to_network(network, app.Vector(52, 0, 20))
|
|
|
|
|
new_keys = set(network["nodes"].keys()) - original_keys
|
|
|
|
|
stale_bridge_edges = [
|
|
|
|
|
(left_key, right_key)
|
|
|
|
|
for left_key, neighbors in network["edges"].items()
|
|
|
|
|
for right_key, _weight, _carrier in neighbors
|
|
|
|
|
if left_key in bridge_keys and right_key in bridge_keys
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
self.assertEqual("segment_projection", mode)
|
|
|
|
|
self.assertEqual(projected_key, next(iter(new_keys)))
|
|
|
|
|
self.assertEqual([], stale_bridge_edges)
|
|
|
|
|
self.assertEqual(4, network["segment_count"])
|
|
|
|
|
|
|
|
|
|
def test_eplan_connection_route_prefers_wire_duct_over_auxiliary_range(self):
|
|
|
|
|
_install_fake_freecad()
|
|
|
|
|
terminal_objects, _wiring_objects, routing_network, auto_routing = _reload_modules()
|
|
|
|
|
@ -719,6 +758,29 @@ class AutoRoutingTest(unittest.TestCase):
|
|
|
|
|
end_point = access_carriers[0].Points[-1]
|
|
|
|
|
self.assertEqual((50.0, 0.0, 20.0), (end_point.x, end_point.y, end_point.z))
|
|
|
|
|
|
|
|
|
|
def test_eplan_connection_route_enters_network_at_segment_projection(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(50, 0, 0))
|
|
|
|
|
end = _terminal(doc, terminal_objects, "TerminalEnd", "terminal-end", app.Vector(150, 0, 0))
|
|
|
|
|
routing_network.create_route_carrier(
|
|
|
|
|
doc,
|
|
|
|
|
[app.Vector(0, 0, 20), app.Vector(200, 0, 20)],
|
|
|
|
|
project_uuid="project-1",
|
|
|
|
|
kind="WireDuct",
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
result = auto_routing.route_eplan_connection_between_terminals(doc, start, end)
|
|
|
|
|
|
|
|
|
|
self.assertEqual("segment_projection", result["network"]["entry_point_mode"])
|
|
|
|
|
self.assertEqual("segment_projection", result["network"]["exit_point_mode"])
|
|
|
|
|
self.assertNotIn(0.0, [point.x for point in result["points"][1:-1]])
|
|
|
|
|
self.assertNotIn(200.0, [point.x for point in result["points"][1:-1]])
|
|
|
|
|
self.assertLess(result["length_mm"], 150.0)
|
|
|
|
|
|
|
|
|
|
def test_generate_routing_path_network_adds_wiring_cut_out_carrier(self):
|
|
|
|
|
_install_fake_freecad()
|
|
|
|
|
terminal_objects, _wiring_objects, routing_network, _auto_routing = _reload_modules()
|
|
|
|
|
@ -1383,7 +1445,11 @@ class AutoRoutingTest(unittest.TestCase):
|
|
|
|
|
],
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
report = auto_routing.route_eplan_connections_from_payload(doc, payload)
|
|
|
|
|
report = auto_routing.route_eplan_connections_from_payload(
|
|
|
|
|
doc,
|
|
|
|
|
payload,
|
|
|
|
|
options={"avoid_obstacles": False},
|
|
|
|
|
)
|
|
|
|
|
message = auto_routing.format_eplan_connection_route_report(report)
|
|
|
|
|
|
|
|
|
|
self.assertEqual(1, report["route_status_counts"]["Routed"])
|
|
|
|
|
|