问题分析: - 空间索引获取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> |
||
|---|---|---|
| .claude | ||
| .vscode | ||
| doc | ||
| Properties | ||
| src | ||
| UnitTests | ||
| .gitignore | ||
| CHANGELOG.md | ||
| CLAUDE.md | ||
| clean_database.bat | ||
| compile.bat | ||
| config.toml.example | ||
| deploy-plugin.bat | ||
| NavisworksTransport.sln | ||
| NavisworksTransport.UnitTests.csproj | ||
| NavisworksTransportPlugin.csproj | ||
| nuget.exe | ||
| packages.config | ||
| QWEN.md | ||
| README.md | ||
| run-unit-tests.bat | ||
| VERSION.md | ||
| WARP.md | ||
NavisworksTransport
Navisworks 2017运输冲突检测插件,专用于物流路径规划。
功能特性
已实现功能(第一阶段)
- ✅ 类别属性分配:为模型项目添加物流类别属性(门、电梯、楼梯、通道、障碍物)
- ✅ 批量处理:支持同时为多个选中项目设置属性
- ✅ 用户友好界面:简洁的按钮式对话框
- ✅ COM API集成:使用Navisworks COM API确保属性正确添加
计划功能(后续阶段)
- 🔄 模型分层转换和可见性控制
- 🔄 导航地图构建
- 🔄 A*路径规划算法
- 🔄 动态碰撞检测
- 🔄 动画和时间线集成
- 🔄 DELMIA数据导出
系统要求
- Windows 7 或更高版本
- Navisworks Manage 2017
- .NET Framework 4.6.2
安装说明
- 编译项目生成NavisworksTransportPlugin.dll
- 插件会自动安装到Navisworks插件目录:
[Navisworks安装路径]\Plugins\NavisworksTransportPlugin\ - 重启Navisworks即可在"附加模块"选项卡中找到插件
使用方法
- 在Navisworks中选择要设置属性的模型项目
- 点击"附加模块"选项卡中的"Transport Plugin"
- 在弹出窗口中点击相应的类别按钮
- 在属性面板中查看添加的"物流分类"属性
详细使用说明请参阅:使用说明文档
开发文档
技术架构
NavisworksTransportPlugin/
├── MainPlugin.cs # 插件主类和用户界面
├── LogisticsCategories.cs # 物流类别定义
├── CategoryAttributeManager.cs # COM API封装和属性管理
└── Properties/
└── AssemblyInfo.cs # 程序集信息
版本历史
v1.0 (2025-01-11)
- 实现基础的类别属性分配功能
- 支持5种预定义物流类别
- 提供批量处理能力
- 完整的错误处理和用户反馈
原始需求概述
本插件旨在简化 Navisworks Manage 中移动模型沿确定路径进行物理碰撞或干涉检测的流程。通过自动化 Animator 动画创建、Clash Detective 碰撞测试配置与运行,并提供直观的图形化碰撞结果显示,本插件将大大提高工作效率,并为用户提供一个快速验证施工物流和设备移动可行性的工具。
完整的目标功能包括:
- 在 Navisworks Ribbon 界面添加自定义按钮
- 用户选择一个要移动的模型
- 用户通过选择一系列模型元素来定义非直线路径点
- 插件自动在 Animator 中创建基于这些路径点的对象动画
- 插件自动配置并运行一个链接到该动画的动态碰撞测试
- 当检测到碰撞时,插件将通过颜色覆盖直观地高亮显示碰撞的物体,并弹出明确的提示信息