# Navisworks NET API 示例指南 ## 示例代码位置总览 所有示例位于:`doc/navisworks_api/NET/examples/` ## 基础示例 (Basic Examples) ### 1. BasicDockPanePlugin **路径**: `Basic Examples/CSharp/BasicDockPanePlugin/` 最简单的停靠面板插件示例。 ```csharp [Plugin("BasicDockPanePlugin.BasicDockPanePlugin", "ADSK", DisplayName = "BasicDockPanePlugin", ToolTip = "Basic Docking Pane Plugin")] [DockPanePlugin(100, 300)] public class BasicDockPanePlugin : DockPanePlugin { public override Control CreateControlPane() { HelloWorldControl control = new HelloWorldControl(); control.Dock = DockStyle.Fill; control.CreateControl(); return control; } public override void DestroyControlPane(Control pane) { pane.Dispose(); } } ``` ### 2. WPF DockPane **路径**: `Basic Examples/CSharp/WPF/WpfDockPane/` 使用 WPF 控件的停靠面板插件。 ```csharp public override Control CreateControlPane() { // 使用 ElementHost 托管 WPF 控件 ElementHost host = new ElementHost(); host.Child = new WPFHelloWorldControl(); host.Dock = DockStyle.Fill; host.CreateControl(); return host; } ``` ### 3. DatabaseDockPane **路径**: `Basic Examples/CSharp/WPF/DatabaseDockPane/` 展示如何在停靠面板中使用模型数据库。 ### 4. BasicPlugIn **路径**: `Basic Examples/CSharp/BasicPlugIn/` 最简单的 AddIn 插件示例。 ### 5. APICallsCOMPlugin **路径**: `Basic Examples/CSharp/APICallsCOMPlugin/` 展示如何在 NET API 插件中调用 COM API。 ### 6. CustomRibbon **路径**: `Basic Examples/CSharp/CustomRibbon/` 自定义 Ribbon 界面示例,使用 XAML 定义 Ribbon。 ## 插件示例 (PlugIns) ### 1. Examiner **路径**: `PlugIns/Examiner/` 全面的 LINQ 搜索和模型操作示例。 **关键功能**: - 使用 LINQ 查询模型项 - 属性搜索和过滤 - 颜色和透明度覆盖 - Required/Hidden 状态修改 - 导出结果到 NWD **核心代码片段**: ```csharp // LINQ 搜索示例 IEnumerable result = Application.ActiveDocument.Models.RootItemDescendantsAndSelf .Where(x => x.HasGeometry) .Where(x => !x.IsHidden) .Where(x => x.DisplayName.Contains(searchName)); // 颜色覆盖 ModelItemCollection items = new ModelItemCollection(); items.AddRange(result); Application.ActiveDocument.Models.OverridePermanentColor(items, color); ``` ### 2. SearchComparisonPlugIn **路径**: `PlugIns/SearchComparisonPlugIn/` 对比不同搜索方法的性能。 ### 3. InputAndRenderHandling **路径**: `PlugIns/InputAndRenderHandling/` ToolPlugin 和 RenderPlugin 的综合示例。 **关键功能**: - 鼠标输入处理 - 自定义渲染 - 3D 拾取 ```csharp [ToolPlugin("InputAndRenderHandling", "ADSK")] [RenderPlugin("InputAndRenderHandling", "ADSK")] public class InputAndRenderHandling : ToolPlugin { public override bool MouseDown(MouseButton button, int x, int y) { // 处理鼠标点击 return true; } public override void Render(View view, RenderContext context) { // 自定义渲染 } } ``` ### 4. ClashDetective 示例集合 **路径**: `PlugIns/ClashDetective/` 包含多个碰撞检测相关示例: | 示例 | 说明 | |------|------| | `ClashGrouper/` | 碰撞结果分组 | | `ClashMarkers/` | 碰撞标记显示 | | `EventLog/` | 事件日志监听 | | `GenerateMatrix/` | 生成碰撞矩阵 | | `SimpleUI/` | 简单 UI 界面 | **碰撞测试基础代码**: ```csharp // 创建碰撞测试 ClashTest clashTest = new ClashTest(); clashTest.Name = "Test Name"; clashTest.TestType = ClashTestType.Hard; // 设置选择 clashTest.SelectionA = new ClashSelection(itemsA, document); clashTest.SelectionB = new ClashSelection(itemsB, document); // 添加到文档 document.ClashTestsData.Tests.Add(clashTest); ``` ### 5. Timeliner 示例 **路径**: `PlugIns/Timeliner/` TimeLiner 集成示例,展示 4D 模拟功能。 ```csharp // 获取 Timeliner 数据 var timeliner = document.Timeliner; // 创建任务 TimelinerTask task = new TimelinerTask(); task.Name = "Construction Task"; task.StartDate = DateTime.Now; task.EndDate = DateTime.Now.AddDays(7); task.SimulationStatus = SimulationStatus.Active; // 关联模型 task.Selection.CopyFrom(modelItems); // 添加任务 timeliner.Tasks.Add(task); ``` ### 6. Takeoff 示例 **路径**: `PlugIns/Takeoff/` 工程量计算 (Quantification) 示例。 ## 自动化示例 (Automation) ### 1. CallExaminer **路径**: `Automation/CallExaminer/` 展示如何通过自动化接口调用 Examiner 插件。 ```csharp // 启动 Navisworks 自动化 NavisworksApplication app = new NavisworksApplication(); app.OpenFile(filePath); // 执行插件 app.ExecutePlugin("Examiner.Examiner", parameters); ``` ### 2. MessageClientServer **路径**: `Automation/MessageClientServer/` 展示插件间通信机制。 ### 3. MessageSenderReceiver **路径**: `Automation/MessageSenderReceiver/` 消息发送和接收示例。 ## 控件示例 (Controls) ### 1. Viewers **路径**: `Controls/Viewers/` 独立的 Navisworks 查看器控件示例。 | 示例 | 说明 | |------|------| | `SDIViewer/` | 单文档界面查看器 | | `MDIViewer/` | 多文档界面查看器 | ```csharp // 使用 DocumentControl DocumentControl docControl = new DocumentControl(); docControl.Dock = DockStyle.Fill; this.Controls.Add(docControl); // 打开文件 docControl.Document.OpenFile(filePath); ``` ### 2. PublishFile **路径**: `Controls/PublishFile/` 文件发布选项示例。 ## 工具示例 (Tools) ### 1. AppInfo **路径**: `Tools/AppInfo/` 展示应用程序信息和事件监听。 ### 2. CodeRun **路径**: `Tools/CodeRun/` 动态代码执行工具,支持 C# 和 IronPython。 ## 按功能查找示例 | 功能需求 | 推荐示例 | |----------|----------| | 创建停靠面板 | `BasicDockPanePlugin/`, `WpfDockPane/` | | 使用 WPF | `WpfDockPane/`, `DatabaseDockPane/` | | 模型搜索 | `Examiner/`, `SearchComparisonPlugIn/` | | 鼠标交互 | `InputAndRenderHandling/` | | 自定义渲染 | `InputAndRenderHandling/` | | 碰撞检测 | `ClashDetective/` 下的各个示例 | | TimeLiner | `Timeliner/` | | 独立查看器 | `Controls/Viewers/` | | 插件通信 | `MessageClientServer/` | ## 项目文件参考 每个示例包含的项目文件: - `.csproj` - C# 项目文件 - `Properties/AssemblyInfo.cs` - 程序集信息 - 源代码文件 (.cs) ## 构建和部署 1. 打开 `doc/navisworks_api/NET/examples/Examples.sln` 2. 选择项目并构建 3. 插件输出到 Navisworks 插件目录: ``` C:\ProgramData\Autodesk\Navisworks Manage 2026\plugins\ ```