feat: 布线报告显示网络调参效果

dev
Zhaowenlong 3 weeks ago
parent 2d7ad273ef
commit e689d4edf1

@ -370,6 +370,8 @@ QetWiringCutOutBridgeExtensionMm = 20.0
批量生成布线连接后,面板/控制台报告会从第一条可追踪路径中提取一条“路径示例”,显示导线经过的源对象标签,便于快速确认线路是否进入了预期线槽、过线孔和支撑面。
批量布线报告还会汇总本批次路线中使用到的路径网络特征:如果路线依赖相邻线槽自动桥接,报告会显示自动桥接段数;如果主动避障时屏蔽了穿过障碍包围盒的网络边,报告会显示避障屏蔽段数。这里采用路线中的最大值展示,避免多条导线共用同一网络时重复累加。
### 5.3 布线连接功能
已完成:
@ -450,6 +452,7 @@ tests/python/freecad_exchange_auto_routing_test.py
30. `3D 布线连接` 面板提供“线槽桥接容差 mm”设置面板生成/检查/布线流程会使用该值;网络检查报告会显示自动桥接段数。
31. `3D 布线连接` 面板提供“端子接入最大距离 mm”和“端子出线长度 mm”设置用于适配真实机柜里端子离线槽远近不同、设备端子方向不同的情况。
32. 布线路径网络检查会在端子未接入诊断中记录当前端子接入最大距离和端子出线长度,并在中文报告里显示最大接入距离。
33. 批量布线报告会显示路径网络自动桥接段数和主动避障屏蔽段数,方便核对调参和避障是否实际参与求路。
已完成 FreeCAD smoke

@ -1734,6 +1734,21 @@ def _route_source_sample_text(report):
return ""
def _route_network_metric_max(report, key):
maximum = 0
for route in report.get("routes", []) or []:
if not isinstance(route, dict):
continue
network = route.get("network", {})
if not isinstance(network, dict):
continue
try:
maximum = max(maximum, int(network.get(key, 0) or 0))
except Exception:
continue
return maximum
def format_eplan_connection_route_report(report):
message = "批量生成布线连接完成routed={0}, collision_warnings={1}, missing_terminals={2}".format(
report.get("routed", 0),
@ -1776,6 +1791,15 @@ def format_eplan_connection_route_report(report):
total_length_mm = float(report.get("total_length_mm", 0.0) or 0.0)
if total_length_mm > 0.0:
message += "\n布线连接总长度:{0:.1f} mm。".format(total_length_mm)
bridged_segments = _route_network_metric_max(report, "bridged_segments")
blocked_segments = _route_network_metric_max(report, "blocked_segments")
network_parts = []
if bridged_segments > 0:
network_parts.append("自动桥接 {0} 段相邻线槽".format(bridged_segments))
if blocked_segments > 0:
network_parts.append("避障屏蔽 {0}".format(blocked_segments))
if network_parts:
message += "\n路径网络:{0}".format("".join(network_parts))
route_source_sample = _route_source_sample_text(report)
if route_source_sample:
message += "\n{0}".format(route_source_sample)

@ -2188,6 +2188,27 @@ class AutoRoutingTest(unittest.TestCase):
self.assertIn("路径示例:导线 N4111 经过 QF1:A1、线槽A、过线孔A。", message)
def test_route_report_includes_network_bridge_and_blocked_segment_counts(self):
_install_fake_freecad()
_terminal_objects, _wiring_objects, _routing_network, auto_routing = _reload_modules()
report = {
"routed": 1,
"collision_warnings": 0,
"skipped_missing_terminal": 0,
"routes": [
{
"network": {
"bridged_segments": 1,
"blocked_segments": 2,
},
}
],
}
message = auto_routing.format_eplan_connection_route_report(report)
self.assertIn("路径网络:自动桥接 1 段相邻线槽,避障屏蔽 2 段。", message)
def test_route_eplan_connections_report_keeps_route_identity_and_diagnostics(self):
_install_fake_freecad()
terminal_objects, _wiring_objects, routing_network, auto_routing = _reload_modules()

Loading…
Cancel
Save