网站开发进度设计与阶段目标,可以免费打开网站的软件,织梦宠物网站模板,手机上网站[ 本文原创发表于cnblogs ] NavisWorks API的内容大部分为二次开发#xff0c;在NavisWorks软件中增加所需要的功能。 而我所接到的工作任务是#xff0c;将.nwc等格式的文件通过窗口打开并且可交互。也就是说#xff0c;需要有一个程序去调用API#xff0c;从而打开NavisW…[ 本文原创发表于cnblogs ] NavisWorks API的内容大部分为二次开发在NavisWorks软件中增加所需要的功能。 而我所接到的工作任务是将.nwc等格式的文件通过窗口打开并且可交互。也就是说需要有一个程序去调用API从而打开NavisWorks文件。 在.NET API Reference Guide中其实已经有了比较完善的示例可以实现很多功能这里我将结合API文档以及一些其他我在网络上查找到的资料专门针对这一方面来进行说明一方面是给自己的工作内容留下记录另一方面希望有类似开发任务的朋友可以共同交流。 首先需要在程序中引入两个dllAutodesk.Navisworks.Api和Autodesk.Navisworks.Controls。这两个dll文件都可以在 ~\Autodesk\Navisworks Manage 2014 目录下找到。 Program.cs文件直接按照文档中的sample来写即可 1 using System;2 using System.Windows.Forms;3 using Autodesk.Navisworks.Api.Controls;4 5 namespace Viewer6 {7 static class Program8 {9 /// summary
10 /// The main entry point for the application.
11 /// /summary
12 [STAThread]
13 static void Main()
14 {
15 //Set to single document mode
16 Autodesk.Navisworks.Api.Controls.ApplicationControl.ApplicationType ApplicationType.SingleDocument;
17
18 //Initialise the api
19 Autodesk.Navisworks.Api.Controls.ApplicationControl.Initialize();
20
21 Application.EnableVisualStyles();
22 Application.SetCompatibleTextRenderingDefault(false);
23 Application.Run(new Viewer());
24
25 //Finish use of the API.
26 Autodesk.Navisworks.Api.Controls.ApplicationControl.Terminate();
27 }
28 }
29 } 在窗口设计中添加一个ViewControl控件这是用来实现文件显示的然后添加一个DocumentControl控件这是用来控制文件的。 把ViewControl控件的DocumentControl属性设置为刚刚添加的DocumentControl控件用来指定该ViewControl展示的是DocumentControl的内容。 添加菜单栏或者按键实现打开文件的功能。这里可以通过打开一个文件浏览窗口去选择文件也可以直接在后台指定需要打开的文件。我这次的任务是要求直接加载指定文件不允许用户自由选择打开的文件。因此我省略了打开文件浏览窗口的代码。使DocumentControl打开指定文件的代码如下 1 // 打开对话框dlg中选定的文件
2 documentControl.Document.TryOpenFile(dlg.FileName);
3
4 // OR
5 // 直接打开指定文件
6 documentControl.Document.TryOpenFile(res\\测试文件.nwc); 通过以上的操作就可以实现在一个窗口中打开指定的.nwc文件。 接下来补充说明如何与打开的文件进行交互。 首先别忘了在窗口设计器的程序中添加引用 using Autodesk.Navisworks.Api.Controls;
using Autodesk.Navisworks.Api; 在窗口中加入几个按键来实现对图像的平移等功能。如果喜欢追求视觉效果也可以使用ToolBar。 这里我实现了最基本的几项功能总体来讲都是通过类似的语句去调用方法。详细能够实现的方法可以参考API手册中的Tool Enumeration。 1 #region Navigate View2 // 旋转模型3 private void Orbit_Click(object sender, EventArgs e)4 {5 documentControl.Document.Tool.Value Autodesk.Navisworks.Api.Tool.NavigateFreeOrbit;6 }7 8 // 缩放模型9 private void Zoom_Click(object sender, EventArgs e)
10 {
11 documentControl.Document.Tool.Value Autodesk.Navisworks.Api.Tool.NavigateZoom;
12 }
13
14 // 平移模型
15 private void Pan_Click(object sender, EventArgs e)
16 {
17 documentControl.Document.Tool.Value Autodesk.Navisworks.Api.Tool.NavigatePan;
18 }
19
20 // 复位模型
21 private void reset_Click(object sender, EventArgs e)
22 {
23 //API中没有复位方法这里调用加载文件以实现复位
24 LoadDocument();
25 }
26
27 // 组件单选选取
28 private void SinSelect_Click(object sender, EventArgs e)
29 {
30 documentControl.Document.Tool.Value Autodesk.Navisworks.Api.Tool.Select;
31 }
32
33 // 组件选框选取
34 private void MulSelect_Click(object sender, EventArgs e)
35 {
36 documentControl.Document.Tool.Value Autodesk.Navisworks.Api.Tool.SelectBox;
37 }
38
39 #endregion 另外在本次的开发任务中还需要实现能够将镜头聚焦在指定组件上的功能。由于我之前没有使用过NavisWorks所以其实并不是很清楚是否已经存在这样的功能。最终我只能使用一个很笨的方法去实现但是这个方法是非常不完善的首先看下面的代码 1 private void Location_Click(object sender, EventArgs e)2 {3 //Create a new search4 Search s new Search();5 6 //set the selection to everything7 s.Selection.SelectAll();8 9 //Add a search condition
10 //修改组件名以实现选中不同组件的功能
11 s.SearchConditions.Add(SearchCondition.HasPropertyByName(PropertyCategoryNames.Item, DataPropertyNames.ItemName)
12 .EqualValue(VariantData.FromDisplayString(组件名)));
13
14 //get the resulting collection by applying this search
15 ModelItemCollection searchResults s.FindAll(Autodesk.Navisworks.Api.Application.ActiveDocument, false);
16
17 //清空当前所选
18 Autodesk.Navisworks.Api.Application.ActiveDocument.CurrentSelection.Clear();
19
20
21 //show the results
22 foreach (ModelItem mi in searchResults)
23 {
24 Autodesk.Navisworks.Api.Application.ActiveDocument.CurrentSelection.Add(mi);
25 }
26
27 //自动居中搜索结果
28 Autodesk.Navisworks.Api.Application.ActiveDocument.ActiveView.FocusOnCurrentSelection();
29 } 可以看出首先是对指定名称的组件进行了一次搜索。这里搜索的语句并非只有这一种方式其他搜索方法所规定的条件参数都不相同可以根据自己需要的搜索条件去调用不同的搜索方法。 搜索完结果以后将搜索结果选中最后调用居中方法使视角固定在搜索结果上。但是该方法有一个问题就是这个自动居中的方法并不能实现自动调整视角和缩放比例也就是说当对已选组件实行该方法后可能展示出来的视角非常难看而且大小也不合适。这一点如何进行优化还有待后期研究。转载于:https://www.cnblogs.com/brandon988/p/5141444.html