diff --git a/CHANGELOG.md b/CHANGELOG.md index 3563c9e..5210135 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,37 @@ # NavisworksTransport 变更日志 +## [0.18.4] - 2026-08-06 + +### ✨ 批处理(F1 副实例检测)碰撞结果完整落库 + +- **碰撞数回写主库检测记录**:此前 F1 副实例检测结果只更新队列表,动画检测历史表格显示碰撞数 0;现 F1 完成后 `UpdateCollisionDetectionResult` 回写主库(历史表格与批处理列表一致) +- **碰撞对象明细落库**(`ClashDetectiveCollisionObjects`):对象名 + 主模型 PathId/ModelIndex——报告页面可定位真实物体(此前报告页面数据全 0) +- **碰撞数语义明确**:报告对话框“总碰撞数”= 碰撞对总数(与历史表格一致),“碰撞构件”= 唯一被撞对象数(同一物体多次碰撞时碰撞对 > 唯一对象,两个数都正确) + +### 🔧 F2 映射改为纯 PathId(根治重名映射错误) + +- 根因:原层级链(名字序列)匹配在重名模型(Revit 嵌套实例)中映射到**错误实例**,导致报告聚焦错误对象触发 NW 原生视角崩溃 +- 修复:导出时 `BuildSegmentMap` 全树深度遍历(跳过 itemsToHide,与 NW `ExportToNwd(ExcludeHiddenItems)` 语义一致,已用固定导出文件对比验证)——**段序列 → 主 PathId** 映射(2112 条);副实例碰撞对象 PathId 段序列**直查表**——无任何名字/链匹配 +- 效果:Factory 大模型映射率 0/5 → 4/4;报告崩溃消除 + +### ⚡ 批处理性能与可靠性 + +- **副实例关闭改直接 Kill**:优雅关闭触发 NW 原生“模型已修改是否保存”弹窗阻塞 10 秒(每任务)——临时检测进程直接 TerminateProcess,关闭秒级 +- **导出文件时间戳后缀**:同一 itemId 重复执行(残留状态重置重跑)不再与旧副实例文件句柄冲突 +- **副实例启动前文件校验**:存在/非空/未被占用 → 明确错误替代 NW 原生加载失败弹窗 + +### 🧪 测试与自动化基础设施 + +- **`ModelItemTreeWalker` 通用遍历工具**:统一 IsHidden 剪枝 + 聚合盒剪枝 + 后序传播,迁移 SectionBoxExporter / ModelItemAnalysisHelper / ClashDetectiveIntegration 三处全局遍历 +- **`AutomationModeContext` 统一自动模式**:批处理全程 + 测试请求全程窗口自动选择默认动作并立即关闭(碰撞分析/碰撞报告/重复配置/完成汇总等零残留)——只改显示行为,不修改业务逻辑(预计算分析/重复检查流程完整执行) +- **F1 端到端集成测试**(`NavisworksIntegrationF1`,单独运行约 30 秒)+ `batch-queue-status` 端点 +- 集成测试脚本 `run-integration-tests.bat`(支持过滤器子集,避免反复跑全量) + +### 验证 + +- 集成测试 25/25;F1 端到端 30 秒通过 +- Factory.nwd(300M 大模型)实测:纯 PathId 映射 4/4、碰撞明细落库、报告打开正常无崩溃、副实例关闭秒级 + ## [0.18.3] - 2026-08-06 ### ⚡ 性能优化 diff --git a/VERSION.md b/VERSION.md index aad11e3..05cbff0 100644 --- a/VERSION.md +++ b/VERSION.md @@ -1,3 +1,3 @@ # 版本号 -0.18.3 +0.18.4