Commit Graph

787 Commits

Author SHA1 Message Date
20d66e9988 fix: 自由路径取点改用 ForceReinitializeToolPlugin 而非 StartClickTool
StartClickTool 会把 PathEditState 设为 AddingPoints,导致点击走 SetPreviewPoint
分支(白色半透明临时预览点,不保存)。改为与地面路径一致:用
ForceReinitializeToolPlugin 保持 Creating 状态,点击走 AddPathPointIn3D
正常保存路径点并渲染连线。
2026-07-31 16:27:15 +08:00
4f0723f56f fix: 修正过弯检测测试期望值 + FreePathTests 加入csproj
过弯检测 CornerTurnCheckHelper 代码正确(maxLength 均为正),
但 6 个测试期望值与公式不符(7e71387 改算法时测试未同步)。
已按公式修正测试:补充 maxLength 断言,调整长度阈值。
另修复 FreePathTests 一处断言(斜路径 forward/up 分量)。
并将 FreePathTests.cs 显式加入 UnitTests.csproj(此前未编译运行)
2026-07-31 16:10:32 +08:00
002618f371 feat: 自由路径(Free Path)一级路径类型
- PathType 新增 Free=3,显示'自由'
- 动画:统一包围盒中心对齐,方案1姿态(forward=切线,up=世界up正交化)
  复用 CanonicalRailPoseBuilder,新增 TryCreateFreePathRotationForFrame/AtStart
- 渲染:通行空间垂直偏移0(路径点即物体中心)
- 路径管理器:StartCreatingNewRoute/FinishEditing 支持 Free
- UI:PathEditingView 新增'自由'按钮 + NewFreePathCommand
- 数据库:枚举存 int 无需 schema 变更
- 迁移:加载时 IsTwoPointVertical 吊装路径 → Free
- 单测:新增 FreePathTests(6个全通过)

