Commit Graph

13 Commits

Author SHA1 Message Date
539e4a9f2c perf: 剖面盒遍历组节点聚合盒剪枝(大型模型 ~1.8 倍提速)
SectionBoxExporter:
- TraverseAndCollect 对非几何节点(组节点)先查聚合包围盒,
  与剖面盒不相交 → 整棵子树跳过(NW BoundingBox 为文档级缓存 O(1),
  已用 Architecture.nwd 2 万节点 + 全厂模型 403MB 验证)
- GetObjectsAndHiddenItems 增加 prune 参数(默认 true,false 供性能对比)

验证(全厂设备模型 403MB,100x100x40 测试盒):
- 剪枝 72.9s vs 无剪枝 129.9s(~1.8 倍)
- 盒内对象/隐藏节点完全一致(3521/80043,正确性无变化)
- Architecture.nwd(2 万节点):273ms vs 580ms(~2.1 倍)
- 集成测试 25/25

测试基础设施:
- export-section-box 端点加 prune 参数 + traversalMs 计时
- bbox-profiling 端点加 enum=false 模式(根盒查询,避免大模型全枚举 10+ 分钟)
- BatchQueueF1ProcessAutomationTests 末尾等待后台批处理完全退出
  (修复 F1 后台任务残留导致后续 BatchQueue_AddItems isExecuting 断言失败)
- batch-queue-status 端点加 isExecuting 字段
2026-08-06 10:28:59 +08:00
f38bae137a feat: F1 批处理端到端测试 + batch-queue-status 端点
服务端:
- 新增 GET /api/test/batch-queue-status(查询队列项状态:
  id/status/errorMessage/collisionCount/detectionRecordId,供测试轮询)
- BatchQueueManager 增加 internal GetDatabase() 访问器

客户端:
- NavisworksTestAutomationClient 新增 BatchQueueStatusAsync /
  BatchQueueProcessAsync

测试:
- BatchQueueF1ProcessAutomationTests(TestCategory=NavisworksIntegrationF1,
  不在默认全量内):add(虚拟物体 F1 场景)→ process → 轮询 status
  至 Completed → 断言碰撞报告。单独跑约 30 秒。

AGENTS.md:记录 F1 测试用法(bat 参数含 = 会截断,用 FullyQualifiedName~)
2026-08-06 00:29:58 +08:00
832caaffef feat: F1 剖面盒自动检测完整链路跑通(真实物体)
- SectionBoxBatchDetector:路径剖面盒(复用 SectionClipHelper.CalculatePathClipBox 产品语义)→ 导出局部 NWD → 副实例检测 → 报告回传
- 移动物体跨实例解析:导出剖面盒保留节点树结构,去掉根后主/副层级链一致,按 ancestorChain 匹配(用户验证结论)
- 副实例临时库:TRANSPORTPLUGIN_TEST_DB_PATH 环境变量显式指定,createIfMissing 时强制创建(解决检测记录无法落库→报告失败)
- 副实例进程定位:cmd start detach 后按新 Roamer PID 定位并关闭
- batch-queue-add:真实物体写入 ModelItemReferences(MovingObject),F1 从引用读移动物体名/PathId/层级链
- batch-queue-process:改后台执行立即返回(模态进度条不阻塞 HTTP),调用方轮询数据库状态
- 集成测试标准场景:自动测试_Ground 更新(用户修改)+ Ground 真实物体改 Chair Lounge Couch Double

验证:F1 Ground + Chair Lounge Couch Double,碰撞 28/28,链路完整
2026-08-05 12:11:37 +08:00
ac454196f1 feat: 集成测试补 T16 剖面盒导出(25/25 通过)
- 服务端新增 export-section-box 端点:mode=bbox(指定包围盒,测试可控)/ mode=activeView(UI 剖面盒)
- 新增 SectionBoxExportAutomationTests:导出 NWD 文件存在/对象数/文件大小/隐藏节点断言
- 客户端 ExportSectionBoxAsync 方法
2026-08-04 18:44:01 +08:00
8e5d9e845f feat: 集成测试补 T11-T15(P0+P1+P2 全部完成,24/24 通过)
- T11 路径编辑(PathEditingAutomationTests):删除点/更新位置/正交化/去环
- T12 路径导出(ExportImportRoundTripAutomationTests):XML/JSON 导出→导入回环
- T13 播放控制(AnimationPlaybackControlAutomationTests):pause 验证帧停止/resume 前进
- T14 批量队列(BatchQueueAutomationTests):队列添加/计数递增
- T15 路径分析(PathAnalysisAutomationTests):评分结构验证
- 服务端新增 5 端点:export-route-file/edit-route/animation-playback-control/batch-queue-add/analyze-path
- 产品 bug 修复:PathDatabase.CollisionResults 表已废弃→GetCollisionCount 改查 CollisionReports、
  SaveCollisions 异常保护;路径编辑真删点走 PathRoute.RemovePoint(RemovePathPoint 仅 3D 标记)

