310 lines
6.6 KiB
Markdown
310 lines
6.6 KiB
Markdown
# 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<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 拾取
|
|
|
|
```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\
|
|
```
|