注:CornerTurnCheckHelperTests 6个失败为分支起点已存在的 pre-existing 问题,与本次无关
2026-07-31 16:02:25 +08:00
469f7efe2f docs: 自由路径 - 确认决策点并标记步骤1实施中 2026-07-31 15:52:35 +08:00
8d7c2eacec docs: 自由路径设计方案(含实施进度跟踪) 2026-07-31 15:52:27 +08:00
3aec23139f docs: 过弯检测精度说明 - 工程对比数据修正为1-50mm/9个数量级 2026-07-31 15:52:25 +08:00
745f4c50e9 docs: 过弯检测精度说明 - 补充转角示意图和PDF版本 2026-07-27 23:09:13 +08:00
423360037f docs: 过弯检测算法精度说明文档(含算法原理、精度分析、验证方法) 2026-07-27 23:08:08 +08:00
c3731316d4 fix: 恢复状态栏对齐,仅缩减帮助按钮右侧空间 2026-07-16 11:16:36 +08:00
a1bc23d1dc chore: 状态栏右侧边距和padding继续缩减 2026-07-16 11:12:18 +08:00
a782e29dea chore: 状态栏右侧边距减半 2026-07-16 11:11:24 +08:00
2fe3b495e7 fix: 帮助按钮前竖线改为 TextBlock | 风格,去掉中间列右边距 2026-07-16 11:09:56 +08:00
6d2778047c fix: 竖线分隔改用 Rectangle 替代 Separator 2026-07-16 11:07:10 +08:00
b2481ffa5b chore: 状态栏帮助按钮前加竖线分隔 2026-07-16 11:05:27 +08:00
cd615badb9 docs: 帮助窗口补充批处理任务页签说明 2026-07-16 11:00:24 +08:00
d7b5cf38f1 fix: 系统管理的实验特性区保持原名,不改高级 2026-07-16 10:56:35 +08:00
bbd58cdff0 chore: 关于按钮移至帮助窗口内,关闭按钮左侧 2026-07-16 10:43:16 +08:00
ce4b2a0c06 chore: 状态栏左侧空白缩小,显示更多信息 2026-07-16 10:38:09 +08:00
b179adb2a0 chore: 实验特性区改名为高级,移除emoji前缀 2026-07-16 10:34:11 +08:00
80bd7b7c65 chore: 预计算高亮按钮移至折叠的实验特性区 2026-07-16 10:30:29 +08:00
b00f0093ab fix: 坐标系检测按钮移至快速取面的空位 2026-07-16 10:25:41 +08:00
5e0af1def7 chore: 功能测试区更名为实验特性,移除快速取面按钮 2026-07-16 10:22:30 +08:00
c35138ef25 feat: 坐标系检测按钮加入 Fragment 矩阵分析法(选一个水平物体后可用) 2026-07-16 10:14:07 +08:00
00afbeec73 chore: 坐标系检测按钮移至功能测试区 2026-07-16 10:06:44 +08:00
823c2de74d refactor: 合并坐标系设置——FragmentUp 自动从 CoordinateSystemManager 派生,删除独立的 FragmentUp 控件和检测按钮 2026-07-16 10:03:03 +08:00
0629384639 feat: 包围盒按钮图标替换为线框立方体;过弯检测按钮图标增强为L形通道+方块 2026-07-16 09:41:47 +08:00
a0a0687bde feat: 包围盒图标改为双立方体线框样式,与剖面盒图标风格统一 2026-07-16 09:09:38 +08:00
c379eb1bed feat: 替换包围盒信息和过弯检测按钮图标为更合适的几何图形 2026-07-16 08:52:08 +08:00
86abf2bf8d fix: 别名树重启后显示错误 — EnsurePathLoaded 硬编码 siblingIndex=0 导致同名兄弟节点映射到同一 key;SetDataStore 补刷别名;别名明细日志改为 DEBUG 2026-07-14 10:28:22 +08:00
69bf5d6e39 fix: 剖面盒聚焦按钮在无选中/无路径时不应清除或操作剖面盒,部署脚本加入管理员提权 2026-07-14 09:56:52 +08:00
9012461d59 feat: Ribbon 多语言支持,新增 en-US/zh-CN 本地化 XAML 2026-07-12 13:05:39 +08:00
6666d30413 fix: 别名树右键菜单移除冗余的「在视图中聚焦」,统一术语为「子树别名」 2026-07-12 11:34:23 +08:00
5341fa145d fix: 别名树 _nodeMap key 格式不统一导致导入/粘贴后显示错误 2026-07-12 11:19:48 +08:00
ad4067cf1c fix: 过弯检测公式判断方向、对话框文案、三分搜索方向 2026-07-08 13:18:32 +08:00
7e71387fce fix: 过弯检测三分搜索方向错误, 文章公式 L(θ) = (C₁-W·cosθ)/sinθ + (C₂-W·sinθ)/cosθ 2026-07-08 13:06:17 +08:00
4f9206da2a feat: 过弯检测工具(纯解析几何公式) 2026-07-08 12:55:47 +08:00
70fee3cf3a fix: 碰撞报告容差单位错误 & 导入路径增量刷新; docs: AGENTS.md 构建脚本 2026-07-07 20:38:59 +08:00
ef22e49491 feat: 别名树子树别名导出/导入/复制/粘贴功能 2026-07-07 20:00:08 +08:00
b53471c022 chore: 移除状态栏临时性" 恢复剖面\按钮 2026-07-07 07:36:32 +08:00
809df425ee fix: 剖面盒关闭时恢复 Planes 剖面不切换模式,修复 UI 指示器不显示
根因:ClearClipBox() 发送的是 Box 模式 JSON + Enabled:false,
将 ClipPlaneSet 模式从 Planes 切到 Box。后续再应用 Planes JSON
时模式又切回来,Navisworks 在该切换过程中未刷新 Planes 指示器。

修复:清除时不调用 ClearClipBox()(Box JSON),改为:
1. 发 Planes 模式 + Enabled:false(保持模式,仅禁用)
2. 发 Planes 模式 + Enabled:true(保持模式,仅切换启用)
全程模式不变,指示器正常显示。

移除已不需要的注释和调试日志。
2026-06-30 20:49:48 +08:00
17d774154d fix: 关闭剖面盒后恢复剖面状态时同时显示UI指示器
JSON 透传方式不触发 Navisworks 剖面工具 UI 指示器。
改为解析保存的 JSON 自动识别 Box/Planes 模式:
- Box 模式:提取包围盒,用 ApplyClipBox 重建(已知能显示指示器)
- Planes 模式:提取平面数据 (Normal/Distance),重建 Planes JSON
移除旧注释中关于手动对齐的说明
2026-06-30 20:37:29 +08:00
0d4498e03d chore: bump version to 0.16.1, update changelog 2026-06-28 17:48:56 +08:00
6ef866d1dc fix: 路径切换保留 lift 避免物体浮空,物体参数同步优先读 AABB 缓存
路径切换问题:
- 切换路径时 lift 被重置为 0,GetAnimatedObjectGroundContactHeight
  用 correction 投影算出错误高度(~4.27m),物体浮空
- 改为保留 lift(离地高度不变),路径切换后物体保持正确位置

可视化宽度问题:
- 路径切换后物体参数同步(SyncAnimationViewObjectParameters)
  调用 TryGetCurrentRouteRealObjectPlanarProjectedExtents,
  用 correction 投影算失真尺寸覆盖正确值
