Commit Graph

736 Commits

Author SHA1 Message Date
75afba7670 docs: 去掉UTF-8显式设置,已配好pwsh profile 2026-06-10 17:48:48 +08:00
020e265918 docs: pwsh 命令加 UTF-8 输出编码设置 2026-06-10 17:45:16 +08:00
e9fb47d9ad docs: shell命令统一用pwsh执行 2026-06-10 17:44:43 +08:00
82caa3e155 feat: 贴合地面加入路径yaw补偿,物体旋转后长边对齐路径方向 2026-06-09 11:37:03 +08:00
63b59890e4 refactor: 贴合地面改为独立操作(选面即生效),确认按钮去分支,上下偏移默认物流车高度 2026-06-09 11:25:50 +08:00
999fffcaa7 fix: 贴合地面:恢复git版本旋转逻辑 + 底边贴地高度修正 2026-06-09 10:06:12 +08:00
034acb1d65 fix: 贴合地面旋转修正 — 路径起点法向量→CAD空间算对齐,直接 OverridePermanentTransform 施压
- 读路径起点 ActiveTransform 取 psQ,复位 CAD 后取 cadQ
- 路径起点世界法向量→inv(psQ)→局部→cadQ→CAD 世界法向量
- CAD 世界法向量→-hostUp 算 overrideQ
- 直接 OverridePermanentTransform 施加,不走 ApplyRotationCorrectionInPlace
- 待加平移
2026-06-09 08:42:42 +08:00
f75dcb1f50 refactor: use PathAnimationManager.ApplyQuaternionRotationInPlace
- New method mirrors proven ApplyRotationCorrectionInPlace pattern
- ViewModel only calls existing project APIs, no raw OverridePermanentTransform
2026-06-09 03:39:56 +08:00
3634551e53 fix: use incremental transform to preserve path start position
- Don't ResetPermanentTransform (keeps path placement)
- Apply rotation around object center as incremental transform
- T(-center) * R * T(center) via Transform3D.Multiply
2026-06-09 03:37:35 +08:00
c8d48755db fix: apply face-to-ground rotation directly via quaternion, skip Euler decomposition
- Use existing OverridePermanentTransform pattern from PathAnimationManager
- Compute quaternion from face normal → ground direction
- Apply directly as Rotation3D with center-preserving translation
- Sync tracked state after application
2026-06-09 03:32:26 +08:00
10a0ad754c fix: move face-to-ground mate logic from modal dialog to ViewModel
- Modal ShowDialog blocks Navisworks ToolPlugin message loop
- Now: '贴地面' sets MateToGroundRequested flag, closes dialog
- AnimationControlViewModel handles FaceInferToolPlugin activation
- OnFaceToGroundInferred computes rotation and applies directly
2026-06-09 03:22:50 +08:00
2f16ec0d43 fix: add debug log, use NavisApplication alias in EditRotationWindow 2026-06-09 03:18:20 +08:00
9ea3cc0e02 feat: add '贴地面' face-to-ground mate in EditRotationWindow
- New button activates FaceInferToolPlugin to pick face on object
- Computes rotation from face normal to ground direction
- Decomposes to ZYX Euler angles, fills X/Y/Z fields
- User can preview and confirm as usual
2026-06-09 03:12:22 +08:00
2e959c16c9 chore: bump version to 0.15.8, update changelog 2026-06-09 03:01:18 +08:00
ea0ea1c3ca refactor: remove old 2-click installation point code
- Remove ExecuteSelectAssemblyInstallationPointAsync
- Remove OnAssemblyInstallationMouseClicked
- Remove BeginAssemblyInstallationSelection
- Remove BuildAndRenderAssemblyInstallationReference
- Single-click '选安装面' is now the only way
2026-06-09 02:57:45 +08:00
d3b2906169 feat: add FailureReason to FaceInferResult for specific error messages
- FaceInferToolPlugin now returns specific reasons: '未命中模型' or '表面过窄'
- ViewModel handlers show FailureReason instead of generic '未命中有效表面'
- Catch exceptions still pass through BuildFromFaceNormal error messages
2026-06-09 02:53:41 +08:00
cd05553dd9 fix: remove all generic/instructional text from error dialogs
- Keep only the actual error reason, no '请先...' guidance
- Each condition shows its specific cause, exceptions pass through raw
2026-06-09 02:48:33 +08:00
5be6dfdaf3 fix: split ambiguous failure message in OnInstallationFaceInferred
- Separate 'no terminal object' from 'invalid pick' case
- Remove misleading '请先取端面' from surface pick failure
2026-06-09 02:42:51 +08:00
6a1318602e fix: pass through exception message directly instead of generic wrapper
- BuildFromFaceNormal already provides specific error like '面法向与光轴平行'
- Catch now shows raw ex.Message instead of prefixing with generic text
2026-06-09 02:40:35 +08:00
9e1056b92c feat: add DialogHelper.ShowStatusAndDialog for unified status+dialog feedback
- Replaces scattered UpdateMainStatus + ShowAutoClosingMessageBox calls
- Accepts Action<string> callback for ViewModel status bar update
- Applied to all end face and installation face failure handlers
2026-06-09 02:36:21 +08:00
6b78b851db refactor: rename to remove 'Quick' prefix after old method removal
- QuickAnalyzeAssemblyEndFaceCommand → AnalyzeAssemblyEndFaceCommand
- CanQuickAnalyzeAssemblyEndFace → CanAnalyzeAssemblyEndFace
- BeginAssemblyEndFaceQuickPick → BeginAssemblyEndFacePick
- OnQuickEndFaceInferred → OnEndFaceInferred
2026-06-09 02:06:44 +08:00
0fe7179494 refactor: replace 3-click end face detection with single-click FaceInferTool
- Remove '找端面' button and all 3-click logic
- Keep single-click '取端面' button only
- Remove: AnalyzeCurrentAssemblyEndFace, BeginAssemblyEndFaceSelection,
  OnAssemblyEndFaceMouseClicked, ExecuteAnalyzeAssemblyTerminalFaceAsync