验证:集成测试 24/24 通过,完整集 74.6s(15fps/5s 动画)
2026-08-04 18:39:16 +08:00
59e323f9bb feat: 集成测试补 T07-T10(P0+P1 全部完成,18/18 通过)
- T07 障碍绕行(AutoPathObstacleDetourAutomationTests):跨模型起终点直线 11.0m→规划 11.57m 绕行,blocked=0
- T08 多策略(同测试类):Shortest/Straightest 参数回传 + 均规划有效路径
- T09 网格诊断(RouteGridDiagnosticsAutomationTests):网格参数/路径点覆盖/段一致性
- T10 持久化(DetectionRecordPersistenceAutomationTests):检测记录重载验证(动画参数 15fps/5s 落库)
- 服务端:PathPlanningManager.GetDetectionRecordById + /api/test/detection-record 端点
- 客户端:RunAutoPathAsync 支持 strategy、GetRouteGridDiagnosticsAsync、GetDetectionRecordAsync

验证:集成测试 18/18 通过,完整集 65.8s
2026-08-04 18:21:18 +08:00
44214baa00 feat: 集成测试补 T05/T06 + 动画加速与多项基础设施修复
测试新增:
- T05 Free 自由路径(FreePathAutomationTests:完整动画 + 逐帧位置=路径点)
- T06 碰撞报告内容断言(CollisionReportAssertions 接入虚拟/真实物体测试)

服务端增强:
- list-model-items 端点(枚举物体:DisplayName/PathId/包围盒中心/祖先链)
- run-virtual-collision-test 支持 frameRate/durationSeconds(测试动画加速:15fps/5s)
- 测试执行串行锁(SemaphoreSlim,防客户端超时后任务占用 UI 线程并发污染)
- 标准路径清单/XML 增加自动测试_Free

Bug 修复:
- AnimationControlViewModel.InvalidateLastGeneratedReport(跨测试碰撞报告残留)
- 真实物体身份校验 ReferenceEquals→InstanceGuid(NW ModelItem 实例不保证同引用)
- 真实物体动态解析(ModelPath 跨会话不稳定,禁止硬编码 PathId)
- PathImportValidity 测试点 Id 随机化(PathPoints.Id 全局主键,p1/p2 固定会冲突)
- start-navisworks.ps1:启动前清理 AutoSave(避免恢复弹窗拦截)、文件关联打开模型、dismiss 兜底、启动 15s→4.4s

验证:集成测试 13/13 通过,完整集 6min→59.6s(动画 15fps/5s)
2026-08-04 18:13:26 +08:00
8f477c0e1c feat: 集成测试新增动画逐帧状态验证(P0 T04)
- 服务端新增 probe-animation-frames 端点:生成动画后 SeekToProgress 到多个进度点,返回物体跟踪位置/yaw
- 新增 AnimationFrameProbeAutomationTests:
  - Ground:起点/终点 XZ 匹配路径点、高度恒定(平面链)、中间帧在起终点之间
  - Hoisting:吊装剖面(起吊地面→悬挂升高→下降落地)+ 水平平移
- 集成测试 11/11 通过(P0 高风险区全部完成:真实物体 + 逐帧状态)
2026-08-04 17:11:57 +08:00
b5cfcbf8ac feat: 集成测试新增真实物体动画验证(P0 T01-T03)
- 服务端 run-virtual-collision-test 支持 useVirtualObject=false + animatedObjectPath(ModelPath 定位,解决 DisplayName 重名)
- ResolveAnimatedObjectFromQuery 支持按 CreatePathId 的 PathId 精确匹配
- 修复 ModelItem 身份校验:ReferenceEquals 对 NW API 同一逻辑对象不同实例不可靠,改用 InstanceGuid 比较
- 新增 RealObjectAnimationAutomationTests:Ground/Hoisting/Rail 真实物体动画完整流程
  (42" Diameter=0/0/660/0,25" x 25"=0/0/769/0)
- 集成测试 9/9 通过(3 虚拟碰撞 + 1 autoPath + 2 导入 + 3 真实物体)
2026-08-04 16:52:37 +08:00
c9c29c7170 refactor: 依赖 Navisworks 的路径导入验证从单测迁移至集成测试
- 删除 UnitTests/Core/PathPersistenceTests.cs:单测进程无法初始化 Navisworks API,
  Rail/Hoisting 路径导入必经的长度计算(Point3D 访问)必然失败,测试'假通过'且每次产生 ERROR 日志噪音
- 新增集成测试 PathImportValidityAutomationTests:验证完整流程
  JSON/XML 导入 → Rail 属性映射 → 长度计算(含文档单位换算)→ 切换路径 → 完整动画/碰撞流程
- TestAutomationHttpService 新增 /api/test/import-route-file 端点(overwrite 语义保证可重复执行)
- NavisworksTestAutomationClient 新增 ImportRouteFileAsync/SelectRouteAsync/routeName 重载
- 修正 auto-test-routes.xml Rail 属性为有效枚举值(UnderRail/RailCenterLine,与原路径一致)

验证:单测 255/255 且 API must be initialized 错误日志归零;集成测试 6/6 通过
2026-08-02 21:19:23 +08:00
454f1e6584 Fix auto path grid restore and validation 2026-04-26 19:11:03 +08:00
1a9d0972f0 Fix auto path obstacle geometry collection 2026-04-14 09:22:01 +08:00
b849bd9aed Add Navisworks automation integration tests 2026-04-13 02:33:29 +08:00