diff --git a/docs/FreeCAD 3D自动布线设计方案.md b/docs/FreeCAD 3D自动布线设计方案.md index b65a3de..93acab2 100644 --- a/docs/FreeCAD 3D自动布线设计方案.md +++ b/docs/FreeCAD 3D自动布线设计方案.md @@ -87,7 +87,7 @@ terminal_uuid 相邻线槽端点允许存在小间隙。默认情况下,两个 `WireDuct` 端点距离不超过 5 mm 时会被视为相邻并自动桥接;自动布线选项 `adjoining_duct_tolerance` 可以按需要调大或调小,用于适配不同建模精度和线槽端部留缝。 -FreeCAD 的 `3D 布线连接` 面板提供“线槽桥接容差 mm”数值框,手动测试时可直接调整这个选项;生成布线路径网络、检查布线路径网络和生成布线连接都会读取当前面板值。检查通过时,如果存在相邻线槽自动桥接,报告会显示自动桥接段数,便于确认当前容差是否生效。 +FreeCAD 的 `3D 布线连接` 面板提供“线槽桥接容差 mm”数值框,手动测试时可直接调整这个选项;生成布线路径网络、检查布线路径网络和生成布线连接都会读取当前面板值。面板摘要和检查报告都会按当前容差显示自动桥接段数,便于确认当前容差是否生效。 同一面板还提供“端子接入最大距离 mm”和“端子出线长度 mm”。前者用于控制端子距离最近路由网络超过多少毫米时不再生成 `TerminalAccess`,避免设备还没摆放好时生成超长悬空接入线;后者用于控制端子沿 LCS 出线方向先走出的短线长度,避免导线从设备壳体内部或端子原点直接折返。 diff --git a/src/Mod/FreeCADExchange/AutoRoutingPanel.py b/src/Mod/FreeCADExchange/AutoRoutingPanel.py index d6a6b8d..5d8dbcd 100644 --- a/src/Mod/FreeCADExchange/AutoRoutingPanel.py +++ b/src/Mod/FreeCADExchange/AutoRoutingPanel.py @@ -107,7 +107,16 @@ class AutoRoutingController: payload_wire_count = 0 if isinstance(payload, dict) and isinstance(payload.get("wires"), list): payload_wire_count = len(payload.get("wires") or []) - network = RoutingNetwork.network_summary(doc) + network = RoutingNetwork.network_summary( + doc, + adjoining_duct_tolerance=float( + self.routing_options().get( + "adjoining_duct_tolerance", + RoutingNetwork.DEFAULT_ADJOINING_DUCT_TOLERANCE, + ) + or 0.0 + ), + ) kinds = network.get("kinds", {}) if isinstance(network.get("kinds", {}), dict) else {} kind_text = "" if kinds: @@ -115,7 +124,10 @@ class AutoRoutingController: "{0}={1}".format(key, value) for key, value in sorted(kinds.items()) ) - return "端子:{0};导线任务:{1};QET导线:{2};路由网络:{3} 条 carrier / {4} 段 / {5} 节点{6}".format( + bridge_text = "" + if int(network.get("bridged_segments", 0) or 0) > 0: + bridge_text = ";桥接:{0}".format(network.get("bridged_segments", 0)) + return "端子:{0};导线任务:{1};QET导线:{2};路由网络:{3} 条 carrier / {4} 段 / {5} 节点{6}{7}".format( terminal_count, task_count, payload_wire_count, @@ -123,6 +135,7 @@ class AutoRoutingController: network.get("segments", 0), network.get("nodes", 0), kind_text, + bridge_text, ) def generate_routing_paths(self): diff --git a/tests/python/freecad_exchange_auto_routing_test.py b/tests/python/freecad_exchange_auto_routing_test.py index 8ce07ec..f56c227 100644 --- a/tests/python/freecad_exchange_auto_routing_test.py +++ b/tests/python/freecad_exchange_auto_routing_test.py @@ -1681,6 +1681,33 @@ class AutoRoutingTest(unittest.TestCase): self.assertEqual(1, report["routed"]) self.assertEqual(1, report["routes"][0]["network"]["bridged_segments"]) + def test_auto_routing_controller_summary_uses_adjoining_duct_tolerance(self): + _install_fake_freecad() + terminal_objects, _wiring_objects, routing_network, _auto_routing = _reload_modules() + auto_routing_panel = importlib.import_module("AutoRoutingPanel") + app = sys.modules["FreeCAD"] + doc = FakeDocument() + app.ActiveDocument = doc + terminal_objects.ensure_root_group(doc, "project-1") + routing_network.create_route_carrier( + doc, + [app.Vector(0, 0, 20), app.Vector(44, 0, 20)], + project_uuid="project-1", + kind="WireDuct", + ) + routing_network.create_route_carrier( + doc, + [app.Vector(56, 0, 20), app.Vector(100, 0, 20)], + project_uuid="project-1", + kind="WireDuct", + ) + + summary = auto_routing_panel.AutoRoutingController( + options={"adjoining_duct_tolerance": 15.0} + ).summary() + + self.assertIn("桥接:1", summary) + def test_eplan_connection_route_rejects_far_network_entry_to_avoid_huge_render_bbox(self): _install_fake_freecad() terminal_objects, _wiring_objects, routing_network, auto_routing = _reload_modules()