fix: 保留FreeCAD自动布线失败前的旧线

dev
Zhaowenlong 3 weeks ago
parent f903badd22
commit 065ae182e3

@ -1028,9 +1028,6 @@ def route_eplan_connection_between_terminals(
if not project_uuid:
raise AutoRoutingError("Project UUID is required for routing connections.")
if opts.get("replace_existing", True):
_remove_existing_routing_connections(doc, start_uuid, end_uuid, wire_uuid=wire_uuid)
route_data = build_network_route(
start_terminal,
end_terminal,
@ -1054,6 +1051,9 @@ def route_eplan_connection_between_terminals(
collisions = detect_collisions(points, obstacles, ignored_segment_indices=ignored_collision_segments)
status = "CollisionWarning" if collisions else "Routed"
if opts.get("replace_existing", True):
_remove_existing_routing_connections(doc, start_uuid, end_uuid, wire_uuid=wire_uuid)
wire_name = _unique_name(doc, _wire_object_name(start_terminal, end_terminal, wire_uuid))
wire = _create_wire_geometry(doc, wire_name, points)
wire.Label = wire_label or wire_mark or wire_uuid or "QET Routed Connection"

@ -362,6 +362,40 @@ class AutoRoutingTest(unittest.TestCase):
self.assertEqual("terminal-start-new", routed_wires[0].QetStartTerminalUuid)
self.assertEqual("terminal-end-new", routed_wires[0].QetEndTerminalUuid)
def test_eplan_connection_route_keeps_existing_wire_when_replacement_fails(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, 20), app.Vector(100, 0, 20)],
project_uuid="project-1",
kind="WireDuct",
)
first = auto_routing.route_eplan_connection_between_terminals(
doc,
start,
end,
wire_uuid="wire-1",
)["wire"]
routing_network.clear_route_carriers(doc)
with self.assertRaises(auto_routing.AutoRoutingError):
auto_routing.route_eplan_connection_between_terminals(
doc,
start,
end,
wire_uuid="wire-1",
)
routed_wires = list(wiring_objects.iter_routed_wire_objects(doc))
self.assertEqual([first], routed_wires)
self.assertIsNotNone(doc.getObject(first.Name))
def test_route_carrier_styles_make_generated_objects_distinguishable(self):
_install_fake_freecad()
terminal_objects, _wiring_objects, routing_network, _auto_routing = _reload_modules()

Loading…
Cancel
Save