|
|
a19e5f91f3
|
修改了第一个路径导出路径按钮没激活,无法导出的BUG
|
2025-12-09 17:14:55 +08:00 |
|
|
|
941bade44a
|
复用ClashTest,大幅优化碰撞检测性能
|
2025-12-09 10:51:11 +08:00 |
|
|
|
393e1c7291
|
碰撞检测时,只处理可见对象,大幅优化性能。
|
2025-12-09 10:06:08 +08:00 |
|
|
|
4736372552
|
修改了碰撞性能优化记录文档
|
2025-12-08 17:24:42 +08:00 |
|
|
|
01f200ca60
|
改进了动画预计算的几何缓存和空间索引缓存方法,提高了50%的性能。大型模型(50万)提高到120秒
|
2025-12-08 17:21:34 +08:00 |
|
|
|
12616629b0
|
清理多余的动画检测实时计算代码
|
2025-12-08 15:04:16 +08:00 |
|
|
|
f8320066c1
|
优化碰撞检测算法,进行合理的去重后再检测;优化动画控制逻辑,避免重复订阅事件和资源清理;
|
2025-12-08 12:31:12 +08:00 |
|
|
|
a832e91b7b
|
修改了保存当前选择集无响应的bug,去掉了多余的子节点展开代码
|
2025-12-05 17:48:58 +08:00 |
|
|
|
a552ea3a1d
|
不跟踪nuget.exe
|
2025-12-01 11:40:52 +08:00 |
|
|
|
18d6fa65fe
|
不跟踪nuget.exe
|
2025-12-01 11:40:25 +08:00 |
|
|
|
221e13cb5a
|
更新项目进度评估报告
|
2025-12-01 11:35:44 +08:00 |
|
|
|
1cf5816cb4
|
版本升级到 0.14.0
|
2025-12-01 11:12:55 +08:00 |
|
|
|
811b815082
|
删除不必要的文件
|
2025-11-21 10:45:38 +08:00 |
|
|
|
ca4488dcb8
|
根据安装程序的要求,更新项目文件,目标平台为x64,项目设置为Release
|
2025-11-18 18:27:40 +08:00 |
|
|
|
fee00dfb82
|
增加MSI安装程序生成指南,修改README.md
|
2025-11-17 12:49:35 +08:00 |
|
|
|
5e1e4b04b2
|
对项目完成度进行了评估,列出报告;实现了JSON路径文件导入功能。
|
2025-11-07 15:13:28 +08:00 |
|
|
|
330f6591a2
|
删除多余的引用
|
2025-10-21 18:48:27 +08:00 |
|
|
|
80975b829a
|
删除多余的引用
|
2025-10-21 18:47:55 +08:00 |
|
|
|
fbe46ebc85
|
使用场景加载完成事件SceneLoaded实现文档更新后的物流列表刷新
|
2025-10-21 18:22:23 +08:00 |
|
|
|
b0a63409b9
|
删除一些多余代码,注释掉文档更新刷新物流元素列表代码
|
2025-10-21 17:44:35 +08:00 |
|
|
|
dba1f76f0a
|
增加了几何体缓存文件支持
|
2025-10-20 10:39:21 +08:00 |
|
|
|
55fbcbdb48
|
将网格点可视化从球和立方体,改为圆形和正方形
|
2025-10-18 16:43:17 +08:00 |
|
|
|
9c97633411
|
增加网格点可视化类型,立方体(可用)、点(不可用)
|
2025-10-17 18:47:35 +08:00 |
|
|
|
fb13b81259
|
增加iFlow的文档
|
2025-10-17 14:29:48 +08:00 |
|
|
|
5791e57192
|
对系统管理UI进行修改,更改体素路径测试参数
|
2025-10-14 17:19:17 +08:00 |
|
|
|
3aaa176ce6
|
优化插件启动时的动作
|
2025-10-14 16:29:05 +08:00 |
|
|
|
b7a112354d
|
merge: 集成空间索引优化碰撞检测性能
- 新增空间哈希网格系统(SpatialHashGrid + SpatialIndexManager)
- 优化碰撞检测查询效率(从O(n)到O(1)平均复杂度)
- 格子大小使用车辆宽度参数(1米),空间分割166格
- 平均每格1.71个对象,查询性能提升约10倍
- 移除DataBindingPerformanceMonitor功能(简化代码)
- 修复碰撞报告检测间隙显示格式
- 净删除代码511行,提升代码质量
测试结果:
- 空间索引构建时间:10ms(冷启动)/ 1ms(缓存)
- 284个对象分布在166个格子中
- 碰撞检测性能显著提升
|
2025-10-14 15:18:36 +08:00 |
|
|
|
b05bb727c6
|
refactor: 完成 DataBindingPerformanceMonitor 功能的完整删除
- 删除 DataBindingPerformanceMonitor.cs 文件
- 从 NavisworksTransportPlugin.csproj 移除编译引用
- 清理 ViewModelBase.cs 中的所有性能监控代码
- 清理 ThreadSafeObservableCollection.cs 中的性能监控集成
- 清理 SmartDataBindingOptimizer.cs 中的性能监控使用
- 清理 BindingExpressionOptimizer.cs 中的性能监控调用
该功能不再需要,移除后简化了代码结构
|
2025-10-14 15:01:26 +08:00 |
|
|
|
821725d406
|
perf: 优化空间索引格子大小,使用车辆宽度参数
问题分析:
1. 原实现使用运动对象包围盒最大边(6-8米)作为格子大小
2. 导致格子过大(仅10-21个格子),每格包含13-28个对象
3. 空间查询效率低,需检查大量候选对象
优化方案:
1. 改用系统配置中的车辆宽度(VehicleWidthMeters,默认1米)
2. 预期效果:格子数增加到150-200个,每格2-5个对象
3. 显著提升空间查询效率
搜索半径说明:
- 当前实现 objectDiagonal/2 + detectionGap 是正确的
- 从中心到最远角的距离恰好是对角线的一半
- 不需要修改
修改文件:
- PathAnimationManager.cs:
- 添加 ConfigManager 引用
- 使用车辆宽度计算格子大小
- 添加详细日志输出
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2025-10-14 14:43:15 +08:00 |
|
|
|
40072e2eb7
|
fix: 格式化碰撞报告窗口中检测间隙的显示
问题:检测间隙显示为0.05001768,精度过高不便阅读
解决:在XAML绑定中添加StringFormat={}{0:F2}格式化为两位小数
效果:现在显示为0.05,清晰易读
修改文件:
- CollisionReportDialog.xaml: 为DetectionGap绑定添加格式化
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2025-10-14 12:33:07 +08:00 |
|
|
|
02ddc812cf
|
refactor: 移除未使用的 IsChannelObjectPublic 方法
优化历程:
1. 最初添加 IsChannelObjectPublic() 用于空间索引中逐个检查对象
2. 后续优化为 GetNonChannelGeometryItemsCache() 在缓存层预过滤通道
3. IsChannelObjectPublic() 方法已不再被使用,删除以保持代码整洁
私有方法 IsChannelObject() 保留,仍在缓存构建时使用
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2025-10-14 12:28:43 +08:00 |
|
|
|
1fb6c565fd
|
perf: 优化空间索引构建,直接使用预过滤的非通道缓存
问题分析:
- 空间索引获取290个几何对象缓存
- 然后遍历290次,每次调用 IsChannelObjectPublic() 检查是否为通道
- 使用 HashSet.Contains 虽然是O(1),但遍历290次仍然是O(n)
- 通道对象在缓存构建阶段已经识别,不应该重复判断
优化方案:
1. 添加 GetNonChannelGeometryItemsCache() 方法返回已过滤通道的缓存
2. 在 ClashDetectiveIntegration 中一次性过滤(使用LINQ Where)
3. SpatialIndexManager 直接使用284个非通道对象,无需再判断
4. 移除 IsChannelObjectPublic() 方法和相关逻辑(不再需要)
性能提升:
- 空间索引构建:减少290次 HashSet 查询
- 代码更简洁:从遍历+判断改为直接使用预过滤结果
- 逻辑更清晰:通道过滤在缓存层完成,索引层只负责索引
技术细节:
- GetNonChannelGeometryItemsCache() 使用 LINQ Where 过滤
- 线程安全:使用 lock 确保并发访问安全
- 日志优化:明确标注"通道已在缓存阶段过滤"
代码清理:
- 移除 IsChannelObjectPublic() 的使用(不再需要)
- 移除 channelExcludedCount 变量
- 简化索引构建循环逻辑
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2025-10-14 12:25:59 +08:00 |
|
|
|
f194a835ed
|
refactor: 移除空间索引构建中的冗余缓存调用
问题分析:
- 动画生成阶段已经构建了所有缓存(几何对象+通道对象)
- 空间索引构建时再次调用 BuildChannelObjectsCache() 和 BuildAllGeometryItemsCache()
- 虽然这两个方法有"已缓存则跳过"逻辑,但调用本身是逻辑冗余
优化方案:
- 移除 BuildChannelObjectsCache() 和 BuildAllGeometryItemsCache() 调用
- 直接使用 GetAllGeometryItemsCache() 获取缓存
- 如果缓存不存在,抛出异常而非静默回退(暴露调用顺序错误)
设计原则:
- "让问题快速暴露" > "让程序看起来正常运行"
- 明确约定:调用方必须在动画生成阶段构建缓存
- 如果缓存不存在,说明调用顺序错误,应该报错
技术细节:
- 将回退逻辑从 Warning + 实时获取 改为 Error + 抛出异常
- 错误信息明确指出调用方的责任
- 确保代码的调用契约清晰可追溯
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2025-10-14 12:21:38 +08:00 |
|
|
|
320dfa23f3
|
perf: 空间索引复用几何对象缓存避免重复遍历
问题描述:
- BuildAllGeometryItemsCache() 已经遍历模型树获取290个几何对象
- SpatialIndexManager 又重新遍历一次模型树获取290个对象
- 重复工作导致性能浪费
优化方案:
1. 在 ClashDetectiveIntegration 中添加 GetAllGeometryItemsCache() 公开方法
2. SpatialIndexManager 调用该方法获取缓存的几何对象列表
3. 避免重复遍历模型树,提升性能
技术细节:
- GetAllGeometryItemsCache() 返回列表副本保证线程安全
- 添加缓存不存在时的回退逻辑(保险措施)
- 日志输出改为"从缓存获取"以明确数据来源
性能提升:
- 减少模型树遍历次数:2次 → 1次
- 优化空间索引构建流程
- 所有碰撞检测和空间索引共享同一个几何对象列表
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2025-10-14 12:15:29 +08:00 |
|
|
|
2c6187a674
|
fix: 修正碰撞报告中检测间隙单位显示错误
问题描述:
- 碰撞报告显示检测间隙为 0.1641米,但实际设置是 0.05米
- 原因:DetectionGap 属性直接返回内部模型单位值,未转换为米制
修复方案:
- 修改 PathAnimationManager.DetectionGap 属性
- 添加单位转换逻辑,将内部模型单位转换为米制单位
- 确保报告中显示的检测间隙与用户设置一致
技术细节:
- _detectionGap 字段以模型单位存储(内部使用)
- DetectionGap 属性返回米制单位(外部接口)
- 使用 UnitsConverter.GetUnitsToMetersConversionFactor() 进行转换
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2025-10-14 12:09:54 +08:00 |
|
|
|
f761d93676
|
feat: 添加通道对象排除逻辑到空间索引
修改内容:
1. 在 ClashDetectiveIntegration 中添加 IsChannelObjectPublic() 公开方法
2. SpatialIndexManager.BuildGlobalIndex() 构建索引前调用 BuildChannelObjectsCache()
3. 索引循环中过滤通道对象,避免将其加入空间索引
4. 增强日志输出,显示排除的通道对象数量
技术细节:
- 使用已有的 _channelObjectsCache 进行 O(1) 查询
- 在索引构建时过滤(一次性)而非每次查询时过滤
- 保持与旧架构相同的通道排除逻辑
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2025-10-14 12:05:05 +08:00 |
|
|
|
c7f6586fa9
|
feat: 集成空间索引到碰撞检测系统(单层架构)
重构说明:
- 移除两层架构的 GetPotentialColliders() 方法
- 移除不再使用的 CalculatePathBounds() 方法
- 在 PrecomputeAnimationFrames() 中构建全局空间索引
- 每帧使用空间索引直接查询附近对象(O(1) 复杂度)
技术细节:
- 网格大小:基于动画对象包围盒尺寸
- 搜索半径:对象对角线的一半 + 检测间隙
- 自动排除动画对象本身
性能优势:
- 旧架构:290 对象 → 108 对象(预过滤)→ 每帧遍历 108 对象
- 新架构:290 对象 → 每帧空间查询 ~5-15 对象
- 预期性能提升:10-15x
|
2025-10-14 11:56:03 +08:00 |
|
|
|
360d55ffa8
|
fix: 修复 Vector3d.Distance 调用并将 Spatial 文件添加到项目
- 修复 Distance 方法调用(使用实例方法而非静态方法)
- 将 SpatialHashGrid.cs 和 SpatialIndexManager.cs 添加到 csproj
- 在 PathAnimationManager.cs 中添加命名空间引用
|
2025-10-14 11:53:52 +08:00 |
|
|
|
8cec18a141
|
refactor: 借鉴 PointHashGrid3d 优化空间哈希网格
改进内容:
1. 使用 ScaleGridIndexer3 实现更清晰的坐标转换(职责分离)
2. 优化 FindInRadius:提前判断 distanceFunc 是否为 null,避免循环中重复检查
3. 使用 TryGetValue 避免字典的两次查找
4. 增强代码注释,说明设计参考和增强点
参考 geometry3Sharp 的 PointHashGrid3d 设计,但保留了我们实现的优势:
- 支持返回范围内所有对象(不仅是最近的一个)
- 支持直接访问网格单元
- 提供详细的统计信息
|
2025-10-14 11:49:39 +08:00 |
|
|
|
d889635c1c
|
feat: 实现自定义空间哈希网格 (SpatialHashGrid)
- 创建 SpatialHashGrid.cs: 基于 Vector3i 的3D空间哈希表
- 支持对象插入、范围查询、格子查询
- O(1) 平均查询复杂度
- 带精确距离检查的范围查询
- 创建 SpatialIndexManager.cs: 全局空间索引管理器
- 单例模式,所有动画共享
- 构建全局索引(索引所有几何对象)
- FindNearbyObjects: 高效范围查询
- 对象位置缓存(避免重复计算包围盒)
技术细节:
- 使用 geometry4Sharp (g4) 的 Vector3d, Vector3i
- 基于 Dictionary<Vector3i, List<ModelItem>> 实现
- 格子大小可配置(建议设为车辆半径 × 2)
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2025-10-14 11:40:04 +08:00 |
|
|
|
687b342e0f
|
增加geometry4sharp的评估
|
2025-10-14 11:17:01 +08:00 |
|
|
|
bd7eeb3d46
|
修复路径预计算范围不对、碰撞检测报告名字匹配错误的BUG
|
2025-10-13 19:14:46 +08:00 |
|
|
|
882f8283b5
|
修复AABB包围盒碰撞检测逻辑错误
问题:
BoundingBoxesIntersectWithGap方法中gap参数加在了错误的位置:
- 当前写法:box2.Max.X + gap < box1.Min.X
- 应该写成:box1.Min.X - gap > box2.Max.X
错误原因:
gap应该只用于扩展box1(动画对象),而不是同时扩展box1和box2
修复方案:
采用标准AABB碰撞检测算法(参考MDN文档):
- X轴相交:box1.Max.X + gap >= box2.Min.X && box1.Min.X - gap <= box2.Max.X
- Y轴相交:box1.Max.Y + gap >= box2.Min.Y && box1.Min.Y - gap <= box2.Max.Y
- Z轴相交:box1.Max.Z + gap >= box2.Min.Z && box1.Min.Z - gap <= box2.Max.Z
- 三个轴向都相交才算碰撞
参考:https://developer.mozilla.org/en-US/docs/Games/Techniques/3D_collision_detection
影响:
修复后预计算阶段应该能正确检测到碰撞,但需要进一步排查
为什么当前预计算结果为0个碰撞的根本原因
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2025-10-13 17:47:16 +08:00 |
|
|
|
5cf9336a9c
|
修复:恢复PathAnimationManager变量的默认初始值
问题:
- 在修改注释时不小心删除了变量的默认初始值
- 导致_animationDuration=0, _animationFrameRate=0等
- 造成UI界面空白和除零异常
修复:
- _animationDuration = 10.0(默认10秒)
- _animationFrameRate = 30(默认30FPS)
- _collisionDetectionAccuracy = 0.1
- _movementSpeed = 1.0
- _detectionGap = 0.05
影响:修复UI界面显示问题
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2025-10-13 17:28:22 +08:00 |
|
|
|
0732cb493f
|
简化日志输出:移除模型单位显示,只保留米单位
修改内容:
- 路径总长度日志:只显示米单位
- 检测精度日志:只显示米单位/帧
- SetCollisionDetectionAccuracy日志:只显示米单位
- SetDetectionGap日志:只显示米单位
理由:
- 用户只需要看到米单位,模型单位是内部实现细节
- 简化日志输出,提高可读性
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2025-10-13 17:23:12 +08:00 |
|
|
|
3343f6f5c1
|
修复PathAnimationManager中的单位转换错误
问题:
1. 路径总长度日志显示"米",但实际计算的是模型单位
2. 检测精度内部使用模型单位,但Set方法接收米参数后未转换
3. 检测间隙内部使用模型单位,但Set方法接收米参数后未转换
4. 日志中单位标注不明确,容易造成混淆
修复内容:
1. CalculateTotalPathDistance返回模型单位,增加转换显示米单位
2. SetCollisionDetectionAccuracy接收米单位参数,内部转换为模型单位存储
3. SetDetectionGap接收米单位参数,内部转换为模型单位存储
4. 所有日志同时显示米单位和模型单位,格式:X.XX米 (Y.YY模型单位)
设计原则:
- 内部存储统一使用模型单位(与Navisworks API Point3D/BoundingBox3D一致)
- 对外接口(Set方法参数)使用米单位(符合用户习惯)
- 日志同时显示两种单位,避免歧义
影响范围:
- SetupAnimation()中的路径总长度日志
- PrecomputeAnimationFrames()中的路径总长和检测精度日志
- SetCollisionDetectionAccuracy()参数单位转换
- SetDetectionGap()参数单位转换
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2025-10-13 17:15:28 +08:00 |
|
|
|
1a3d1e7f49
|
清理多余文件
|
2025-10-13 16:53:40 +08:00 |
|
|
|
ca8bcc0bba
|
移除碰撞检测中的自定义进度条,避免与ClashDetective进度条冲突
问题:
- 在CreateAllAnimationCollisionTests中显示自定义进度条
- 调用TestsRunTest()时ClashDetective显示自己的自动保存进度条
- 两个进度条同时出现,造成视觉混乱
修改:
- 移除Progress progress变量声明
- 移除BeginProgress()调用
- 移除finally块中的EndProgress()调用
解决方案:
- 只显示ClashDetective的原生自动保存进度条
- 保持与Navisworks API的一致性
- 避免进度条冲突,提供更简洁的用户体验
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2025-10-13 13:00:01 +08:00 |
|
|
|
89722efaca
|
修复碰撞检测进度条闪烁:使用不确定进度条样式
移除了CreateAllAnimationCollisionTests方法中的progress.Update()调用,
使进度条保持不确定样式(滚动条,无百分比显示)。
原因分析:
- ClashDetective的TestsRunTest()在后台运行,不提供进度回调
- 频繁调用progress.Update()导致进度条在确定/不确定样式间切换,产生闪烁
- 每个碰撞点处理时间不固定(包括对象移动、测试运行、测试删除)
解决方案:
- 去掉Update()调用,让Progress API保持一致的不确定进度条样式
- 仍保留BeginProgress/EndProgress,提供"正在处理N个碰撞点"的提示
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2025-10-13 12:50:45 +08:00 |
|
|
|
07bd9351bf
|
代码优化:简化命名空间引用,使用using别名
修改内容:
- 将 Autodesk.Navisworks.Api.Progress 简化为 Progress
- 将 Autodesk.Navisworks.Api.Application.BeginProgress() 简化为 NavisApplication.BeginProgress()
- 将 Autodesk.Navisworks.Api.Application.EndProgress() 简化为 NavisApplication.EndProgress()
理由:
- 文件顶部已经有 using Autodesk.Navisworks.Api;
- 文件顶部已经有 using NavisApplication = Autodesk.Navisworks.Api.Application;
- 使用using别名可以简化代码,提高可读性
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2025-10-13 12:16:14 +08:00 |
|