- Retain CleanupAssemblyEndFaceSelection (shared with quick pick)
2026-06-09 02:04:54 +08:00
01195434b7 fix: use ancestor chain check for pick item matching terminal object
- PickItemFromPoint returns leaf geometry, not the parent container
- Check if pickItem is terminalObject or its descendant via AncestorsAndSelf
2026-06-09 01:58:09 +08:00
e485629360 tweak: rename quick end-face button to '取端面' 2026-06-09 01:53:53 +08:00
16bf5cc10e feat: integrate FaceInferToolPlugin with Rail assembly end face detection
- Add '快速取端面' button in Rail assembly workflow
- Single click → FaceInferToolPlugin → AssemblyEndFaceAnalyzer.Analyze(hitPoint, normal)
- Replaces 3-click manual seed point workflow
2026-06-09 01:53:36 +08:00
e7b5206198 feat: add single-point+normal overload to AssemblyEndFaceAnalyzer
- New Analyze(triangles, hitPoint, normal) bypasses 3-point seed plane construction
- New Analyze(modelItem, hitPoint, normal) for Navisworks types
- Same triangle extraction and centroid computation as 3-point version
- Enables single-click end face detection via FaceInferToolPlugin
2026-06-09 01:51:05 +08:00
1e45546aed chore: 更新 CHANGELOG 和 VERSION 至 0.15.7 2026-06-08 04:20:59 +08:00
b533153234 chore: 删除废弃的 PatternSearchDeltas 和 NormalizeDegrees 2026-06-08 03:36:16 +08:00
b17df9aa31 fix: 四元数均匀采样替代欧拉角网格,模式搜索改为四元数邻域
- 网格搜索: S³ 均匀随机四元数 → canonical→host Euler,512→256 采样点
- 模式搜索: 7轴×2方向四元数乘法搜索,替代欧拉角 delta
- 去掉 CandidateAngles/Euler 网格+PatternSearchDeltas/NormalizeDegrees
- canonical 空间桥接保证 YUp/ZUp 兼容
2026-06-08 03:35:33 +08:00
51453df037 chore: 更新 CHANGELOG 和 VERSION 至 0.15.6
- 记录自动调整评测与姿态对准修正、skipCadRestore 重构
- 记录别名树 DisplayPath 重名修复
- 版本号 0.15.4 → 0.15.6
2026-06-06 13:12:18 +08:00
f5387c8699 fix: 自动调整评测与姿态对准修正
1. GetYawFromRotation: 通过 canonical space 转换计算 yaw,修复 YUp 下 atan2(Y,X) 用错平面
2. ApplyRotationCorrectionInPlace: 新增 CAD 原位纯旋转,评测旋转顺序与增量链一致
3. 评测器两轮优化: 先无约束找最小面积,不满足约束再带约束重搜
4. ApplyAutoAdjustedPoseAndMoveToPathStart: 确认时先校正再偏航,不读 CAD yaw
5. OnAutoAdjustClick: 去掉 Y 轴 yaw 叠加
2026-06-06 12:47:12 +08:00
f38fba6506 fix: DisplayPath 所有层级加#N去重 + 移除旧格式兼容
- BuildNode 不再剥离父路径#N后缀
- FromModelItem 对每层祖先计算 siblingIndex 追加#N,与树加载一致
- 解决复制子树中节点别名泄露给其他子树的问题
- FromKey 移除纯 DisplayPath 旧格式兼容
2026-06-06 10:05:35 +08:00
7dec26b1ac fix: replace RowStyle IsSelected binding with SelectionChanged event
- RowStyle TwoWay binding on IsSelected is unreliable with virtualizing DataGrid
- Switched to DataGrid.SelectionChanged event handler in code-behind
- Syncs RemovedItems/AddedItems to ViewModel.IsSelected reliably
2026-06-04 21:42:07 +08:00
6b8bae2afc fix: clear all IsSelected flags after export to prevent stale selections
- Added finally block to reset IsSelected on all PathRoutes
- Prevents multi-select state from leaking into subsequent single exports
2026-06-04 21:36:52 +08:00
897280bb3f fix: show concatenated path names as dialog filename for multi-select export
- Single: path name as default filename (unchanged)
- Multi: semicolon-separated names as hint, each file still saved individually
2026-06-03 21:16:52 +08:00
1beaa7b24d Revert "fix: use folder dialog for multi-select export, file dialog for single"
This reverts commit 6d14d1d26f.
2026-06-03 21:16:28 +08:00
6d14d1d26f fix: use folder dialog for multi-select export, file dialog for single
- Single selection: SaveFileDialog with path name as default filename
- Multi selection: FolderBrowserDialog to pick output directory
- Export format: XML for multi (simpler UX), selectable for single
2026-06-03 21:11:41 +08:00
ac2de23e32 feat: support multi-select and batch export in path list
- DataGrid: SelectionMode Extended with RowStyle IsSelected binding
- PathRouteViewModel: add IsSelected property
- Export: iterates selected paths, saves each to separate file
- Ctrl/Shift+click to multi-select, then Export button batches them
2026-06-03 21:06:32 +08:00
c0714a5180 fix: regenerate path point IDs and rebuild edges on import rename
- Also regenerate all PathPoint.Id to avoid UNIQUE constraint on PathPoints.Id
- Call RecalculateRoute() to rebuild edges with new point references
- Edge constructor auto-generates new Id, so edges are fresh too
2026-06-03 20:58:49 +08:00
c6afef13de fix: generate new GUID when renaming imported path to avoid DB conflict
- Imported routes with same Id would overwrite each other in DB
- Now assign route.Id = Guid.NewGuid() on rename, ensuring unique DB entry
2026-06-03 20:54:08 +08:00
0cff495331 fix: prevent duplicate database save during XML import deserialization
- ParseRouteElement used route.AddPoint() which called RecalculateAndSaveRoute
- This saved the path to DB with original name before ImportPathCommand could rename it
- Changed to route.Points.Add() + route.RecalculateRoute() to skip DB save
- Only ImportPathCommand → AddRoute → SavePathToDatabase now persists renamed path
2026-06-03 20:44:52 +08:00
c2a37fe007 fix: only count rename when name actually changed during import
- Capture original name before GenerateUniqueName
- Skip RenamedCount increment if names are identical
- Fix misleading log showing same name twice
2026-06-03 20:34:49 +08:00
0967f7a9bc feat: show renamed count in import result dialog
- Add RenamedCount to ImportPathResult
- Track per-file and aggregate across multi-file imports
- Dialog now shows '重名自动重命名: N 个路径' when applicable
2026-06-03 20:29:28 +08:00
27ab485558 fix: use DialogHelper.ShowAutoClosingMessageBox for import result dialog
- 5s auto-close, test automation mode skips dialog
- Consistent with existing project patterns
2026-06-03 20:25:15 +08:00
ab0b5760d8 feat: show import result dialog after multi-file import 2026-06-03 20:22:58 +08:00
5692fde956 feat: rename export button, support multi-file import
- Rename '导出选中路径' to '导出', move before '导出全部'
- Import dialog: enable MultiSelect, loop through all selected files
- Aggregate import results across files
2026-06-03 20:17:19 +08:00
b3a8364e7e tweak: remove redundant '路径' from path creation button labels 2026-06-03 20:11:09 +08:00
a8a786d807 refactor: rename and reorder path creation buttons
- Rename '手动创建' to '地面路径'
- Rename '传统空轨路径' to '空轨路径'
- Move 空轨路径 after 吊装路径 (Ground → Hoisting → Rail order)
2026-06-03 20:07:33 +08:00
469f529fa0 tweak: increase path list DataGrid height from 200 to 340 (7→12 rows) 2026-06-03 20:02:51 +08:00
750559a560 refactor: collapsible test section with Grid layout in SystemManagement
- Wrap test buttons in Expander (default collapsed)
- Replace horizontal StackPanel with 3-column Grid layout
- Simplify button labels by removing redundant 'test' wording
2026-06-03 20:00:00 +08:00