這幾天玩了一下Navisworks API,給大家分享分享。
官方幫助文檔
首先是官方的幫助文檔,有什麼問題可以直接查閱它。不過它不是隨着Navisworks安裝的,而是在SDK裏面,需要另外下載,下載地址:
http://usa.autodesk.com/adsk/servlet/index?id=15024694&siteID=123112
找到Navisworks 2015 SDK下載該exe文件,點擊安裝,默認安裝地址是C:\Program Files\Autodesk\Navisworks Manage 2015\api
安裝完成之後,可以看到裏面有幾個文件夾,分別是COM, NET和nwcreate,代表的是COM API, .NET API和模型創建相關的API。
這些文件夾的子文件夾裏有幫助文檔,二進制文件,和例子(samples)源代碼。
我們知道NavisworksAPI分爲三種,分別是:Plugin(插件),Control(控件)和自動化(Automation)。
- 插件形式是把我們的程序集成到Navisworks裏,大多表現爲一個Navisworks的自定義菜單
- 控件形式是把Navisworks集成到我們的程序裏
- 自動化是指運行一個沒有界面Navisworks,形式也算是吧Navisworks集成到我們的程序裏
下面我們來看怎麼創建一個Plugin,也就是插件。
創建Hello World插件
- 創建一個Class Library工程
- 添加Autodesk.Navisworks.Api.dll作爲引用,它位於Naviswork安裝目錄下,例如C:\Program Files\Autodesk\Navisworks Manage 2015
- 選中該引用,設置它的Copy Local屬性爲false,這樣它就不會被拷貝到編譯結果目錄裏面。
- 創建一個類,繼承自Autodesk.Navisworks.Api.Plugins.AddInPlugin
- 給這個類添加一個PlugInAttribute,比如:[PluginAttribute("Name", "DeveloperId", ToolTip = "Tooltip", DisplayName = "DisplayName")]
- 實現Execute函數:public override int Execute(params string[] parameters),例如
注意:這裏調用了MessageBox的函數,所以我們需要添加System.Windows.Forms的引用[PluginAttribute("Basic", "ADSK", ToolTip = "Popups", DisplayName = "Hello Navisworks")] [AddInPluginAttribute(AddInLocation.AddIn)] public class Class1 : AddInPlugin { public override int Execute(params string[] parameters) { System.Windows.Forms.MessageBox.Show("Hello Navisworks!"); return 0; } }
另外,- AddInPluginAttribute用來指明插件菜單所在的位置,這裏指定的是AddInLocation.AddIn,所以該插件的按鈕會出現在”工具附加模塊“菜單下。如果沒有這個Attribute,默認也是AddInLocation.Addin
- PluginAttribute的第一個參數"Basic"是插件的名稱,"ADSK"是開發商名稱,ToolTip是鼠標放在菜單上彈出的提示信息,DisplayName是插件菜單上的文字
- 編譯
- 打開Plugins文件夾,一般在這裏C:\Program Files\Autodesk\Navisworks Manage 2015\Plugins,創建一個和生成的dll同名的文件夾,如我的dll名字叫NavisworksBasic.dll,那麼就創建一個名爲NavisworksBasic的文件夾,更多關於插件位置的說明,可以參考後面一節"插件的存放位置"。
- 把生成的dll拷貝到該文件夾
- 啓動Navisworks
- 就會看到在工具附加模塊菜單下面出現了一個新的菜單
插件工程模板
最後,奉送一個簡單的Visual Studio工程模板,可以方便用來創建一個Plugin,點Navisworks2015Plugin.zip下載,下載之後放在目錄%userprofile%\My Documents\Visual Studio 2012\Templates\ProjectTemplates下。
插件的存放位置
- 前面講過,插件可以放在Navisworks安裝目錄的子目錄Plugins下面的同名目錄裏面,如果該插件又引用了其他的dll,其他dll需要放在Navisworks目錄下的Dependencies子目錄,否則就會出現無法加載引用dll而導致Navisworks崩潰。
- 另外的一個位置是%APPDATA%\Autodesk Navisworks Manage 2014\Plugins,該目錄是從Navisworks 2014開始支持的。如果這個目錄的的插件又引用了其他dll,其他dll可以直接放在該目錄下,也就是支持相對路徑。詳細見這裏。
- 第三種方式是使用Autodesk多數產品插件的統一方式,叫做Bundle,是Naviswork 2015纔開始支持的,更多詳細看這裏。對應的目錄有兩個地方可供選擇:
- %APPDATA%\Autodesk\ApplicationPlugins - 針對單個用戶
- %PROGRAMDATA%\Autodesk\ApplicationPlugins - 針對所有用戶
- 在這兩個目錄下面建立一個文件夾,推薦叫做<CompanyId>.<MyPluginId>.bundle,比如這裏我可以叫做ADSK.NavisworksBasic.bundle
- 在該文件夾下面準備一個PackageContents.xml文件
- PackageContents.xml文件內容如下:
說明:<?xml version="1.0" encoding="utf-8"?> <ApplicationPackage> <Components> <RuntimeRequirements OS="Win64" Platform="NAVMAN|NAVAIM" Series="Nw13" SeriesMax="Nw13"/> <ComponentEntry AppType="ManagedPlugin" ModuleName="Contents\v13\ADSK.MyPlugin.dll"/> </Components> </ApplicationPackage>
- OS="Win64": 只支持64的產品
- Platform="NAVMAN|NAVSIM" :同時支持Navisworks Manage和Navisworks Simulate.
- SeriesMin="Nw13" SeriesMax="Nw13" : 該插件支持所有的v13的版本.
- AppType="ManagedPlugin" : 該插件基於.net的API。
- ModuleName="Contents\v13\ADSK.NavisworksBasic.dll" : 指明dll的相對路徑,在Contents目錄下的v13目錄裏面。
- 最後根據PackageContents.xml的內容,創建對應的子目錄,並把dll拷貝到該目錄下,例如本例中,在ADSK.NavisworksBasic.bundle下面創建子目錄Contents,Contents下創建子目錄v13,然後把所有dll拷貝到v13下。
- %APPDATA%\Autodesk\ApplicationPlugins - 針對單個用戶