NavisworksTransport/CHANGELOG.md

412 lines
16 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# NavisworksTransport 变更日志
## [0.2.0] - 2025-07-21
### 重大功能突破 🎯
- **动画碰撞检测完整集成到Clash Detective**
- 实现了"把动画运行过程中的每一步的测试结果显示到clashdetective窗口中"的核心需求
- 新增碰撞位置记录和恢复机制,支持精确重现动画中的碰撞时刻
- 实现了位置缓存系统记录每个碰撞的精确3D坐标
- 动画结束后自动创建独立的碰撞测试每个碰撞对应一个Clash Detective测试项
### 技术突破 🔧
- **位置恢复方案**
- 新增`CacheCollisionDuringAnimation()`方法,实时记录碰撞对象位置
- 使用`OverridePermanentTransform`精确移动对象到碰撞位置
- 实现了对象生命周期管理,避免`ObjectDisposedException`
- 支持碰撞测试编号从1开始连续计数
- **碰撞检测算法优化**
- 修复了简化碰撞检测导致的误判问题之前距离12403.11单位却显示碰撞)
- 统一了缓存检测和高亮显示的算法标准,确保结果一致性
- 采用精确的包围盒相交检测替代大容差检测
### 用户体验提升 ✨
- **完整的碰撞可视化**
- 动画播放完成后自动在Clash Detective中创建所有碰撞测试
- 每个测试独立显示,包含碰撞时刻的对象位置信息
- 支持测试编号连续显示1,2,3...而不是0,2,4...
- 实时显示碰撞距离和位置坐标,便于验证
### 验证结果 ✅
- ✅ 成功记录6个动画碰撞位置坐标精确到小数点后2位
- ✅ 位置恢复后运行测试2个测试真实检测到碰撞
- ✅ 测试编号从1开始连续递增无跳号问题
- ✅ Clash Detective窗口正确显示所有碰撞测试项
- ✅ 算法一致性验证通过,误判率显著降低
### 代码质量 🛠️
- **架构优化**:分离了动画检测和结果展示,提高代码可维护性
- **错误处理**:完善的异常处理和对象有效性检查
- **日志系统**:详细的碰撞检测和位置记录日志
- **性能优化**:减少不必要的重复检测和计算
---
### 进一步修复对象生命周期和选择清除问题
#### 深度修复
- **选择清除安全性**:创建了`SafelyClearSelection()`方法,完全安全地处理选择清除
- 新增`IsApplicationDocumentValid()`方法检查Application和Document对象有效性
- 替换所有直接的`CurrentSelection.Clear()`调用为安全方法调用
- 增加详细的对象状态验证和日志记录
- **定时器异常处理**:改进点击监听定时器的异常处理机制
- 添加`ObjectDisposedException`的专门处理
- 在检测到对象释放时自动停止定时器
- 防止定时器继续尝试访问已释放的对象
#### 技术增强
- **多层防护机制**
- `IsApplicationDocumentValid()`:检查核心对象有效性
- `SafelyClearSelection()`:安全的选择清除操作
- 定时器回调中的早期对象检查
- **智能错误处理**
- 区分`ObjectDisposedException`和其他异常类型
- 对象释放时自动停止相关操作
- 减少无意义的错误日志输出
- **操作简化**
- 统一所有选择清除操作到单一安全方法
- 移除重复的try-catch代码块
- 集中化的错误处理和日志记录
#### 解决的问题
- ✅ "Object has been Disposed" 在清除选择时的错误
- ✅ 定时器继续访问已释放对象的问题
- ✅ 多重异常处理导致的日志混乱
- ✅ 选择清除操作的不一致性
---
## [0.1.12] - 2025-07-18
### 新增 🎉
- **TimeLiner 集成功能**:不完整的 Navisworks TimeLiner 集成支持
- 新增 `TimeLinerIntegrationManager` 类,实现运输任务与 TimeLiner 的无缝集成
- 动画播放时自动在 TimeLiner 中创建对应的运输任务
- 支持任务状态实时同步(播放中、暂停、停止、已完成)
- 任务显示名称包含车辆信息、时间戳和进度状态
### 技术突破 🔧
- **API 兼容性解决**:成功解决 Navisworks 2017 TimeLiner API 限制
- 发现并使用正确的 `TaskAddCopy()` 方法替代只读的 `Tasks.Add()`
- 实现多重 fallback 机制:直接添加 → 插入副本 → 层次结构管理
- 解决 C# 7.3 兼容性问题范围运算符、switch 表达式等)
- **双轨制架构设计**
- 自制动画系统:负责实际的模型移动和碰撞检测
- TimeLiner 显示系统:负责任务管理和状态展示
- 两个系统独立运行,互不干扰,确保稳定性
### 集成组件 📦
- **PathAnimationManager 增强**
- 添加 TimeLiner 相关公共属性:`IsTimeLinerAvailable`、`CurrentState`、`CurrentTaskId`、`TimeLinerManager`
- 动画播放时自动创建 TimeLiner 任务
- 实时同步动画进度到 TimeLiner 任务状态
- 完善的错误处理和降级机制TimeLiner 不可用时使用基础动画功能)
- **TimeLinerIntegrationManager 核心功能**
- 任务创建:`CreateTransportTask()` - 使用官方 API 创建运输任务
- 进度更新:`UpdateTaskProgress()` - 实时更新任务状态和进度
- 任务管理:支持任务删除、清理和层次结构管理
- 事件系统:`StatusChanged`、`TaskCreated` 事件通知
### 用户体验 ✨
- **无缝集成**原有动画功能完全保持不变TimeLiner 功能作为增强特性
- **可视化管理**:用户可在 TimeLiner 面板中查看所有运输任务
- **状态同步**:任务名称实时显示动画状态和进度百分比
- **错误恢复**TimeLiner 功能异常时自动降级到基础动画模式
### 技术细节 📋
- **API 方法**
- `_documentTimeliner.TaskAddCopy(task)` - 添加任务副本
- `_documentTimeliner.TaskInsertCopy(index, task)` - 插入任务副本
- `_documentTimeliner.TaskAddCopy(parentTask, childTask)` - 添加子任务
- **兼容性修复**
- 使用 `Substring(0, 6)` 替代 `[..6]` 范围操作符
- 传统 switch 语句替代 switch 表达式
- `ModelItemCollection` 替代 `Selection` 直接操作
- **资源管理**
- 完善的初始化和清理流程
- 任务引用的本地字典管理
- 异常情况下的资源自动释放
### 验证结果 ✅
- ✅ TimeLiner 窗口成功显示运输任务:"运输任务SHINYSTE13_运输_131040"
- ✅ 任务创建使用 `TaskAddCopy` 方法成功,任务数量从 0 增加到 1
- ✅ 车辆关联正确:关联了 SHINYSTE13 车辆模型
- ✅ 路径参数准确5 个路径点10 秒持续时间
- ✅ 原有动画功能完全正常,无任何影响
- ✅ 编译成功,在 Navisworks 2017 中稳定运行
### 代码优化 🛠️
- **日志系统简化**:移除冗余的调试日志,保留关键信息
- **错误处理优化**:统一异常处理逻辑,提高代码可读性
- **性能改进**:减少不必要的 API 调用和状态检查
## [0.1.11] - 2025-06-19
### 修复
- 🔧 恢复进入路径编辑模式后控制面板自动关闭功能
- 在v0.1.10添加全局异常处理时意外删除了此功能
- 现在进入路径编辑模式成功后,控制面板会自动关闭
- 用户可以正常在3D视图中点击模型添加路径点
- 🔧 修复3D交互阻塞问题
- 控制面板保持打开状态会阻挡3D视图的鼠标事件
- 自动关闭确保焦点回到Navisworks主界面
### 改进
- 📝 更新用户提示信息
- 明确告知用户控制面板已关闭,避免困惑
- 提醒用户完成路径编辑后需要重新打开插件面板退出编辑模式
- 保持原有的操作流程指导
### 用户体验
- **操作流程**:选择通道 → 点击进入编辑 → 面板自动关闭 → 3D点击添加路径点 → 重新打开插件 → 退出编辑
- **交互优化**确保用户能够无障碍地在3D环境中进行路径规划操作
## [0.1.10] - 2025-06-19
### 新增
- 🛡️ 全局异常处理机制,彻底防止程序崩溃
- 新增GlobalExceptionHandler工具类捕获AppDomain和Thread级别的未处理异常
- 实现SafeExecute方法为所有关键操作提供安全包装
- 添加未处理异常的详细日志记录(异常类型、消息、堆栈信息)
- 🛡️ 异常自动恢复机制
- 检测到异常时自动退出路径编辑模式
- 自动清除临时材质和高亮状态
- 尝试恢复程序到安全状态
### 改进内容
- 📝 用户友好的错误提示
- 技术详情与用户信息分离显示
- 不同级别的错误提示(错误对话框 vs 简单提示)
- 错误信息本地化,使用中文提示
- 📝 增强的异常日志
- 统一的日志格式:[全局异常] 前缀
- 记录异常类型、消息、堆栈信息
- 记录是否为终止性异常
### 技术细节
- 修改MainPlugin.Execute方法使用GlobalExceptionHandler.SafeExecute包装
- 为ShowCategorySelectionDialog方法添加异常保护
- 为所有按钮点击事件添加SafeExecute包装
- 解决System.Windows.Forms.Application与Autodesk.Navisworks.Api.Application的命名冲突
- 所有异常处理采用"fail-safe"策略,宁可功能失效也不崩溃
## 版本 [0.1.5] - 2025-06-19
### 修复对象生命周期管理问题
#### 主要修复
- **Object has been Disposed 错误**:修复了点击监听和高亮功能中的对象释放错误
- 添加了`IsModelItemValid()`方法检查ModelItem对象是否有效
- 在高亮功能中过滤无效的ModelItem对象
- 改进了异常处理,防止已释放对象的访问
- **异步操作竞态条件**移除了可能导致对象释放的异步Task.Delay调用
- 将异步的重新高亮调用改为同步方式
- 移除了延迟清除选择的异步操作
- 简化了选择清除的错误处理机制
#### 技术改进
- **对象有效性检查**
- 新增`IsModelItemValid()`私有方法
- 通过访问基本属性检测对象是否已被释放
- 在高亮前过滤出有效的通道对象
- **同步操作优化**
- 移除所有`System.Threading.Tasks.Task.Delay`异步调用
- 改为直接同步执行选择清除操作
- 简化了点击监听器的错误处理逻辑
- **错误处理增强**
- 增加详细的对象状态日志记录
- 改进异常处理的具体性和准确性
- 添加有效对象计数和状态反馈
#### 解决的具体问题
- ✅ "Argument 'path' has been Disposed" 错误
- ✅ "Object has been Disposed (null)" 重复错误
- ✅ 点击监听过程中的对象释放异常
- ✅ 高亮功能中的对象访问错误
---
## 版本 [0.1.2] - 2025-06-17
### 增加分层可见性控制功能
#### 主要变更
- **修复可见性逻辑缺陷**:解决了隐藏非物流项目时,具有物流属性的项目也被错误隐藏的问题
- **改进用户界面**:将两个独立按钮("隐藏非物流分类项目"和"显示所有项目")替换为单个复选框"只显示物流分类项目"
- **增强递归检查**:添加了`HasLogisticsAttributesRecursive`方法,确保父节点包含具有物流属性的子节点时不会被隐藏
- **优化用户体验**:复选框状态实时反映当前可见性状态,操作失败时自动回滚状态
#### 技术成果
- **核心算法改进**
- 新增递归检查方法,避免误隐藏包含物流子项的父项
- 修复了 `item.Children.Count` 方法组调用问题,改为 `item.Children.Count()`
- 优化了错误处理和状态管理机制
- **UI/UX提升**
- 单一复选框控制替代双按钮,操作更直观
- 实时状态反馈,显示隐藏项目数量
- 操作失败时的状态回滚机制
#### 验证结果
- ✅ 设置3个模型为物流分类后勾选"只显示物流分类项目"复选框,成功隐藏非物流项目同时保持物流项目可见
- ✅ 取消勾选复选框,所有项目正确恢复显示
- ✅ 状态标签准确显示操作结果和隐藏项目数量
- ✅ 错误处理和状态回滚机制工作正常
---
## 版本 [0.1.1] - 2025-06-17
### 增加物流类别属性功能
#### 主要变更
- **实现物流属性分类系统**支持8种物流元素类型门、电梯、楼梯、通道、障碍物、装卸区、停车位、检查点
- **集成COM API功能**通过Navisworks COM API实现自定义属性的添加和管理
- **优化代码架构**将LogisticsCategories.cs功能整合到CategoryAttributeManager.cs中避免重复定义
- **修复API兼容性问题**解决了多个Navisworks 2017 API兼容性问题
#### 技术成果
- **COM API集成**
- 正确实现了ComApiBridge.State的使用
- 修复了ObjectFactory的调用方式
- 实现了InwGUIPropertyNode2的自定义属性设置
- **属性管理系统**
- 支持5种物流属性类型、可通行性、优先级、适用车辆尺寸、速度限制
- 实现了属性检查、获取和筛选功能
- 提供了完整的属性值验证机制
- **代码质量改进**
- 解决了命名空间冲突Color和Application类型
- 修复了编译错误和方法组调用问题
- 优化了错误处理和调试信息输出
#### 验证结果
- ✅ 成功为选定模型项添加物流属性属性在Navisworks属性面板中正确显示
- ✅ 8种物流元素类型的按钮功能正常属性设置准确
- ✅ COM API调用稳定无内存泄漏或崩溃问题
- ✅ 编译通过插件在Navisworks 2017中正常加载和运行
---
## 版本 [0.1.3] - 2024-01-XX
### 修复
- **兼容性修复**: 修复C# 7.3兼容性问题移除了nullable引用类型语法
- **API兼容性**: 修复Navisworks 2017 API兼容性问题
- 替换了不存在的`View.RequestSavedViewpoint()`方法
- 使用`Model.RootItem.BoundingBox()`替代不存在的`Model.BoundingBox()`
- 实现了相机位置估算算法作为API限制的替代方案
- **方法签名优化**: 将nullable返回类型改为out参数模式以提高兼容性
- `GetPreciseClickPoint()` 方法
- `GetRaycastClickPoint()` 方法
- `GetSurfacePointFromGeometry()` 方法
- `GetCameraPosition()` 方法
- **射线投射算法**: 完善了射线与包围盒交点计算的错误处理
### 技术改进
- **错误处理**: 增强了所有射线投射相关方法的错误处理和日志记录
- **后备方案**: 在精确坐标获取失败时提供包围盒中心点作为后备方案
- **日志优化**: 改进了调试日志的详细程度和格式
## 技术债务和改进计划
### 当前已知问题
- 暂无已知的功能性问题
### 已完成功能 ✅
1.**TimeLiner 集成**:已实现完整的 TimeLiner 集成功能v0.1.9
- 运输任务自动创建和管理
- 动画状态实时同步
- 完善的错误处理和降级机制
### 下一步开发计划
1. **路径规划功能**:实现 A* 算法的 3D 路径规划
2. **动态碰撞检测增强**:进一步集成 Clash Detective 功能
3. **动画和可视化优化**:添加更多路径动画效果和碰撞高亮显示
4. **DELMIA导出**:实现结构化数据导出功能
5. **TimeLiner 高级功能**
- 支持任务时间线编辑
- 批量任务管理
- 任务导入导出功能
### 性能优化目标
- 大型模型的处理性能优化
- 异步操作的用户界面响应性改进
- 内存使用优化和资源清理机制完善
## [0.1.4] - 2024-01-XX
### 修复
- **点击监听问题**: 修复鼠标点击没有效果的问题
- 添加了点击状态跟踪机制,避免重复处理同一选择
- 增加最小点击间隔500ms防止误触
- 优化定时器间隔从100ms增加到200ms减少资源消耗
- 在处理完点击后自动清除选择,为下次点击做准备
- **通道高亮显示**: 修复通道自动高亮显示丢失的问题
- 在进入路径编辑模式前先清除之前的高亮
- 改用更鲜艳的LimeGreen颜色提高可见性
- 添加详细的高亮状态日志和错误处理
- 增强高亮结果验证机制
- **重复路径点**: 修复点击3次却产生81条记录的问题
- 实现选择去重机制,相同选择在时间间隔内不重复处理
- 添加ModelItem对比逻辑
- 优化定时器触发频率
- **点选详情显示**: 实现路径点列表中点选时的详情显示
- 在状态栏显示选中点的完整信息(名称、类型、坐标、创建时间)
- 修复PointsListBox_SelectedIndexChanged事件处理
- 添加点选择日志记录
- 实现地图中选中点的高亮重绘
### 技术改进
- **状态管理**: 增强点击状态跟踪和管理
- 添加_lastProcessedItem和_lastProcessedTime字段
- 实现MinClickInterval常量控制最小点击间隔
- **日志系统**: 改进调试日志的详细程度
- 点击监听过程的详细日志
- 通道高亮过程的状态跟踪
- 异常堆栈信息记录
- **用户体验**: 优化交互反馈
- 改进状态消息显示选中通道数量
- 在状态栏显示详细的点信息
- 清除无效选择的自动处理