a1d2a65010
优化集合提取器
2025-10-13 10:41:33 +08:00
e12e1125d2
为几何体提取添加进度条支持,优化用户体验
...
主要改进:
- 添加 Navisworks Progress API 支持到 ExtractTriangles 方法
- 实时显示片段处理进度(百分比)
- 支持用户取消操作(IsCanceled 检查)
- 移除批量日志输出,改用进度条展示
- 统一 ExtractTriangles 方法,移除单个项目的重复实现
- 在 finally 块中确保进度条正确关闭
文档更新:
- 扩展 NavisworksAPI使用方法.md 中的进度条章节
- 添加详细的 Progress API 使用指南
- 包含实际应用案例、最佳实践和常见陷阱
- 提供完整的代码示例和性能优化建议
性能改进:
- 每个片段更新一次进度(3516次调用,可接受)
- 移除频繁的日志写入(每100个片段),减少 I/O 开销
- 保留关键日志(开始、结束、取消、错误)
用户体验提升:
- 可视化进度反馈,避免假死感
- 支持随时取消长时间操作
- 优雅的错误处理和资源清理
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-13 10:40:24 +08:00
51be24161d
优化三角形提取性能 - 实现批量COM Selection创建
...
问题分析:
- 当前逐个ModelItem创建COM Selection(290次)
- 从290个模型项提取776140个三角形耗时较长
- COM对象创建/销毁开销大
优化方案:
1. 新增 GeometryHelper.ExtractTrianglesBatch 方法
- 批量创建COM Selection(290次 → 1次)
- 一次性提取所有模型项的三角形
- 添加进度日志(每100个片段输出一次)
2. 修改 NavisworksToDMesh3Converter.ConvertFromModelItems
- 从逐个调用 ExtractTriangles 改为批量调用 ExtractTrianglesBatch
- 添加详细的耗时统计(毫秒和秒)
- 添加 System.Linq 引用支持ToList()
3. 保留原有 ExtractTriangles 方法
- 向后兼容单个模型项提取场景
- 用于小规模提取或特殊场景
预期效果:
- COM Selection创建:290次 → 1次
- 预计性能提升:50-70%
- 日志更详细,便于性能分析
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-13 09:34:52 +08:00
2e9b9fe2b3
添加三角形提取阶段的耗时统计
...
在DMesh3转换过程中添加了三角形提取阶段的耗时统计,
便于性能分析和优化。
修改内容:
- 在ConvertFromModelItems方法中添加Stopwatch
- 统计从ModelItem提取三角形的耗时
- 日志格式:从 N 个模型项共提取 M 个三角形,耗时: X ms
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-13 09:21:38 +08:00
27908540c2
实现XY平面膨胀算法和3D体素路径规划
...
本次提交包含三个主要改进:
1. XY平面膨胀算法(VoxelGrid.cs)
- 实现简单迭代形态学膨胀
- 只在水平方向(XY平面)的4邻域膨胀
- 不在Z方向(垂直方向)膨胀
- 符合车辆物流场景:车辆只侧面/顶部碰撞障碍物
2. 3D体素路径规划(VoxelPathFinder.cs)
- 集成RoyT.AStar库进行3D A*路径规划
- 支持体素网格上的路径搜索
- 添加VoxelPathFindingTestCommand测试命令
3. UI和测试改进
- 删除旧的包围盒测试命令(VoxelGridTestCommand.cs)
- 更新SystemManagementView UI
- 添加体素路径规划测试功能
核心设计原则:
- 门模型在SDF生成前被排除(留出通道空洞)
- SDF阶段只标记几何体内部为障碍物
- 安全间隙仅在XY平面膨胀阶段应用
- 避免Z方向的错误膨胀
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-12 21:13:02 +08:00
2f78b4e58e
修复SDF标记阶段在Z方向应用安全间隙的问题
...
问题:
- SDF标记阶段使用了3D距离判断(distance < safetyMargin)
- 导致薄楼板上下0.6米范围内的体素都被标记为障碍物
- 违反了"车辆只会侧面或顶部碰撞"的设计原则
解决方案:
- SDF标记阶段只标记几何体内部(distance < 0)为障碍物
- 移除SDF阶段的安全间隙判断(minPassableDistance)
- 安全间隙只在后续的XY平面膨胀阶段应用
效果:
- 薄楼板只在其实际占据的Z层被标记为障碍物
- 楼板上下空间不会被错误标记
- 安全间隙仅在水平方向(XY平面)生效
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-12 21:12:27 +08:00
1e11f60042
feat(voxel): 实现障碍物膨胀算法 - 阶段1.5完成
...
完成任务1.5 - 障碍物膨胀算法(Obstacle Inflation)
核心实现:
- ✅ VoxelGrid.InflateObstacles() 主方法(约200行)
- ✅ PerformFastSweeping() 8方向扫描
- ✅ Sweep() 单向距离传播
- ✅ CheckAndUpdate() 邻居距离更新
- ✅ 从geometry4Sharp移植Fast Sweeping算法
技术特性:
- 3D距离变换使用DenseGrid3f存储距离场
- 8方向扫描:(+1,+1,+1), (-1,-1,-1)等8个方向
- 每次扫描检查7个邻居进行距离更新
- 门类型体素保护机制(门不膨胀)
- 正确的模型单位转换处理
性能数据(gatehouse_pub.nwd):
- 初始障碍物:3,747个体素
- 膨胀后障碍物:4,477个体素
- 新增膨胀:730个体素(19.5%增量)
- Fast Sweeping耗时:3ms
- 总膨胀耗时:4-5ms
- 可通行比例:22.9% → 7.9%
集成测试:
- VoxelGridSDFTestCommand新增膨胀测试
- SystemManagementViewModel调整测试参数(0.6米膨胀半径)
- 膨胀半径必须 >= 体素大小才能生效
问题修复:
- 修复膨胀为0的问题(参数配置:0.3米 < 0.5米体素)
- 调整测试参数为0.6米(600模型单位 > 500体素大小)
- 移除VoxelGridSDFTestCommand构造函数默认参数
阶段1完成:
- 任务1.1-1.5全部完成 ✅
- 性能远超目标(< 1秒 vs 目标 < 5秒)
- 提前5天完成阶段1
- 建议继续阶段2
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-12 17:00:06 +08:00
b0b29c581c
fix(ui): 修复XAML资源引用错误
...
问题:
- 使用了不存在的 NavisworksSecondaryTextBrush 资源
- 导致插件加载时 XAML 解析异常崩溃
修复:
- 将 NavisworksSecondaryTextBrush 改为 NavisworksDarkBrush
- 只使用 NavisworksStyles.xaml 中已定义的资源
可用的 Brush 资源:
- NavisworksPrimaryBrush
- NavisworksSecondaryBrush
- NavisworksLightBrush
- NavisworksBackgroundBrush
- NavisworksButtonBrush
- NavisworksTextBrush
- NavisworksDarkBrush
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-12 13:56:56 +08:00
6460dda879
feat(voxel): 添加体素网格测试UI和命令
...
实现内容:
1. 创建 VoxelGridTestCommand - 体素网格测试命令
- 选中对象创建体素网格
- 简单的边界标记(边界为障碍物,内部为自由空间)
- 生成可视化报告
- 防止体素数量过多(>100万)
2. 在系统管理页签添加功能测试区域
- 新增"功能测试"分组
- 添加"测试体素网格"按钮
- 集成到 SystemManagementViewModel
3. 功能特性
- 自动计算选中对象的总包围盒
- 提取三角网格(为后续SDF做准备)
- 体素统计信息(总数、可通行、障碍物)
- 生成详细的测试报告
使用方法:
1. 在 Navisworks 中选择一个或多个模型对象
2. 打开插件面板 -> 系统管理页签
3. 滚动到最下方"功能测试"区域
4. 点击"测试体素网格"按钮
5. 查看测试结果对话框和日志
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-12 13:49:55 +08:00
805814616a
feat(voxel): 阶段1.5 - 体素网格可视化验证
...
实现内容:
- 创建 VoxelGridVisualizer 类,支持多种可视化模式
- VisualizeAsPoints(): 完整网格可视化(支持采样率)
- VisualizeSlice(): 单层切片可视化
- VisualizeBoundary(): 障碍物边界可视化
- ConvertToPathRoute(): 转换为 PathRoute 以便集成到现有渲染系统
- QuickVisualizationTest(): 快速测试套件
- GenerateVisualizationReport(): 文本报告生成
设计策略:
- 复用现有 PathPointRenderPlugin,而非创建新的 RenderPlugin
- 将体素转换为 PathPoint 对象进行渲染
- 使用小球体表示体素,不同颜色区分类型
完成情况:
- ✅ 编译通过,无错误
- ✅ 阶段 1 全部 5 个任务完成 (100%)
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-12 13:38:57 +08:00
f64e79d372
feat(voxel): 阶段1.4 - 测试 geometry4Sharp 的 MeshSignedDistanceGrid
...
- 创建 MeshSDFTester.cs: 测试 geometry4Sharp 库的可用性和功能
- 实现 Navisworks Triangle3D 到 DMesh3 的转换
- 实现 MeshSignedDistanceGrid (SDF) 计算功能
- 添加库可用性快速测试方法
- 手动构建测试立方体网格
特性(原型版本):
- QuickLibraryTest(): 验证 geometry4Sharp 库是否正常工作
- ConvertToDMesh3(): 将 Navisworks 三角形转换为 DMesh3 格式
- ComputeSDF(): 计算签名距离场(使用 DMeshAABBTree3 加速)
- TestFullPipeline(): 完整测试流程(ModelItem → 三角形 → DMesh3 → SDF)
- CreateTestCubeMesh(): 手动创建测试立方体
注意:
- 这是原型版本,部分 SDF 距离查询 API 需要进一步研究
- 验证了 DMesh3, DMeshAABBTree3, MeshSignedDistanceGrid 基本可用
- 与 GeometryHelper.ExtractTriangles() 集成
下一步: 体素可视化验证(阶段1.5)或根据实际需求调整
2025-10-12 13:20:29 +08:00
40946091dd
docs(voxel): 更新任务跟踪 - 任务1.3已完成
...
- 标记任务 1.3(实现简单体素化原型)为已完成
- 更新总体进度:3/17 任务完成(18%)
- 更新阶段 1 进度:3/5 任务完成(60%)
- 添加变更日志:VoxelGridGenerator 360行代码完成
完成情况:
- 包围盒体素化算法实现
- 物流类型自动识别
- 障碍物膨胀功能
- 单位自动转换
- 性能统计日志
2025-10-12 11:47:01 +08:00
064945bfa6
feat(voxel): 阶段1.3 - 实现简单体素化原型 (VoxelGridGenerator)
...
- 创建 VoxelGridGenerator.cs: 从 BIM 模型生成体素网格
- 使用包围盒方法进行简单体素化(阶段1原型版本)
- 支持障碍物膨胀(车辆半径)
- 自动识别物流元素类型(从属性或名称推断)
- 详细的性能日志和统计信息
- 包含 CreateTestGrid() 快速测试方法
特性:
- 包围盒体素化算法
- 物流类型自动识别(门、楼梯、电梯、通道、障碍物)
- 体素膨胀处理(仅对障碍物)
- 单位自动转换(米 → 模型单位)
- 完整的 XML 中文注释(360行代码)
性能:
- 支持大规模场景处理
- 详细的时间统计和进度日志
下一步: 测试 MeshSignedDistanceGrid(阶段1.4)
2025-10-12 11:45:38 +08:00
aece9fbbe1
docs(voxel): 更新任务跟踪文档 - 任务1.1和1.2已完成
...
- 标记任务 1.1(安装 geometry4Sharp)为已完成
- 标记任务 1.2(创建 VoxelGrid 基础数据结构)为已完成
- 更新总体进度:2/17 任务完成(12%)
- 更新阶段 1 进度:2/5 任务完成(40%)
- 添加变更日志条目
完成情况:
- VoxelCell.cs: 167 行代码
- VoxelGrid.cs: 365 行代码
- 完整的 XML 中文注释
- 编译通过,无错误
2025-10-12 11:27:29 +08:00
c9ca6b4d32
feat(voxel): 阶段1.2 - 创建 VoxelGrid 基础数据结构
...
- 创建 VoxelCell.cs: 体素单元类,包含类型、通行性、距离、成本等属性
- 创建 VoxelGrid.cs: 3D体素网格类,包含坐标转换、邻域查询、统计信息等方法
- 添加到 NavisworksTransportPlugin.csproj 编译项
- 编译成功验证
特性:
- VoxelCell: 物流属性集成,SDF距离存储,成本计算方法
- VoxelGrid: 世界坐标↔体素索引转换,6/26邻域查询,欧几里得/曼哈顿距离计算
- 完整的 XML 文档注释(中文)
下一步: 实现简单体素化原型
2025-10-12 11:25:45 +08:00
0a61057476
feat(voxel): 阶段1.1 - 添加 geometry4Sharp 1.0.0 NuGet 包
...
- 安装 geometry4Sharp 1.0.0
- 更新 packages.config
- 添加 DLL 引用到 NavisworksTransportPlugin.csproj
- 使用 net48 版本确保 .NET Framework 4.8 兼容性
依赖项: packages\geometry4Sharp.1.0.0\lib\net48\geometry4Sharp.dll
下一步: 创建 VoxelGrid 基础数据结构
2025-10-12 11:22:52 +08:00
2b0b13c43a
docs(voxel): 添加体素网格路径规划任务跟踪文档
...
- 创建详细的 4 阶段任务清单(17 个子任务)
- 每个任务包含:工作量、验收标准、阻塞问题
- 包含风险管理、进度跟踪、决策流程
- 包含 Git 工作流和提交规范
文件位置: doc/working/voxel_pathfinding_task_tracker.md
2025-10-12 11:15:55 +08:00
dd991d38ce
增加体素网格和GPU加速2个可行性方案
2025-10-12 11:05:29 +08:00
455450726c
修复斜线优化有高度差的路径点的问题。
2025-10-12 01:12:31 +08:00
37f03362c4
修复参数配置错误和门网格高度层缺失错误
2025-10-11 18:39:06 +08:00
a938afd946
对齐配置参数
2025-10-11 17:36:33 +08:00
7343133f12
增加了配置管理功能,配置文件保存为toml格式,可在配置窗口编辑;实现了日志级别管理功能
2025-10-11 12:18:33 +08:00
a46568f43e
版本升级到0.13.0:
...
1、核心突破
3D路径规划系统 - Graph替代Grid,真正的3D路径规划
高度层网格 - 支持楼梯、斜面等复杂多层场景
网格膨胀算法 - 障碍物和边界分离计算,提高精度
2、新增功能
SQLite数据库集成 - 路径分析、碰撞报告存储
导航地图生成 - 场景图片导出功能
无关项过滤 - 新物流类型,提高规划效率
3、性能优化
网格缓存机制 - 大幅提高路径规划速度
高度处理完善 - 斜面路径、楼梯网格生成
几何体过滤 - 避免误判障碍物
4、架构清理
删除冗余UIStateMachine、未使用的WPF Services
删除所有向后兼容代码
简化自动寻路代码,提升可读性
2025-10-11 10:03:22 +08:00
df1885a352
完善了膨胀算法,把障碍物和边界分开计算
2025-10-10 23:51:13 +08:00
83a4a0e7aa
修改楼梯场景路径不能到达却显示到达的bug
2025-10-10 23:27:46 +08:00
2464f17092
修改楼梯边界膨胀的bug
2025-10-10 21:19:13 +08:00
8b5e2baf23
修改网格生成和路径规划中的bug
2025-10-10 18:42:21 +08:00
9ea89aa8d0
修改了膨胀算法,识别多层的边界进行膨胀。给每层增加了IsWalkable。
2025-10-10 14:54:47 +08:00
a4eaf46723
支持多层可视化,并解决楼梯下高度不足的区域网格可视化的问题
2025-10-10 11:51:05 +08:00
59ecebebc4
支持了3D障碍物投影
2025-10-10 11:03:38 +08:00
3cc840b183
删掉serena的提示词
2025-10-10 09:44:29 +08:00
163986f9e5
完善了安全优先和直线优先的算法,去掉了cell.WorldPosition,但高度层引起的问题还需要进一步完善
2025-10-10 02:45:20 +08:00
88712cc156
完善A*算法,用graph代替grid,用3D来进行路径规划。
2025-10-10 01:27:56 +08:00
ed7bc13866
为安全优先和直线优先增加高度层支持。
2025-10-09 19:07:34 +08:00
df6ba1c51e
改进了A*算法中对高度层的处理,初步做到路径优先下从楼面爬上楼梯(楼梯缺少障碍物网格)
2025-10-09 18:29:36 +08:00
9ccf925964
给网格增加了高度层概念,试图支持楼面上的楼梯,还不完善
2025-10-08 23:56:59 +08:00
a8e8760e2b
修改Gridmap缓存重建机制,考虑所有物流构件变化
2025-10-07 15:57:30 +08:00
f5d1361146
增加一个“无关项”的物流类型,用于过滤如地基、建筑结构等与物流无关的构件
2025-10-06 21:31:09 +08:00
8cd988279f
把碰撞报告保存到数据库,修改碰撞报告格式
2025-10-05 19:07:23 +08:00
e46931311f
将最大宽度、长度、高度、安全间隙、网格尺寸,加入路径保存内容。
2025-10-04 21:26:49 +08:00
6091b794de
实现了基本的路径分析功能,增加了文档关联的sqllite数据库
2025-10-03 16:28:02 +08:00
4357b91446
更新serena mcp的使用原则
2025-09-30 22:54:30 +08:00
2de531e98c
阶段二:合并动画管理器
...
合并策略:
- 保留 PathAnimationManager(实际使用的Transform-based动画引擎)
- 删除 LogisticsAnimationManager(SavedViewpoint功能完全未使用)
- 将碰撞排除列表缓存功能迁移到PathAnimationManager
变更详情:
1. PathAnimationManager.cs
- 添加碰撞排除列表缓存管理字段
- 迁移PrecomputeCollisionExclusions等5个方法
- 添加using NavisworksTransport.Utils
2. AnimationControlViewModel.cs
- 移除_logisticsAnimationManager字段
- 将所有缓存调用改为_pathAnimationManager
3. StartAnimationCommand.cs
- 移除未使用的LogisticsAnimationManager参数
4. 删除文件
- src/Core/Animation/LogisticsAnimationManager.cs (542行)
- 从NavisworksTransportPlugin.csproj移除引用
代码减少:约342行(542删除 - 200迁移)
编译验证:✅ 成功
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude <noreply@anthropic.com>
2025-09-30 22:32:59 +08:00
5c98598311
阶段五:删除已集成的UI文档片段和添加清理总结
...
删除:
- path_visualization_ui.txt (内容已集成到SystemManagementView.xaml)
新增:
- doc/working/cleanup_summary.md (详细的清理总结报告)
清理总成果:
- 删除文件:5个
- 删除代码:约3753行
- 编译状态:✅ 成功
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude <noreply@anthropic.com>
2025-09-30 22:22:50 +08:00
4ddaa0603d
阶段四:删除所有向后兼容代码
...
删除的旧版兼容代码:
1. PathAnimationManager.cs
- AnimationCompleted事件声明 (line 143-144)
- AnimationCompleted事件触发 (line 901-902)
2. ModelSplitterManager.cs
- GenerateFileName旧版重载方法 (line 1583-1593)
3. LayerManagementViewModel.cs
- GenerateFileName旧版重载方法 (line 1711-1721)
遵循"明确拒绝向后兼容性"原则,统一使用新版本API
编译验证通过
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude <noreply@anthropic.com>
2025-09-30 22:21:41 +08:00
52bb3da0eb
阶段三:删除未使用的WPF Services
...
删除的文件:
- src/UI/WPF/Services/DataBindingBestPractices.cs (0次外部引用)
- src/UI/WPF/Services/CrossViewModelSynchronizer.cs (仅被BestPractices使用)
- src/UI/WPF/Collections/VirtualizedObservableCollection.cs (仅被BestPractices引用)
更新:
- 从NavisworksTransportPlugin.csproj中移除引用
编译验证通过
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude <noreply@anthropic.com>
2025-09-30 22:20:29 +08:00
b048235657
阶段一:删除冗余的UIStateMachine
...
- 删除 src/Core/UIStateMachine.cs
- UIStateMachine和UIState枚举完全未使用
- 项目实际使用PathEditState作为状态管理
- 编译验证通过,无任何错误
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude <noreply@anthropic.com>
2025-09-30 22:17:48 +08:00
47ade72438
简化了自动寻路代码
2025-09-30 00:22:28 +08:00
64211439a8
修改了世界坐标转换到网格坐标(四舍五入)
2025-09-30 00:03:03 +08:00
3f2d66c255
测试和修改A*返回的坐标转换的问题
2025-09-29 23:25:21 +08:00