47 KiB
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与数字化制造仿真的桥接
用户需求明确将Navisworks(BIM协调)与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,可以简化为:
- 用户手动选择代表可通行“通道”的ModelItem(例如,楼层、开放走廊)和/或代表“障碍物”的ModelItem(例如,墙壁、机械)。
- 插件捕获这些选择并处理其几何数据以进行路径查找。
- 交互式选择: Navisworks.NET API提供了Application.ActiveDocument.CurrentSelection.SelectedItems来访问当前选定的ModelItem 21。插件的用户界面可以设置按钮(例如,“设置起点”、“设置终点”),当点击这些按钮时,捕获当前选定的
基于类别的属性分配
- 需求: 支持为“类别”设置功能,例如将物流路径相关的元素(如门、电梯、楼梯、通道等)设置特定的属性或分类,以便在Navisworks中进行识别和筛选 [用户查询]。
- 可行性(一周演示): 高。
- 实现细节:
- 自定义属性: Navisworks API允许向ModelItem添加自定义属性。关键在于,要添加在标准Navisworks属性面板中显示的用户定义属性,必须通过ComApiBridge(Autodesk.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。
- Animator集成: Navisworks的Animator工具允许创建对象动画,通过关键帧控制对象的移动和旋转 45。虽然Navisworks API对Animator的直接编程控制(例如,直接创建动画集和关键帧)可能有限 44,但可以通过以下策略实现:
- 动态碰撞检测:
- TimeLiner与Clash Detective联动: Navisworks Manage版本支持TimeLiner与Clash Detective的联动,实现基于时间的碰撞检测 37。这是实现动态碰撞检测的关键。
- 工作流程:
- 插件将创建一个新的Clash Test。
- 将“运输车辆模型”设置为选择集A。
- 将“门、通道、其他模型”等障碍物设置为选择集B。
- 将此Clash Test的“Link”选项设置为“TimeLiner” 18。
- 当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 API(SDK)的具体版本 。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.dll(COM API互操作定义)、Autodesk.Navisworks.Interop.ComApi.dll(COM 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: 用于在自定义可停靠面板中提供交互式用户界面,允许持久控制和信息显示,而不会使主工作区混乱 。
表1:Navisworks 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实现。该过程包括:
- 获取ModelItem的InwGUIPropertyNode2接口(通过ComApiBridge从.NET ModelItem转换)。
- 使用COM ObjectFactory创建新的属性类别(InwOaPropertyVec)和单个属性(InwOaProperty)。
- 为每个属性设置内部名称、显示名称和值。
- 将新属性添加到类别中,然后将用户定义的类别设置在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。每个体素可以标记为“可通行”或“障碍物”,从而为路径查找算法提供一个清晰的、离散化的环境图。
构建体素网格的过程将涉及:
- 几何数据提取: 遍历Navisworks模型中的ModelItem,并使用COM API的InwOaFragment3.GenerateSimplePrimitives方法提取其底层的三角形、顶点等几何原始数据 17。
- 体素化: 将提取的几何数据投影到预定义的体素网格上。如果任何几何图元占据了某个体素,则该体素将被标记为“障碍物”。为了应对不同尺寸的运输车辆(不小于10种尺寸规格),体素网格的分辨率需要足够精细,或者在路径规划时考虑车辆的包络体积,以确保规划的路径能够容纳车辆通过 [用户查询]。
- 属性映射: 结合之前为物流元素分配的自定义属性(例如,“门”、“电梯”、“通道”、“障碍物”),这些语义信息可以进一步丰富体素网格。例如,标记为“通道”的区域将被视为可通行,而标记为“障碍物”的区域则被视为不可通行。这使得路径规划算法能够理解模型的语义,而不仅仅是几何形状。
动态碰撞检测与动画集成
这是本次任务的核心。Navisworks本身具备强大的碰撞检测功能(Clash Detective) 44,并且可以与TimeLiner进行联动,实现基于时间的碰撞检测 37。
- 路径生成与动画创建:
- 插件首先利用A*算法生成一条离散的3D路径(一系列坐标点)。
- 然后,插件将利用Navisworks的Animator功能,为代表“运输车辆”的模型创建一个对象动画(Object Animation)。这可以通过在路径的关键点处设置模型的变换(位置和旋转)关键帧来实现 45。虽然Navisworks API对Animator的直接编程控制(例如,直接创建动画集和关键帧)可能有限 44,但可以通过在TimeLiner模拟的每个时间步长动态更新模型位置来模拟动画效果,或者利用Navisworks内置的动画功能(如通过保存视点创建动画 55)。
- TimeLiner集成:
- 将创建的动画与TimeLiner任务关联 45。TimeLiner允许将模型与时间表链接,并模拟其在不同时间点的状态。
- 插件可以创建或修改TimeLiner任务,并将运输车辆模型分配给这些任务。
- Time-Based Clash Detection设置:
- 通过Navisworks API访问Document.Clash属性,获取Clash Detective功能 37。
- 创建一个新的ClashTest 37。
- 将“运输车辆模型”定义为碰撞测试的“选择集A”(ClashSelection)。
- 将“门、通道、其他模型”等障碍物(通过自定义属性筛选获得)定义为碰撞测试的“选择集B”。
- 关键步骤: 将ClashTest的Link属性设置为TimeLiner 37。这将使碰撞检测与TimeLiner的模拟进度同步。
- 运行TimeLiner模拟,Navisworks将自动在每个时间步长执行碰撞检测 18。
- 碰撞结果高亮显示:
- 在TimeLiner模拟过程中或结束后,插件可以访问ClashTest的Children集合,获取ClashResult对象 17。每个
ClashResult代表一次碰撞。 - 对于每个检测到的碰撞,插件将获取涉及碰撞的ModelItem 27。
- 使用DocumentModels.OverrideTemporaryColor(IEnumerable<ModelItem> items, Color color)方法 51将这些碰撞的
ModelItem醒目地高亮显示,例如设置为红色或黄色。 - 为了实现“醒目标识”,可以考虑在碰撞发生时,除了改变颜色,还可以短暂地使其闪烁,或者在UI面板中显示碰撞信息(如碰撞时间、涉及对象)。
- 在模拟结束后或用户选择重置时,使用DocumentModels.ResetTemporaryMaterials或DocumentModels.ResetAllTemporaryMaterials方法 53来清除临时高亮。
- 在TimeLiner模拟过程中或结束后,插件可以访问ClashTest的Children集合,获取ClashResult对象 17。每个
路径时间估算
路径时间标签的设置 [用户查询] 可以通过以下方式实现:
- 路径长度: 计算规划路径的总长度。
- 速度参数: 允许用户输入或选择不同区域(例如,通道、电梯)的平均运输速度。
- 属性关联: 将速度参数与自定义的“物流”属性关联,例如,为“通道”类型元素设置默认速度。
- 估算公式: 根据路径长度和沿途区域的速度参数,计算总的预估运输时间。例如,时间 = 距离 / 速度。
这可以在路径规划完成后,作为后处理步骤进行计算和显示。
3. 结论与建议
本次Navisworks插件开发任务,在仅一周的紧迫时间内,旨在实现全模型分层转换、导航地图构建以及物流路径规划的核心功能,并特别强调动态碰撞检测与动画可视化。通过对Navisworks API、Windows 7及Navisworks 2017环境的深入分析,本报告提出了一个可行且具备演示效果的开发方案。
核心结论:
- 基础功能可实现: 插件的傻瓜式安装、基于自定义属性的模型元素分类、基本分层可见性控制、以及交互式路径的动态生成与可视化,在限定时间内是可实现的。Navisworks.NET API提供了大部分所需功能,而COM API则弥补了.NET API在自定义用户属性方面的不足。
- COM互操作性是关键复杂点: 为了实现用户自定义属性,必须使用Navisworks的COM API并进行.NET与COM的互操作。这增加了开发复杂性和调试难度,需要开发团队具备相应的经验。
- 动态碰撞检测可行: 通过将Navisworks内置的TimeLiner与Clash Detective功能联动,可以实现基于时间线的动态碰撞检测,并利用API获取碰撞结果进行高亮显示。这是在短时间内实现此核心需求的最有效途径。
- 性能优化是持续挑战: 在Windows 7和Navisworks 2017环境下处理大型模型并进行3D路径规划,性能将是一个持续的考量。初期版本将采用简化的几何处理和体素化策略,以确保基本响应速度。
- DELMIA集成概念验证: 初期将通过生成简单的XML文件来验证与DELMIA的数据交换能力,而非完全遵循复杂的DELMIA模式。这验证了将BIM数据用于运营规划的战略价值,为后续更深层次的集成奠定了基础。
- 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
- 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
- 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/
- 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
- 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
- Navisworks API | Autodesk Platform Services (APS), accessed June 16, 2025, https://aps.autodesk.com/developer/overview/navisworks
- 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
- Solved: TimeLiner & Animation - Autodesk Community, accessed June 16, 2025, https://forums.autodesk.com/t5/navisworks-forum/timeliner-amp-animation/td-p/2753576
- Navisworks - Changing Model Color & Transparency - YouTube, accessed June 16, 2025, https://www.youtube.com/watch?v=NSb8O7ZePNk
- omar-mahfouz/A-star-3D-Pathfinding-in-Unity - GitHub, accessed June 16, 2025, https://github.com/omar-mahfouz/A-star-3D-Pathfinding-in-Unity
- 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
- Where to Install? | Docs, accessed June 16, 2025, https://docs.firegiant.com/wix3/tutorial/getting-started/where-to-install/
- ApiDocs.co · Navisworks · Plug-ins, accessed June 16, 2025, https://apidocs.co/apps/navisworks/2017/87317537-2911-4c08-b492-6496c82b3ed5.htm
- Timeliner API-part1 - AEC DevBlog - TypePad, accessed June 16, 2025, https://adndevblog.typepad.com/aec/2012/10/timeliner-api-part1.html
- 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/
- 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
- ApiDocs.co · Navisworks · ClashTest Class, accessed June 16, 2025, https://apidocs.co/apps/navisworks/2018/T_Autodesk_Navisworks_Api_Clash_ClashTest.htm
- Navisworks API - AEC DevBlog, accessed June 16, 2025, https://adndevblog.typepad.com/aec/navisworks/page/15/
- 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
- DNBIgpOlpUI OLPTranslator (Object) - CATIA design, accessed June 16, 2025, https://catiadesign.org/_doc/V5Automation/generated/interfaces/DNBIgpOlpUI/interface_OLPTranslator_17096.htm
- 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
- Navisworks · Selections and Collections of ModelItem - ApiDocs.co, accessed June 16, 2025, https://apidocs.co/apps/navisworks/2018/87317537-2911-4c08-b492-6496c82b3edb.htm
- Autodesk Navisworks: 3D Model Management - NTI Group, accessed June 16, 2025, https://www.nti-group.com/en-ie/products/autodesk-software/navisworks/
- 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.
- OverrideTemporaryColor vs. OverridePermanentColor - Autodesk Community, accessed June 16, 2025, https://forums.autodesk.com/t5/navisworks-api-forum/overridetemporarycolor-vs-overridepermanentcolor/td-p/6304371
- xiaodongliang/Navisworks-Net-Plugin-Property-Database-Example - GitHub, accessed June 16, 2025, https://github.com/xiaodongliang/Navisworks-Net-Plugin-Property-Database-Example
- 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
- Navisworks API selection null reference exception - Stack Overflow, accessed June 16, 2025, https://stackoverflow.com/questions/78147724/navisworks-api-selection-null-reference-exception
- Navisworks-2017-x64-API 1.0.0 - NuGet, accessed June 16, 2025, https://www.nuget.org/packages/Navisworks-2017-x64-API
- A* search algorithm - Wikipedia, accessed June 16, 2025, https://en.wikipedia.org/wiki/A*_search_algorithm
- Navisworks API - AEC DevBlog - TypePad, accessed June 16, 2025, https://adndevblog.typepad.com/aec/navisworks/page/4/
- 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
- Navisworks · ModelGeometry Class - ApiDocs.co, accessed June 16, 2025, https://apidocs.co/apps/navisworks/2018/T_Autodesk_Navisworks_Api_ModelGeometry.htm
- 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/
- 3DEXPERIENCE DELMIA Plant Layout – Detailed 3D Factory Design - Hawk Ridge Systems, accessed June 16, 2025, https://hawkridgesys.com/3dexperience-delmia-plant-layout
- Create your first installation package | Docs, accessed June 16, 2025, https://docs.firegiant.com/quick-start/
- Navisworks · DockPanePlugin Class - ApiDocs.co, accessed June 16, 2025, https://apidocs.co/apps/navisworks/2018/T_Autodesk_Navisworks_Api_Plugins_DockPanePlugin.htm
- Clash Detective - Navisworks - ApiDocs.co, accessed June 16, 2025, https://apidocs.co/apps/navisworks/2018/87317537-2911-4c08-b492-6496c82b3ee5.htm
- 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
- 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/
- Navisworks · ModelItem.BoundingBox Method - ApiDocs.co, accessed June 16, 2025, https://apidocs.co/apps/navisworks/2018/O_T_Autodesk_Navisworks_Api_ModelItem_BoundingBox.htm
- Grouping collisions with Autodesk Navisworks - BIMCommunity, accessed June 16, 2025, https://www.bimcommunity.com/bim-projects/grouping-collisions-with-autodesk-navisworks/
- 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
- Navisworks Best Practices & Advanced Techniques in 2025 - Novatr, accessed June 16, 2025, https://www.novatr.com/blog/navisworks-best-practices
- 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
- Navisworks - Animate Objects - Autodesk Help, accessed June 16, 2025, https://help.autodesk.com/view/NAV/2024/ENU/?guid=GUID-DD38DF54-B0A6-4B80-86D3-D7C70584CCE7
- 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
- Navisworks Tutorial Video 10: Animating Objects Part 1 - YouTube, accessed June 16, 2025, https://www.youtube.com/watch?v=OhGRZ26S9L4
- Navisworks Manage - Identifying Time-Based Clashes - YouTube, accessed June 16, 2025, https://www.youtube.com/watch?v=QfiFd-nFizQ
- Navisworks · ClashResultGroup Class - ApiDocs.co, accessed June 16, 2025, https://apidocs.co/apps/navisworks/2018/T_Autodesk_Navisworks_Api_Clash_ClashResultGroup.htm
- 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
- 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
- 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
- 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
- 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
- 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