NW开发入门

quickstart

NW的二次开发,最常见开发形式是以动态库嵌入到NW主进程中的。这一点和许多专业软件的.NET开发套路基本相同,这样的开发模式弊端很明显:

  • 调试很麻烦,一旦代码变化,动态库需要重新编译,然后主进程需要重新启动。对于那些重启很慢的软件,调试的过程是很奔溃的。
  • 插件一旦出现异常,会直接把主程序的进程给搞死,经常出现系统奔溃。这个用户体验极度糟糕。

NW Freedom 是不支持API的,无法在该版本下部署插件

主要开发方式

API 用途
AutoDesk.NavisWorks.Api 最主要的API,一般在NW中用法到的绝大部分类都封装在这个API中
AutoDesk.NavisWorks.AutoMation 使用该API,可以不启动NW,而实现在NW里面的操作,常用于一些自动化的任务
AutoDesk.NavisWorks.Control 该API主要用于创建独立于NW外的应用程序,作为一个外部控件,更好的融入其他软件系统,甚至浏览器。
AutoDesk.NavisWorks.ComApi Com组件开发,慢慢会被放弃

新建项目

此处以NW2017为例,主要讲解需要新建一个.net版本在4.5.2以上的类库项目。

引用动态库

  • Autodesk.Navisworks.Api.dll

该动态库在NW安装的根目录下面,如C:\Program Files\Autodesk\Navisworks Manage 2017

附加模块插件

// 引入命名空间
using Autodesk.Navisworks.Api.Plugins;

namespace NWDemo
{
	// 参数1、插件名称 / 参数2、插件的ID / 参数3、插件的tip / 参数4、插件显示的名字
    [PluginAttribute("NWPlugin_AddInTab","ADSK", ToolTip = "Plugin in AddIn Tab",DisplayName = "AddInTab")]
	// 插件的类必须继承自AddInPlugin
    public class AddinDemo : AddInPlugin
    {
    	//	重写 Execute方法
        public override int Execute(params string[] parameters)
        {
            MessageBox.Show("hello addin");
            return 0;
        }
    }
}

右键菜单插件

需要在类的签名增加如下代码:
[AddInPlugin(AddInLocation.CurrentSelectionContextMenu)]

窗口插件

// 定义插件初始化的大小
[DockPanePlugin(100, 300)]

// 类必须继承自DockPanePlugin
public class AddinDemo : DockPanePlugin
{
	// 重写插件创建函数
     public override Control CreateControlPane()
     {
         // 实例化用户控件
         MyUserControl control = new MyUserControl();
         control.Dock = DockStyle.Fill;
         control.Text = this.TryGetString("HelloWorldText");
         control.CreateControl();
         return control;
     }
	
	// 重写插件销毁函数
     public override void DestroyControlPane(Control pane)
     {
         pane.Dispose();
     }
 }

插件部署

  1. 项目编译后,生成dll文件。
  2. 在 NW的安装目录的Plugins目录下,如C:\Program Files\Autodesk\Navisworks Manage 2017\Plugins。新建一个以插件命名空间为名称的文件夹,如上面的NWDemo
  3. 然后将dll文件拷贝到上面的目录下。
  4. NW还提供了其他插件的管理办法,后续补充。

部署的坑

NW在部署插件的时候,有个巨大无比的坑。我们在开发的时候,一般会用到其他三方的DLL依赖。我最初的理解是,引用的DLL和自编译的DLL一起放到Plugins里面,但实际上是不行的。会导致以下两种异常:

  • 插件无法正常调出。就是该插件不会显示出来,无论是在【附加模块】还是【自定义插件】处,根本不显示。
  • 插件能显示,但一执行到引用的DLL处,NW直接致命错误,系统奔溃。

我在网上找遍了资料,才发现引用的DLL文件,需要放到安装目录的Dependencies文件夹下面,如:C:\Program Files\Autodesk\Navisworks Manage 2017\Dependencies。大牛说了,还有其他两个地方也可以,不过我觉得放在这里就挺好了,也没有记录其他的两个地方。

启动插件

附加模块

在NW的Ribbon菜单的最后会出现一个【扩展工具模块】的菜单,插件按钮全部在里面。

右键菜单插件

在模型区域,选择一个对象,右键会出现插件菜单。

窗口插件

查看 >> 窗口 >> 自定义插件

你可能感兴趣的:(NavisWorks)