NavisworksTransport/.agents/skills/nw-api/references/net-examples-guide.md

6.6 KiB

Navisworks NET API 示例指南

示例代码位置总览

所有示例位于:doc/navisworks_api/NET/examples/

基础示例 (Basic Examples)

1. BasicDockPanePlugin

路径: Basic Examples/CSharp/BasicDockPanePlugin/

最简单的停靠面板插件示例。

[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 控件的停靠面板插件。

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

核心代码片段:

// LINQ 搜索示例
IEnumerable<ModelItem> 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 拾取
[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 界面

碰撞测试基础代码:

// 创建碰撞测试
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 模拟功能。

// 获取 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 插件。

// 启动 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/ 多文档界面查看器
// 使用 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\