- 改为优先读 AnimationControlViewModel 的 _autoAabbSx 缓存
  (由 MeasureXAlignedAabbAndSetCache 实测得到)
- 新增 TryGetCachedAabbSizes 公开缓存给外部
2026-06-28 12:50:28 +08:00
da6b6cb481 chore: remove temporary wpftmp csproj files 2026-06-26 09:20:45 +08:00
105061bade feat: 贴合地面功能 + 通行空间尺寸准确化 + UI修复 (0.16.0)
贴合地面:点选物体表面自动贴地+搜索最小截面对齐路径
- AlignToGroundMinCrossSectionYawSearcher 搜索yaw
- ComposeHostCorrection 扣除CAD yaw+pathYaw避免重复旋转
- ComputeGroundLiftForCorrection 实测底边算lift

通行空间尺寸:实际旋转物体到X轴方向测AABB再转回
- MeasureXAlignedAabbAndSetCache 自动调整和贴合地面共用
- ObjectRotationCorrection setter 清空缓存修复手动改角度不同步

UI:调整物体窗口按钮区改Grid布局真正居中
版本号 0.15.8 -> 0.16.0
2026-06-26 09:17:46 +08:00
3cb5d8d423 fix: 贴地后用实际旋转物体到X轴方向测AABB获取准确通行空间尺寸
路径斜向时世界AABB投影偏大,纯数学旋转AABB也会膨胀。
改为用Navisworks API实际旋转物体到X轴方向测量AABB,再转回来:
- 算路径方向相对X轴的夹角 angleToX
- 绕hostUp旋转物体 -angleToX 使路径对齐X轴
- 测AABB:X=沿路径长度,up轴=高度,非up轴=宽度
- 转回来恢复姿态

清理STEP1-STEP6诊断日志,保留STEP7为正式日志。
2026-06-25 08:53:14 +08:00
5308552b40 修改贴合后,路径宽度和通行空间高度不正确的问题 2026-06-24 20:42:51 +08:00
66e68c6bd1 fix: 贴合地面后正确回写 correction 和 lift,确认/动画不再偏移
贴地后 overrideQ 是绝对旋转,但 _objectRotationCorrection 语义是
相对于 baseline(pathYaw) 的增量,且 PathAnimationManager 增量链从
CAD 姿态出发:finalQ = qup(pathYaw-currentYaw) * correctionHostQ * cadQ。
之前直接转 overrideQ 导致确认/动画时重复旋转。

核心改动:
- ComposeHostCorrection 接受 cadQ,从中提取 currentYaw,
  correctionHostQ = qup(currentYaw - pathYaw) * overrideQ
- HostQuaternionToCanonical 用相似变换 R_canon = M^-1 * R_host * M
  (非列向量映射,保证 Identity 不变性)
- CanonicalQuaternionToHostEulerCorrection 加 hostType 参数重载,
  去除全局 CoordinateSystemManager 依赖
- ComputeGroundLiftForCorrection:与自动调整同方法实测底边算 lift,
  finally 用新 correction+lift 完整重建(skipCadRestore=false),
  使物体停留在贴地等价姿态
- 新增 5 个增量链闭环单测(含 CAD 歪斜场景)
2026-06-24 08:24:38 +08:00
cf6b2ef959 fix: 修复 7 个 pre-existing 单测失败(optimizer 初始候选 + ZUp 测试语义)
ObjectPassageProjectionOptimizer.OptimizeWithEvaluator:
- 初始化 bestScore 评估 correction=Zero 作为初始候选
- 旧逻辑 bestScore=Invalid 导致 Zero 从未被评估,
  当 baseline 已对齐路径时随机采样必然替换它,refine 收敛不回 0
- 影响 3 个 Optimize 测试:baseline 已对齐时找不到 correction=0

ZUp 测试语义修正(4 个):
- LocalEulerRotationCorrection 语义:Y=up轴/yaw, Z=non-up轴
- ZUp 下 up=Z, non-up=Y,绕 Z(up) 转应使用 YDegrees 不是 ZDegrees
- 旧测试在 ZUp 下把 ZDegrees 当字面 Z 轴,与实现语义矛盾
2026-06-23 23:18:42 +08:00
7f3be8495c fix(tests): 修复 AliasTreeTests 编译错误并更新过时旧格式兼容测试
- SetAlias 调用补全缺失的 alias 参数(DeleteByPathPrefix 测试)
- 移除 4 个旧格式兼容测试,改为期望抛 FormatException
  (FromKey 已按 AGENTS.md "不向后兼容" 原则移除旧格式支持)
2026-06-23 23:12:40 +08:00