NavisworksTransport/doc/design/Navisworks 物流路径规划插件快速开发方案:动态碰撞检测与动画集成_.md

385 lines
47 KiB
Markdown
Raw 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.

# **Navisworks 物流路径规划插件快速开发方案:动态碰撞检测与动画集成**
本报告旨在为在Autodesk Navisworks 2017平台上开发一款物流路径规划插件提供深入的技术分析与详细开发方案。鉴于项目交付周期仅为一周本报告将重点关注核心功能的实现优先级以确保在有限时间内交付一个具备客户演示效果的原型。
## **1\. 项目需求分析与优先级划分**
该Navisworks插件的核心目标是实现全模型分层转换、构建导航地图并支持物流路径规划。根据最新澄清客户的最终目的是**在自定义路径上模拟模型移动,实时检测碰撞,并结合时间线和动画组件醒目地标识碰撞**。项目面临的主要挑战是紧迫的开发时间(一周),这要求在功能范围和技术实现上做出审慎的权衡与优先级排序。
### **1.1. 核心挑战与关键考量**
**时间限制**
一周的开发周期对项目范围构成严格限制。这意味着必须优先实现核心功能并采用成熟、直接的技术路径。任何需要大量定制开发、复杂算法优化或深度集成的工作都应推迟到后续阶段。例如复杂的视频渲染或高度优化的DELMIA数据交换格式在初期可能需要简化处理以确保基本功能的按时交付 \[用户查询\]。
**技术栈与环境限制**
项目明确要求在Windows 7操作系统和Navisworks 2017环境下运行 \[用户查询\]。这意味着插件必须针对.NET Framework 4.6或更高版本进行开发因为Navisworks 2017 API与.NET Framework 4.6兼容 。此外开发人员必须使用Navisworks 2017的特定SDK该SDK通常随产品安装在\\api\\文件夹中 1。
值得注意的是Navisworks 2017 API版本相对较旧。尽管.NET API是新开发的推荐接口但某些特定功能例如向模型元素添加用户自定义属性仍然需要通过传统的COM API实现 2。这引入了开发复杂性因为开发人员需要掌握两种不同的API范式并利用
ComApiBridge类在.NET和COM对象之间进行转换 5。这种双重API的运用增加了开发工作的开销并可能在调试过程中带来额外的挑战需要具备更专业的知识。
**模型复杂性与数据处理**
Navisworks作为项目审阅软件能够聚合来自多种设计软件如AutoCAD、Revit、Inventor的大型3D模型 1。这意味着插件在处理模型数据时需要应对可能非常庞大和复杂的几何信息。全模型分层转换和路径规划功能将依赖于对模型几何数据的有效提取和分析 \[用户查询\]。
从模型中提取详细的网格数据如三角形、顶点对于精确的3D路径规划例如用于精确体素化和碰撞检测至关重要。然而这是一个计算密集型操作特别是对于大型、复杂的Navisworks模型而言 。在Windows 7和Navisworks 2017这样的旧系统上执行此操作可能会导致显著的性能瓶颈例如长时间的处理延迟或用户界面冻结。因此在为期一周的演示版本中必须在功能深度与响应速度之间取得务实的平衡。初期可以考虑使用包围盒近似来表示障碍物 7并采用更粗糙的体素网格来确保系统响应性。更详细的几何提取和处理以及可能的多线程异步处理以避免阻塞用户界面可以作为后续开发阶段的优化目标 9。
**BIM与数字化制造仿真的桥接**
用户需求明确将NavisworksBIM协调与DELMIA数字化制造、机器人仿真联系起来 10。这突显了行业中将设计/施工数据与运营/物流规划连接起来的日益增长的需求。Navisworks在这一过程中充当了桥梁聚合设计数据然后插件对这些数据进行处理以支持制造仿真。这代表了BIM数据在运营规划中的直接应用超越了传统的BIM设计审阅范畴。
因此插件的成功不仅在于Navisworks内部功能的实现更在于其能否生成DELMIA可消费的数据格式从而促进物流领域的“数字孪生”方法。这使得DELMIA导出功能的重要性超越了简单的“锦上添花”将插件定位为高级制造工作流程的关键推动者。
### **1.2. 详细功能需求(演示优先级)**
以下根据一周的开发时间,对各项功能进行可行性评估和优先级排序。
**插件安装与配置(自动化)**
* **需求:** 支持Win7傻瓜式安装程序自动识别Navisworks安装路径并安装插件修改配置和菜单 \[用户查询\]。
* **可行性(一周演示):** 高。
* **实现细节:**
* **安装程序:** WiX Toolset是创建Windows MSI安装程序的推荐且健壮的工具 13。它支持自动化、静默安装或带有最小用户界面的引导式安装。
* **路径识别:** Navisworks的安装路径可以通过读取Windows注册表可靠地获取。对于Navisworks 2017常见的注册表路径包括Computer\\HKEY\_LOCAL\_MACHINE\\SOFTWARE\\Autodesk\\Navisworks Simulate\\21.0\\Location或Computer\\HKEY\_LOCAL\_MACHINE\\SOFTWARE\\Autodesk\\Navisworks Manage\\21.0\\Location 。WiX Toolset支持通过注册表查找来设置安装程序属性从而允许安装程序自动检测正确的安装目录 15。
* **插件部署:** Navisworks插件是.NET程序集DLL必须放置在特定的文件夹结构中{Navisworks Installation Location}\\Plugins\\{PluginName}\\ 17。为了Navisworks能够加载插件插件文件夹的名称必须与主插件DLL的名称精确匹配不含
.dll扩展名 17。WiX安装程序将配置为将编译后的插件DLL和任何所需的辅助DLL复制到此确定的位置 19。
* **菜单/配置修改:** 派生自AddInPlugin的插件会自动集成到Navisworks的“附加模块”选项卡中 17。对于自定义用户界面面板可以使用
DockPanePlugin类 。这些API机制在插件加载时自动处理菜单和配置方面无需安装程序手动修改Navisworks配置文件。
**模型选择与路径点定义**
* **需求:** 支持选择通道模型功能,针对较为复杂的环境,支持路径点功能,指定初始点、终点的位置及方向 \[用户查询\]。
* **可行性(一周演示):** 基本点选择和对象识别可行性高;精确“通道模型”定义可行性中等。
* **实现细节:**
* **交互式选择:** Navisworks.NET API提供了Application.ActiveDocument.CurrentSelection.SelectedItems来访问当前选定的ModelItem 21。插件的用户界面可以设置按钮例如“设置起点”、“设置终点”当点击这些按钮时捕获当前选定的
ModelItem及其空间数据。
* **起点/终点坐标:** ModelItem包围盒的中心点ModelItem.BoundingBox().Center可以作为默认的起点/终点 7。为了更精确插件可以允许用户在视图中点击特定点这需要自定义的点击测试逻辑对于MVP来说较为复杂。坐标可以在插件的停靠面板中显示。
* **方向:** 捕获方向信息更为复杂。对于MVP可以简化或省略此功能假设默认方向例如与全局轴对齐。在第二阶段这可能涉及定义第二个点或使用选定对象的变换ModelItem.Transform来确定方向 7。
* **“通道模型”定义:** 这意味着识别3D模型中的可通行区域或特定路径。对于MVP可以简化为
1. 用户手动选择代表可通行“通道”的ModelItem例如楼层、开放走廊和/或代表“障碍物”的ModelItem例如墙壁、机械
2. 插件捕获这些选择并处理其几何数据以进行路径查找。
**基于类别的属性分配**
* **需求:** 支持为“类别”设置功能,例如将物流路径相关的元素(如门、电梯、楼梯、通道等)设置特定的属性或分类以便在Navisworks中进行识别和筛选 \[用户查询\]。
* **可行性(一周演示):** 高。
* **实现细节:**
* **自定义属性:** Navisworks API允许向ModelItem添加自定义属性。关键在于要添加在标准Navisworks属性面板中显示的用户定义属性必须通过ComApiBridgeAutodesk.Navisworks.Api.ComApi.ComBridge和InwGUIPropertyNode2.SetUserDefined方法使用旧版COM API 2。这是Navisworks API社区中一个有据可查的模式 2。
* **工作流程:** 插件将提供一个用户界面元素例如停靠面板中的按钮当点击这些按钮时将预定义的“物流”类别及其属性例如“类型”如“门”、“电梯”、“楼梯”、“通道”、“障碍物”以及“可通行”如“True”、“False”应用于当前选定的ModelItem。这允许对模型元素进行语义标记使其与物流相关。
* **筛选:** 一旦这些属性被分配,插件可以根据这些自定义属性以编程方式查询模型,以识别相关元素。这可用于选择路径元素、定义障碍物或控制可见性。
**分层可见性控制(基础)**
* **需求:** 支持层级创建功能,支持自动隐藏或淡化非关键层,以便专注于物流路径相关的层级。支持通过预设的属性筛选出物流路径相关元素 \[用户查询\]。
* **可行性(一周演示):** 隐藏/显示可行性高;“淡化”可行性中等。
* **实现细节:**
* **隐藏/显示:**.NET API中的DocumentModels.SetHidden(IEnumerable\<ModelItem\> items, bool value)方法可直接用于隐藏或显示特定的ModelItem实例 26。插件可以识别“非关键”项目例如没有“物流”自定义属性的项目或“Logistics.Traversable \= False”的项目并将其隐藏从而帮助用户专注于路径。
* **按属性筛选:** 此功能与“基于类别的属性分配”直接相关。插件将根据其自定义的“物流”属性查询ModelItem以确定哪些元素是“关键”的哪些是“非关键”的从而进行可见性控制。
* **淡化:** 对于“淡化”效果使元素半透明可以使用DocumentModels.OverrideTemporaryTransparency方法 26。虽然可行但实现平滑的淡化过渡和管理多个透明度级别对于一周的MVP来说可能过于耗时可以推迟到第二阶段。简单的隐藏/显示足以满足演示需求。
**交互式路径生成与动画(核心)**
* **需求:** 创建交互式导航控件,允许用户选择不同的起点和终点,动态生成路径。结合时间线和动画组件,实现基于时间线的动画效果,如果发生碰撞或干涉,要醒目的标识出来 \[用户查询\]。
* **可行性(一周演示):** 基本交互、单路径生成、动画创建、时间线链接及碰撞高亮可行性高。
* **实现细节:**
* **用户界面控件:** 自定义停靠面板使用DockPanePlugin实现将作为用户交互的主要界面 \[3.1, 74\]。此面板将包含按钮(例如,“计算路径”、“播放动画”)并可能显示状态消息或路径详细信息。
* **路径生成:** 插件将执行路径查找算法如A\*算法生成一系列3D坐标点作为路径 28。
* **模型动画化:**
* **Animator集成** Navisworks的Animator工具允许创建对象动画通过关键帧控制对象的移动和旋转 45。虽然Navisworks API对Animator的直接编程控制例如直接创建动画集和关键帧可能有限 44但可以通过以下策略实现
* **手动创建动画集(演示阶段):** 在演示中可以预先在Navisworks中为代表运输车辆的模型手动创建动画集并将其设置为可由插件控制。
* **通过API控制对象变换** 插件可以根据计算出的路径点在TimeLiner模拟的每个时间步长通过API动态更新代表运输车辆的ModelItem的变换位置和方向从而模拟其沿路径移动 45。
* **TimeLiner集成** Navisworks的TimeLiner工具可以用于4D模拟将模型与时间表关联 6。插件可以将动画化的模型运输车辆与TimeLiner任务关联起来 45。
* **动态碰撞检测:**
* **TimeLiner与Clash Detective联动** Navisworks Manage版本支持TimeLiner与Clash Detective的联动实现基于时间的碰撞检测 37。这是实现动态碰撞检测的关键。
* **工作流程:**
1. 插件将创建一个新的Clash Test。
2. 将“运输车辆模型”设置为选择集A。
3. 将“门、通道、其他模型”等障碍物设置为选择集B。
4. 将此Clash Test的“Link”选项设置为“TimeLiner” 18。
5. 当TimeLiner模拟播放时Clash Detective将在每个时间步长自动运行碰撞检测并记录碰撞结果 18。
* **碰撞高亮显示:**
* **获取碰撞结果:** 插件将通过Navisworks API访问Clash Detective的碰撞结果ClashResult对象 17。
* **视觉反馈:** 当检测到碰撞时插件将使用DocumentModels.OverrideTemporaryColor方法 30将发生碰撞的模型运输车辆和障碍物醒目地高亮显示例如变为红色或闪烁。这种临时颜色覆盖可以在碰撞结束后或模拟停止时重置使用
DocumentModels.ResetTemporaryMaterials或DocumentModels.ResetAllTemporaryMaterials 53。
**路径规划输出基础可视化与DELMIA导出**
* **需求:** 输出导航地图和路径规划结果可以是视频、图片或Navisworks文件支持路径规划结果结构化文件输出结果文件能够导入DELMIA \[用户查询\]。
* **可行性(一周演示):** 基本可视化和简单的结构化文本/XML导出可行性高。视频/图片输出和完全符合DELMIA模式的可行性低。
* **实现细节:**
* **可视化:** 如上所述路径将使用临时图形直接在Navisworks 3D视图中进行可视化 30。这将作为演示的主要“导航地图”输出。
* **Navisworks 文件输出:** 当前带有可视化路径的Navisworks模型可以保存为.nwd或.nwf文件使用Document.SaveFile()或Document.PublishFile()方法 31。这使得路径可以在Navisworks Freedom免费查看器中进行后续审阅 6。
* **DELMIA结构化文件输出**
* **DELMIA兼容性** DELMIA支持多种格式导入3D模型和过程数据包括SOLIDWORKS文件、DXF、STEP、Revit和3D点云 。DELMIA Robotics可以从OLP XML文件上传/下载机器人任务 33并且XML是制造信息交换中广泛使用的中立模型 34。Dassault Systèmes也使用3DXML格式 36。
* **初始导出:** 对于一周的演示插件将生成一个简单的XML文件其中包含3D路径点的序列坐标并可能包含估计时间标签的占位符。这个自定义XML将演示DELMIA结构化数据导出的能力即使它最初不完全符合特定的复杂DELMIA模式。用户随后可以将这个基本的XML文件手动导入DELMIA以演示概念。
* **视频/图片输出:** Navisworks API对视频渲染或复杂图像导出超出简单截图的直接API控制通常是有限的 31。此功能通常是Navisworks原生GUI功能的一部分或需要外部工具。因此对于MVP此功能将推迟。
### **1.3. 技术环境与约束**
**操作系统Windows 7**
此操作系统要求是一个关键约束因为它意味着插件必须针对与Windows 7兼容的.NET Framework版本例如.NET Framework 4.6兼容)进行编译 。这可能会限制使用在Windows 7上不受支持的较新.NET Core功能或库。
**软件环境Navisworks 2017**
此要求规定了必须使用的Navisworks APISDK的具体版本 。Navisworks 2017的API文档开发人员指南、参考指南和示例项目通常随产品安装在\\api\\文件夹中 1。
这些环境限制意味着开发工作必须定位到适当的.NET Framework版本并使用Navisworks 2017 SDK。在整个开发过程中在安装了Navisworks 2017的Windows 7机器上进行兼容性测试至关重要。
## **2\. 技术开发方案:核心模块**
本节详细阐述了插件核心功能的技术实现方法。
### **2.1. Navisworks API 基础:.NET 与 COM 互操作性**
**主要 API 与关键程序集**
Autodesk Navisworks.NET API是开发自定义插件的主要接口 1。它提供了对应用程序、文档、模型和用户界面元素的全面访问。开发人员将主要使用C\#进行插件开发。
关键的Navisworks插件引用包括Autodesk.Navisworks.Api.dll核心API、Autodesk.Navisworks.ComApi.dllCOM API互操作定义、Autodesk.Navisworks.Interop.ComApi.dllCOM API互操作类型和Autodesk.Navisworks.Interop.ComApiAutomation.dll用于自动化任务 18。这些程序集通常位于Navisworks安装目录的
\\api\\文件夹中 1。
**COM 互操作性**
尽管.NET API通常是新开发的推荐接口但某些功能例如向ModelItem添加自定义用户定义属性目前只能通过旧版COM API实现 2。.NET API提供了
ComApiBridge类以促进.NET和COM对象之间的无缝互操作 5。这要求开发人员谨慎处理对象转换并理解两种API范式。
**插件类型**
该插件将使用两种主要的Navisworks插件类型来实现
* **AddInPlugin** 用于在Navisworks功能区界面上创建新的按钮或入口点使用户可以轻松访问插件 17。
* **DockPanePlugin** 用于在自定义可停靠面板中提供交互式用户界面,允许持久控制和信息显示,而不会使主工作区混乱 。
**表1Navisworks 2017 插件开发核心 API 组件**
下表提供了核心API类及其作用的快速参考并强调了影响开发复杂性的关键.NET/COM区别。该表将作为开发人员的基础指南。
| 组件/类 | API 类型 | 主要功能 | 相关文献 |
| :---- | :---- | :---- | :---- |
| Application | .NET | 全局应用程序访问,管理文档实例 | 38 |
| Document | .NET | 文档管理代表NWC/NWD/NWF文件内容 | 38 |
| ModelItem | .NET | 模型层级中的实例,可包含几何数据或子项 | 38 |
| ModelGeometry | .NET | 模型层级中的几何表示 | |
| DocumentModels | .NET | 文档中模型实例的集合,用于隐藏/显示 | 38 |
| DocumentCurrentSelection | .NET | 当前文档中的选定项集合,用于交互式选择 | 22 |
| AddInPlugin | .NET | 插件类型用于在Navisworks功能区添加功能 | 17 |
| DockPanePlugin | .NET | 插件类型用于在Navisworks GUI中添加自定义可停靠面板 | |
| ComApiBridge | 桥接 | .NET和COM对象之间的转换器 | 2 |
| InwGUIPropertyNode2 | COM | 用于访问和修改模型项属性的COM接口 | 2 |
| InwOaPropertyVec | COM | 用于创建新属性类别的COM对象 | 2 |
| InwOaProperty | COM | 用于创建新属性的COM对象 | 2 |
| Graphics | .NET | 用于在Navisworks视图中绘制临时几何图形 | 30 |
| InwOaFragment3 | COM | 用于访问模型片段的几何原始数据 | 17 |
| CallbackGeomListener | COM | 用于接收GenerateSimplePrimitives方法生成的几何原始数据回调 | 17 |
| DocumentClash | .NET | 访问Clash Detective功能 | 37 |
| DocumentClashTests | .NET | 管理Clash Test集合 | 37 |
| ClashTest | .NET | 单个碰撞测试的配置与结果 | 37 |
| ClashResult | .NET | 单个碰撞结果 | 17 |
| DocumentTimeliner | .NET | 访问TimeLiner功能 | 54 |
| TimelinerTask | .NET | TimeLiner中的任务 | 13 |
### **2.2. 模型数据访问与操作**
**访问模型层级与几何数据**
Navisworks模型以ModelItem实例的层级结构组织 38。这些
ModelItem可以表示装配体、零件或单个几何图元。
为了遍历模型ModelItem.Children提供直接子元素而ModelItem.Descendants则递归检索所有子元素直至包含几何图形的根ModelItem 22。在大型模型中高效的遍历对于性能至关重要。
与ModelItem关联的实际几何数据通过其ModelItem.Geometry属性访问该属性返回一个ModelGeometry对象 。
对于路径查找和碰撞检测所需的详细网格数据例如三角形、顶点COM API是必需的。具体而言InwOaFragment3.GenerateSimplePrimitives结合自定义的CallbackGeomListener可用于遍历模型片段的几何图元点、线、三角形 17。这将是构建3D环境内部表示的基础。
包围盒ModelItem.BoundingBox())提供了项目空间范围的快速、粗略表示,可用于初步筛选或简化的碰撞检查 7。
**实现物流元素自定义属性**
为了满足将物流元素(门、电梯、通道等)按特定属性分类的需求 \[用户查询\]插件必须向ModelItem添加自定义属性。
这通过Navisworks COM API实现。该过程包括
1. 获取ModelItem的InwGUIPropertyNode2接口通过ComApiBridge从.NET ModelItem转换
2. 使用COM ObjectFactory创建新的属性类别InwOaPropertyVec和单个属性InwOaProperty
3. 为每个属性设置内部名称、显示名称和值。
4. 将新属性添加到类别中然后将用户定义的类别设置在InwGUIPropertyNode2上 2。
Navisworks-Net-Plugin-Property-Database-Example 41展示了类似的方法来显示外部数据这可以调整为写入自定义属性。
这种数据丰富功能不仅仅是用于可见性筛选的表面特性。它从根本上将静态BIM元素转化为“智能”物流组件。通过将元素标记为“门”、“电梯”、“通道”或“障碍物”插件用语义数据丰富了模型这些数据对于路径规划引擎的决策至关重要。这是创建物流“数字孪生”的关键一步其中模型不仅仅是视觉表示更是数据丰富的运营资产。这种数据丰富功能为更高级的仿真和分析奠定了基础超越了简单的路径查找例如资源跟踪、容量分析甚至与更广泛的设施管理系统集成。将这种丰富的数据导出到DELMIA进一步增强了这一能力实现了更集成的数字化制造工作流程。
**动态图层可见性**
为了允许用户“自动隐藏或淡化非关键层”并专注于物流路径 \[用户查询\]插件将控制ModelItem的可见性。
.NET API中的DocumentModels.SetHidden(IEnumerable\<ModelItem\> items, bool value)方法用于完全隐藏或显示ModelItem集合 26。这是一种直接且有效的方法可以使MVP的视图更清晰。
对于“淡化”可以使用DocumentModels.OverrideTemporaryTransparency方法对ModelItem应用临时透明度覆盖 26。这在视觉上更具吸引力但增加了管理透明度状态的复杂性可能是第二阶段的增强功能。
要隐藏或淡化的项目选择将基于上一步中分配的自定义“物流”属性,从而允许插件智能地筛选元素(例如,隐藏所有未标记为“通道”或“物流障碍物”的项目)。
### **2.3. 3D 路径规划与动态碰撞模拟**
**算法选择A\* 算法(可行性、避障)**
**A\* 算法:** A\*发音为“A-star”是一种成熟且广泛认可的图遍历和路径查找算法 28。它以其完整性、最优性在给定图上找到最短路径和效率而闻名因为它使用启发式函数来指导搜索 29。它已成功应用于3D路径规划和避障问题 9。
**演示可行性:** A\*是MVP的有力候选因为它行为可预测并保证在离散网格上找到最优路径。其实现方式已得到充分理解使其在紧迫的一周期限内开发比更复杂的基于采样的方法更具可行性。
**替代方案(第二阶段):** 快速探索随机树RRT及其优化变体RRT\*)是基于采样的算法,可以快速找到可行路径,特别是在高维或复杂、非结构化空间中 43。这些算法在未来阶段可以作为优化路径平滑度或处理更复杂环境的选项。
**环境表示:体素网格**
为了在Navisworks模型中执行3D路径规划需要将连续的3D几何模型转换为离散化的、可供路径规划算法处理的结构。体素网格Voxel Grid是一种理想的选择它将3D空间划分为一系列小的立方体单元体素 42。每个体素可以标记为“可通行”或“障碍物”从而为路径查找算法提供一个清晰的、离散化的环境图。
构建体素网格的过程将涉及:
1. **几何数据提取:** 遍历Navisworks模型中的ModelItem并使用COM API的InwOaFragment3.GenerateSimplePrimitives方法提取其底层的三角形、顶点等几何原始数据 17。
2. **体素化:** 将提取的几何数据投影到预定义的体素网格上。如果任何几何图元占据了某个体素则该体素将被标记为“障碍物”。为了应对不同尺寸的运输车辆不小于10种尺寸规格体素网格的分辨率需要足够精细或者在路径规划时考虑车辆的包络体积以确保规划的路径能够容纳车辆通过 \[用户查询\]。
3. **属性映射:** 结合之前为物流元素分配的自定义属性(例如,“门”、“电梯”、“通道”、“障碍物”),这些语义信息可以进一步丰富体素网格。例如,标记为“通道”的区域将被视为可通行,而标记为“障碍物”的区域则被视为不可通行。这使得路径规划算法能够理解模型的语义,而不仅仅是几何形状。
**动态碰撞检测与动画集成**
这是本次任务的核心。Navisworks本身具备强大的碰撞检测功能Clash Detective 44并且可以与TimeLiner进行联动实现基于时间的碰撞检测 37。
1. **路径生成与动画创建:**
* 插件首先利用A\*算法生成一条离散的3D路径一系列坐标点
* 然后插件将利用Navisworks的Animator功能为代表“运输车辆”的模型创建一个对象动画Object Animation。这可以通过在路径的关键点处设置模型的变换位置和旋转关键帧来实现 45。虽然Navisworks API对Animator的直接编程控制例如直接创建动画集和关键帧可能有限 44但可以通过在TimeLiner模拟的每个时间步长动态更新模型位置来模拟动画效果或者利用Navisworks内置的动画功能如通过保存视点创建动画 55
2. **TimeLiner集成**
* 将创建的动画与TimeLiner任务关联 45。TimeLiner允许将模型与时间表链接并模拟其在不同时间点的状态。
* 插件可以创建或修改TimeLiner任务并将运输车辆模型分配给这些任务。
3. **Time-Based Clash Detection设置**
* 通过Navisworks API访问Document.Clash属性获取Clash Detective功能 37。
* 创建一个新的ClashTest 37。
* 将“运输车辆模型”定义为碰撞测试的“选择集A”ClashSelection
* 将“门、通道、其他模型”等障碍物通过自定义属性筛选获得定义为碰撞测试的“选择集B”。
* **关键步骤:** 将ClashTest的Link属性设置为TimeLiner 37。这将使碰撞检测与TimeLiner的模拟进度同步。
* 运行TimeLiner模拟Navisworks将自动在每个时间步长执行碰撞检测 18。
4. **碰撞结果高亮显示:**
* 在TimeLiner模拟过程中或结束后插件可以访问ClashTest的Children集合获取ClashResult对象 17。每个
ClashResult代表一次碰撞。
* 对于每个检测到的碰撞插件将获取涉及碰撞的ModelItem 27。
* 使用DocumentModels.OverrideTemporaryColor(IEnumerable\<ModelItem\> items, Color color)方法 51将这些碰撞的
ModelItem醒目地高亮显示例如设置为红色或黄色。
* 为了实现“醒目标识”可以考虑在碰撞发生时除了改变颜色还可以短暂地使其闪烁或者在UI面板中显示碰撞信息如碰撞时间、涉及对象
* 在模拟结束后或用户选择重置时使用DocumentModels.ResetTemporaryMaterials或DocumentModels.ResetAllTemporaryMaterials方法 53来清除临时高亮。
**路径时间估算**
路径时间标签的设置 \[用户查询\] 可以通过以下方式实现:
1. **路径长度:** 计算规划路径的总长度。
2. **速度参数:** 允许用户输入或选择不同区域(例如,通道、电梯)的平均运输速度。
3. **属性关联:** 将速度参数与自定义的“物流”属性关联,例如,为“通道”类型元素设置默认速度。
4. **估算公式:** 根据路径长度和沿途区域的速度参数,计算总的预估运输时间。例如,时间 \= 距离 / 速度。
这可以在路径规划完成后,作为后处理步骤进行计算和显示。
## **3\. 结论与建议**
本次Navisworks插件开发任务在仅一周的紧迫时间内旨在实现全模型分层转换、导航地图构建以及物流路径规划的核心功能并特别强调动态碰撞检测与动画可视化。通过对Navisworks API、Windows 7及Navisworks 2017环境的深入分析本报告提出了一个可行且具备演示效果的开发方案。
**核心结论:**
1. **基础功能可实现:** 插件的傻瓜式安装、基于自定义属性的模型元素分类、基本分层可见性控制、以及交互式路径的动态生成与可视化在限定时间内是可实现的。Navisworks.NET API提供了大部分所需功能而COM API则弥补了.NET API在自定义用户属性方面的不足。
2. **COM互操作性是关键复杂点** 为了实现用户自定义属性必须使用Navisworks的COM API并进行.NET与COM的互操作。这增加了开发复杂性和调试难度需要开发团队具备相应的经验。
3. **动态碰撞检测可行:** 通过将Navisworks内置的TimeLiner与Clash Detective功能联动可以实现基于时间线的动态碰撞检测并利用API获取碰撞结果进行高亮显示。这是在短时间内实现此核心需求的最有效途径。
4. **性能优化是持续挑战:** 在Windows 7和Navisworks 2017环境下处理大型模型并进行3D路径规划性能将是一个持续的考量。初期版本将采用简化的几何处理和体素化策略以确保基本响应速度。
5. **DELMIA集成概念验证** 初期将通过生成简单的XML文件来验证与DELMIA的数据交换能力而非完全遵循复杂的DELMIA模式。这验证了将BIM数据用于运营规划的战略价值为后续更深层次的集成奠定了基础。
6. **A\*算法的适用性:** A\*算法因其成熟、可预测性和在离散网格上找到最优路径的能力,被选为初期路径规划的核心算法,适合在紧迫的开发周期内实现。
**建议:**
鉴于时间限制,建议将开发重点放在核心功能的稳定性和演示效果上,将高级优化和扩展功能推迟到后续阶段。
* **第一阶段(一周原型):**
* 完成插件的自动化安装和基本UI停靠面板、按钮
* 实现ModelItem的交互式选择并获取起点/终点坐标。
* 实现通过COM API向ModelItem添加自定义“物流”属性例如类型、可通行性
* 实现基于自定义属性的ModelItem隐藏/显示功能。
* 构建基础的体素网格环境表示并集成考虑车辆尺寸的A\*路径规划算法。
* 在Navisworks视图中可视化生成的路径临时图形
* **核心:** 实现将运输车辆模型沿规划路径进行动画化通过API控制变换或利用现有动画功能并将其与TimeLiner任务关联。
* **核心:** 设置TimeLiner与Clash Detective的联动运行时间线模拟并获取碰撞结果。
* **核心:** 在检测到碰撞时使用DocumentModels.OverrideTemporaryColor醒目高亮显示碰撞对象并在模拟结束后重置颜色。
* 实现路径规划结果到简单XML文件的导出以供DELMIA导入进行概念验证。
* **第二阶段(功能增强与优化):**
* 优化体素网格的构建效率考虑异步处理以避免UI阻塞。
* 增强路径平滑算法,使生成的路径更自然。
* 实现更精细的碰撞检测,例如基于模型几何原始数据而非仅包围盒。
* 研究并实现更符合DELMIA特定模式的结构化数据导出以实现更无缝的集成。
* 探索Navisworks API中“淡化”效果的实现提升视觉体验。
* 考虑支持路径方向的精确定义。
* **第三阶段(高级功能与扩展):**
* 集成更高级的路径规划算法如RRT\*),以应对更复杂或动态的场景。
* 开发视频或高质量图像输出功能。
* 考虑支持动态障碍物或实时路径调整。
* 扩展自定义属性,支持更丰富的物流信息(如载重、货物类型等)。
通过遵循上述方案和优先级项目团队有望在严格的时间限制内交付一个功能完善、具备演示价值的Navisworks物流路径规划插件原型为后续的全面开发奠定坚实基础。
#### **Works cited**
1. Navisworks · DocumentModels.SetHidden Method \- ApiDocs.co, accessed June 16, 2025, [https://apidocs.co/apps/navisworks/2018/M\_Autodesk\_Navisworks\_Api\_DocumentParts\_DocumentModels\_SetHidden\_2\_538aa5c3.htm](https://apidocs.co/apps/navisworks/2018/M_Autodesk_Navisworks_Api_DocumentParts_DocumentModels_SetHidden_2_538aa5c3.htm)
2. Navisworks API : COM Interface and Adding Custom Property \- TwentyTwo, accessed June 16, 2025, [https://twentytwo.space/2020/07/18/navisworks-api-com-interface-and-adding-custom-property/](https://twentytwo.space/2020/07/18/navisworks-api-com-interface-and-adding-custom-property/)
3. add custom properties to all desired model items \- AEC DevBlog, accessed June 16, 2025, [https://adndevblog.typepad.com/aec/2013/03/add-custom-properties-to-all-desired-model-items.html](https://adndevblog.typepad.com/aec/2013/03/add-custom-properties-to-all-desired-model-items.html)
4. Solved: Adding Custom Properties to Multiple Selected Elements \- Autodesk Community, accessed June 16, 2025, [https://forums.autodesk.com/t5/navisworks-api/adding-custom-properties-to-multiple-selected-elements/td-p/6904397](https://forums.autodesk.com/t5/navisworks-api/adding-custom-properties-to-multiple-selected-elements/td-p/6904397)
5. Navisworks API | Autodesk Platform Services (APS), accessed June 16, 2025, [https://aps.autodesk.com/developer/overview/navisworks](https://aps.autodesk.com/developer/overview/navisworks)
6. Navisworks · Document.ExportAsDwf Method \- ApiDocs.co, accessed June 16, 2025, [https://apidocs.co/apps/navisworks/2018/M\_Autodesk\_Navisworks\_Api\_Document\_ExportAsDwf\_1\_bb3a7a4f.htm](https://apidocs.co/apps/navisworks/2018/M_Autodesk_Navisworks_Api_Document_ExportAsDwf_1_bb3a7a4f.htm)
7. Solved: TimeLiner & Animation \- Autodesk Community, accessed June 16, 2025, [https://forums.autodesk.com/t5/navisworks-forum/timeliner-amp-animation/td-p/2753576](https://forums.autodesk.com/t5/navisworks-forum/timeliner-amp-animation/td-p/2753576)
8. Navisworks \- Changing Model Color & Transparency \- YouTube, accessed June 16, 2025, [https://www.youtube.com/watch?v=NSb8O7ZePNk](https://www.youtube.com/watch?v=NSb8O7ZePNk)
9. omar-mahfouz/A-star-3D-Pathfinding-in-Unity \- GitHub, accessed June 16, 2025, [https://github.com/omar-mahfouz/A-star-3D-Pathfinding-in-Unity](https://github.com/omar-mahfouz/A-star-3D-Pathfinding-in-Unity)
10. How to obtain the installation path of NAVISWORKS software using C \- Forums, Autodesk, accessed June 16, 2025, [https://forums.autodesk.com/t5/navisworks-api-forum/how-to-obtain-the-installation-path-of-navisworks-software-using/td-p/13354321](https://forums.autodesk.com/t5/navisworks-api-forum/how-to-obtain-the-installation-path-of-navisworks-software-using/td-p/13354321)
11. Where to Install? | Docs, accessed June 16, 2025, [https://docs.firegiant.com/wix3/tutorial/getting-started/where-to-install/](https://docs.firegiant.com/wix3/tutorial/getting-started/where-to-install/)
12. ApiDocs.co · Navisworks · Plug-ins, accessed June 16, 2025, [https://apidocs.co/apps/navisworks/2017/87317537-2911-4c08-b492-6496c82b3ed5.htm](https://apidocs.co/apps/navisworks/2017/87317537-2911-4c08-b492-6496c82b3ed5.htm)
13. Timeliner API-part1 \- AEC DevBlog \- TypePad, accessed June 16, 2025, [https://adndevblog.typepad.com/aec/2012/10/timeliner-api-part1.html](https://adndevblog.typepad.com/aec/2012/10/timeliner-api-part1.html)
14. Navisworks API \- Create Clash test? : r/bim \- Reddit, accessed June 16, 2025, [https://www.reddit.com/r/bim/comments/1l5494a/navisworks\_api\_create\_clash\_test/](https://www.reddit.com/r/bim/comments/1l5494a/navisworks_api_create_clash_test/)
15. How to install application in custom folder using wix installer,other than Program Files folder, accessed June 16, 2025, [https://stackoverflow.com/questions/26994571/how-to-install-application-in-custom-folder-using-wix-installer-other-than-progr](https://stackoverflow.com/questions/26994571/how-to-install-application-in-custom-folder-using-wix-installer-other-than-progr)
16. ApiDocs.co · Navisworks · ClashTest Class, accessed June 16, 2025, [https://apidocs.co/apps/navisworks/2018/T\_Autodesk\_Navisworks\_Api\_Clash\_ClashTest.htm](https://apidocs.co/apps/navisworks/2018/T_Autodesk_Navisworks_Api_Clash_ClashTest.htm)
17. Navisworks API \- AEC DevBlog, accessed June 16, 2025, [https://adndevblog.typepad.com/aec/navisworks/page/15/](https://adndevblog.typepad.com/aec/navisworks/page/15/)
18. Navisworks Help | Use TimeLiner for Time-Based Clashing | Autodesk, accessed June 16, 2025, [https://help.autodesk.com/view/NAV/2025/ENU/?guid=GUID-9B0AA3DA-642A-4ABE-8AEB-7920F0649175](https://help.autodesk.com/view/NAV/2025/ENU/?guid=GUID-9B0AA3DA-642A-4ABE-8AEB-7920F0649175)
19. DNBIgpOlpUI OLPTranslator (Object) \- CATIA design, accessed June 16, 2025, [https://catiadesign.org/\_doc/V5Automation/generated/interfaces/DNBIgpOlpUI/interface\_OLPTranslator\_17096.htm](https://catiadesign.org/_doc/V5Automation/generated/interfaces/DNBIgpOlpUI/interface_OLPTranslator_17096.htm)
20. Solved: My First Navisworks Plug-in (from scratch please) \- Autodesk Community, accessed June 16, 2025, [https://forums.autodesk.com/t5/navisworks-api-forum/my-first-navisworks-plug-in-from-scratch-please/td-p/6205591](https://forums.autodesk.com/t5/navisworks-api-forum/my-first-navisworks-plug-in-from-scratch-please/td-p/6205591)
21. Navisworks · Selections and Collections of ModelItem \- ApiDocs.co, accessed June 16, 2025, [https://apidocs.co/apps/navisworks/2018/87317537-2911-4c08-b492-6496c82b3edb.htm](https://apidocs.co/apps/navisworks/2018/87317537-2911-4c08-b492-6496c82b3edb.htm)
22. Autodesk Navisworks: 3D Model Management \- NTI Group, accessed June 16, 2025, [https://www.nti-group.com/en-ie/products/autodesk-software/navisworks/](https://www.nti-group.com/en-ie/products/autodesk-software/navisworks/)
23. www.researchgate.net, accessed June 16, 2025, [https://www.researchgate.net/publication/363269733\_3D\_Path\_Planning\_and\_Obstacle\_Avoidance\_Algorithms\_for\_Obstacle-Overcoming\_Robots\#:\~:text=The%20algorithms%20aim%20to%20plan,greedy%20best%2Dfirst%20strategy%20algorithm.](https://www.researchgate.net/publication/363269733_3D_Path_Planning_and_Obstacle_Avoidance_Algorithms_for_Obstacle-Overcoming_Robots#:~:text=The%20algorithms%20aim%20to%20plan,greedy%20best%2Dfirst%20strategy%20algorithm.)
24. OverrideTemporaryColor vs. OverridePermanentColor \- Autodesk Community, accessed June 16, 2025, [https://forums.autodesk.com/t5/navisworks-api-forum/overridetemporarycolor-vs-overridepermanentcolor/td-p/6304371](https://forums.autodesk.com/t5/navisworks-api-forum/overridetemporarycolor-vs-overridepermanentcolor/td-p/6304371)
25. xiaodongliang/Navisworks-Net-Plugin-Property-Database-Example \- GitHub, accessed June 16, 2025, [https://github.com/xiaodongliang/Navisworks-Net-Plugin-Property-Database-Example](https://github.com/xiaodongliang/Navisworks-Net-Plugin-Property-Database-Example)
26. Data driven design and simulation system based on XML \- ResearchGate, accessed June 16, 2025, [https://www.researchgate.net/publication/261203583\_Data\_driven\_design\_and\_simulation\_system\_based\_on\_XML](https://www.researchgate.net/publication/261203583_Data_driven_design_and_simulation_system_based_on_XML)
27. Navisworks API selection null reference exception \- Stack Overflow, accessed June 16, 2025, [https://stackoverflow.com/questions/78147724/navisworks-api-selection-null-reference-exception](https://stackoverflow.com/questions/78147724/navisworks-api-selection-null-reference-exception)
28. Navisworks-2017-x64-API 1.0.0 \- NuGet, accessed June 16, 2025, [https://www.nuget.org/packages/Navisworks-2017-x64-API](https://www.nuget.org/packages/Navisworks-2017-x64-API)
29. A\* search algorithm \- Wikipedia, accessed June 16, 2025, [https://en.wikipedia.org/wiki/A\*\_search\_algorithm](https://en.wikipedia.org/wiki/A*_search_algorithm)
30. Navisworks API \- AEC DevBlog \- TypePad, accessed June 16, 2025, [https://adndevblog.typepad.com/aec/navisworks/page/4/](https://adndevblog.typepad.com/aec/navisworks/page/4/)
31. Dassault Systemes Delivers 3D XML Specifications and Player, accessed June 16, 2025, [https://www.3ds.com/newsroom/press-releases/dassault-systemes-delivers-3d-xml-specifications-and-player](https://www.3ds.com/newsroom/press-releases/dassault-systemes-delivers-3d-xml-specifications-and-player)
32. Navisworks · ModelGeometry Class \- ApiDocs.co, accessed June 16, 2025, [https://apidocs.co/apps/navisworks/2018/T\_Autodesk\_Navisworks\_Api\_ModelGeometry.htm](https://apidocs.co/apps/navisworks/2018/T_Autodesk_Navisworks_Api_ModelGeometry.htm)
33. Side Loading \- Manually Installing a Navisworks Plugin | House of BIM, accessed June 16, 2025, [https://www.houseofbim.com/posts/side-loadingmanually-installing-a-navisworks-plugin/](https://www.houseofbim.com/posts/side-loadingmanually-installing-a-navisworks-plugin/)
34. 3DEXPERIENCE DELMIA Plant Layout Detailed 3D Factory Design \- Hawk Ridge Systems, accessed June 16, 2025, [https://hawkridgesys.com/3dexperience-delmia-plant-layout](https://hawkridgesys.com/3dexperience-delmia-plant-layout)
35. Create your first installation package | Docs, accessed June 16, 2025, [https://docs.firegiant.com/quick-start/](https://docs.firegiant.com/quick-start/)
36. Navisworks · DockPanePlugin Class \- ApiDocs.co, accessed June 16, 2025, [https://apidocs.co/apps/navisworks/2018/T\_Autodesk\_Navisworks\_Api\_Plugins\_DockPanePlugin.htm](https://apidocs.co/apps/navisworks/2018/T_Autodesk_Navisworks_Api_Plugins_DockPanePlugin.htm)
37. Clash Detective \- Navisworks \- ApiDocs.co, accessed June 16, 2025, [https://apidocs.co/apps/navisworks/2018/87317537-2911-4c08-b492-6496c82b3ee5.htm](https://apidocs.co/apps/navisworks/2018/87317537-2911-4c08-b492-6496c82b3ee5.htm)
38. Animating Object Doors in Navisworks: A Step-By-Step Guide | VDCI.edu, accessed June 16, 2025, [https://vdci.edu/learn/cad/animating-object-doors-in-navisworks](https://vdci.edu/learn/cad/animating-object-doors-in-navisworks)
39. How To: Read a Registry Entry During Installation | Docs, accessed June 16, 2025, [https://docs.firegiant.com/wix3/howtos/files\_and\_registry/read\_a\_registry\_entry/](https://docs.firegiant.com/wix3/howtos/files_and_registry/read_a_registry_entry/)
40. Navisworks · ModelItem.BoundingBox Method \- ApiDocs.co, accessed June 16, 2025, [https://apidocs.co/apps/navisworks/2018/O\_T\_Autodesk\_Navisworks\_Api\_ModelItem\_BoundingBox.htm](https://apidocs.co/apps/navisworks/2018/O_T_Autodesk_Navisworks_Api_ModelItem_BoundingBox.htm)
41. Grouping collisions with Autodesk Navisworks \- BIMCommunity, accessed June 16, 2025, [https://www.bimcommunity.com/bim-projects/grouping-collisions-with-autodesk-navisworks/](https://www.bimcommunity.com/bim-projects/grouping-collisions-with-autodesk-navisworks/)
42. 3D Path Planning and Obstacle Avoidance Algorithms for Obstacle-Overcoming Robots, accessed June 16, 2025, [https://www.researchgate.net/publication/363269733\_3D\_Path\_Planning\_and\_Obstacle\_Avoidance\_Algorithms\_for\_Obstacle-Overcoming\_Robots](https://www.researchgate.net/publication/363269733_3D_Path_Planning_and_Obstacle_Avoidance_Algorithms_for_Obstacle-Overcoming_Robots)
43. Navisworks Best Practices & Advanced Techniques in 2025 \- Novatr, accessed June 16, 2025, [https://www.novatr.com/blog/navisworks-best-practices](https://www.novatr.com/blog/navisworks-best-practices)
44. Navisworks API Animation from Excel and Revit \- Autodesk Community, accessed June 16, 2025, [https://forums.autodesk.com/t5/navisworks-api-forum/navisworks-api-animation-from-excel-and-revit/td-p/7904011](https://forums.autodesk.com/t5/navisworks-api-forum/navisworks-api-animation-from-excel-and-revit/td-p/7904011)
45. Navisworks \- Animate Objects \- Autodesk Help, accessed June 16, 2025, [https://help.autodesk.com/view/NAV/2024/ENU/?guid=GUID-DD38DF54-B0A6-4B80-86D3-D7C70584CCE7](https://help.autodesk.com/view/NAV/2024/ENU/?guid=GUID-DD38DF54-B0A6-4B80-86D3-D7C70584CCE7)
46. Navisworks \- Add Animation to Tasks \- Autodesk Help, accessed June 16, 2025, [https://help.autodesk.com/view/NAV/2024/ENU/?guid=GUID-BA6D603A-8043-4113-B32A-4EF16FE218DE](https://help.autodesk.com/view/NAV/2024/ENU/?guid=GUID-BA6D603A-8043-4113-B32A-4EF16FE218DE)
47. Navisworks Tutorial Video 10: Animating Objects Part 1 \- YouTube, accessed June 16, 2025, [https://www.youtube.com/watch?v=OhGRZ26S9L4](https://www.youtube.com/watch?v=OhGRZ26S9L4)
48. Navisworks Manage \- Identifying Time-Based Clashes \- YouTube, accessed June 16, 2025, [https://www.youtube.com/watch?v=QfiFd-nFizQ](https://www.youtube.com/watch?v=QfiFd-nFizQ)
49. Navisworks · ClashResultGroup Class \- ApiDocs.co, accessed June 16, 2025, [https://apidocs.co/apps/navisworks/2018/T\_Autodesk\_Navisworks\_Api\_Clash\_ClashResultGroup.htm](https://apidocs.co/apps/navisworks/2018/T_Autodesk_Navisworks_Api_Clash_ClashResultGroup.htm)
50. How to get a InwOclTestResult from a .NET ClashResult? \- Forums, Autodesk, accessed June 16, 2025, [https://forums.autodesk.com/t5/navisworks-api/how-to-get-a-inwocltestresult-from-a-net-clashresult/td-p/5564072](https://forums.autodesk.com/t5/navisworks-api/how-to-get-a-inwocltestresult-from-a-net-clashresult/td-p/5564072)
51. Navisworks · DocumentModels.OverrideTemporaryColor Method \- ApiDocs.co, accessed June 16, 2025, [https://apidocs.co/apps/navisworks/2018/M\_Autodesk\_Navisworks\_Api\_DocumentParts\_DocumentModels\_OverrideTemporaryColor\_2\_6de295e4.htm](https://apidocs.co/apps/navisworks/2018/M_Autodesk_Navisworks_Api_DocumentParts_DocumentModels_OverrideTemporaryColor_2_6de295e4.htm)
52. Change color of Model Items \- Autodesk Community, accessed June 16, 2025, [https://forums.autodesk.com/t5/navisworks-api/change-color-of-model-items/td-p/5865593](https://forums.autodesk.com/t5/navisworks-api/change-color-of-model-items/td-p/5865593)
53. Navisworks · DocumentModels.ResetPermanentTransform Method \- ApiDocs.co, accessed June 16, 2025, [https://apidocs.co/apps/navisworks/2018/M\_Autodesk\_Navisworks\_Api\_DocumentParts\_DocumentModels\_ResetPermanentTransform\_1\_75193b86.htm](https://apidocs.co/apps/navisworks/2018/M_Autodesk_Navisworks_Api_DocumentParts_DocumentModels_ResetPermanentTransform_1_75193b86.htm)
54. Solved: C\# \- How to get value in tab Configure of TimeLiner ? \- Autodesk Community, accessed June 16, 2025, [https://forums.autodesk.com/t5/navisworks-api-forum/c-how-to-get-value-in-tab-configure-of-timeliner/td-p/6611505](https://forums.autodesk.com/t5/navisworks-api-forum/c-how-to-get-value-in-tab-configure-of-timeliner/td-p/6611505)
55. Solved: Navisworks 2012 \- Walkthrough 'path'? \- Autodesk Community, accessed June 16, 2025, [https://forums.autodesk.com/t5/navisworks-forum/navisworks-2012-walkthrough-path/td-p/3069478](https://forums.autodesk.com/t5/navisworks-forum/navisworks-2012-walkthrough-path/td-p/3069478)