Navisworks 2014 Api 简单的使用
初次接触Navisworks Api .NET 的二次开发.主要是研究了一下。关于NavisWorks 结构树的加载.
void LoadModel()
{
//清空当前的结构树信息
treeView1.Nodes.Clear();
//当前加载的模型
Document doc = Autodesk.Navisworks.Api.Application.ActiveDocument; //循环现有模型
foreach (var documentModel in doc.Models)
{ var modelItemList = documentModel.RootItem.Descendants;
Model model = documentModel;
var modelItems = modelItemList.Where(o => o.Parent == model.RootItem); if (modelItems.Any())
{
TreeNode cNode;
foreach (var quItem in modelItems)
{
cNode = new TreeNode(quItem.DisplayName);
cNode.Tag = quItem;
// cNode.Text = quItem.DisplayName;//判断名称
treeView1.Nodes.Add(cNode);
if (quItem.Children.Any())
{
LoadChild(quItem.Children, quItem, cNode);
} }
} } } /// <summary>
/// 递归判断结构树信息
/// </summary>
/// <param name="modelItemEnumerableCollection">数据源信息</param>
/// <param name="parentItem">父级节点信息</param>
/// <param name="pNode">子节点信息</param>
private void LoadChild(IEnumerable<ModelItem> modelItemEnumerableCollection, ModelItem parentItem, TreeNode pNode)
{
var query = modelItemEnumerableCollection.Where(o => o.Parent == parentItem);
if (query.Count()>)
{
foreach (var quItem in query)
{
TreeNode chNode = new TreeNode(quItem.DisplayName);
chNode.Tag = quItem;
pNode.Nodes.Add(chNode);
if (quItem.Children.Any())
{
LoadChild(quItem.Children, quItem, chNode);
} }
}
}
TreeView Node 选中事件
void treeView1_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e)
{
TreeNode node = e.Node;
if (node != null)
{
ModelItem oCurrentNode = (ModelItem)node.Tag;
propertyGrid1.SelectedObject = oCurrentNode;
if (oCurrentNode != null)
{ //设置选择集合
ModelItemCollection oMC = new ModelItemCollection();
oMC.Add(oCurrentNode);
Document oDoc = view.ViewControl.DocumentControl.Document;
//设置选中
oDoc.CurrentSelection.CopyFrom(oMC);
}
}
}
模型加载窗口:
public partial class FrmModelView : DevExpress.XtraEditors.XtraForm
{
public ViewControl ViewControl;
public FrmModelView()
{
InitializeComponent();
if (this.components == null)
this.components = new Container();
//初始化Document控件
DocumentControl document = new DocumentControl(this.components);
document.Document.SetGraduatedBackground(Autodesk.Navisworks.Api.Color.FromByteRGB(,,),Autodesk.Navisworks.Api.Color.FromByteRGB(,,));
//初始化View控件 并添加Document控件
ViewControl = new ViewControl();
ViewControl.DocumentControl = document;
ViewControl.BackColor = System.Drawing.Color.LightSteelBlue;
ViewControl.Dock = DockStyle.Fill;
ViewControl.Name = "viewControl";
this.Controls.Add(ViewControl);
}
}
模型选择事件:
#region 模型选择事件
private void CurrentSelection_Changed(object sender, EventArgs e)
{
try
{
Document doc = (Document)sender;
if (doc != null)
{
var item = doc.CurrentSelection.SelectedItems[];
if (item != null)
{
TreeNode tnRet = null;
foreach (TreeNode tn in treeView1.Nodes)
{
tnRet = FindNode(tn, item.DisplayName);
if (tnRet != null)
break;
}
if (tnRet != null)
{
if (oldNode != null)
oldNode.BackColor = Color.White;
tnRet.BackColor = Color.YellowGreen;
treeView1.SelectedNode = tnRet;
oldNode = tnRet;
GetProperty();
}
}
}
}
catch (Exception exception)
{
Console.WriteLine(exception);
}
}
#endregion
模型的属性加载:
#region 属性信息加载
void GetProperty()
{
//验证模型
if (Autodesk.Navisworks.Api.Application.ActiveDocument != null &&
!Autodesk.Navisworks.Api.Application.ActiveDocument.IsClear)
{
this.vGridControl1.Rows.Clear();
// 获取选中的相关的模型信息
foreach (ModelItem item in Autodesk.Navisworks.Api.Application.ActiveDocument.CurrentSelection.SelectedItems)
{
//获取想的模型属性信息
foreach (PropertyCategory category in item.PropertyCategories)
{
CategoryRow categoryRow=new CategoryRow(category.DisplayName);
foreach (var control in category.Properties)
{
EditorRow row1 = new EditorRow();
row1.Properties.FieldName = "Value";
row1.Properties.Caption = control.DisplayName;
var itemValue = control.Value;
string valueInfo;
switch (itemValue.DataType)
{
case VariantDataType.Boolean:
valueInfo = itemValue.ToBoolean().ToString();
break;
case VariantDataType.DateTime:
valueInfo = itemValue.ToDateTime().ToString(CultureInfo.InvariantCulture);
break;
case VariantDataType.DisplayString:
valueInfo = itemValue.ToDisplayString();
break;
case VariantDataType.Double:
valueInfo = itemValue.ToDouble().ToString();
break;
case VariantDataType.DoubleAngle:
valueInfo = itemValue.ToDoubleAngle().ToString();
break;
case VariantDataType.DoubleArea:
valueInfo = itemValue.ToDoubleArea().ToString();
break;
case VariantDataType.DoubleLength:
valueInfo = itemValue.ToDoubleLength().ToString();
break;
case VariantDataType.DoubleVolume:
valueInfo = itemValue.ToDoubleVolume().ToString();
break;
case VariantDataType.IdentifierString:
valueInfo = itemValue.ToIdentifierString();
break;
case VariantDataType.Int32:
valueInfo = itemValue.ToInt32().ToString();
break;
default:
valueInfo = itemValue.ToString();
break;
}
row1.Properties.Value = valueInfo;
categoryRow.ChildRows.Add(row1);
}
this.vGridControl1.Rows.Add(categoryRow);
}
}
}
}
#endregion
最终效果:

主要是刚接触这个.不懂 只是自己在这写的。如果那位网友有更好的解决方案。请告诉我.谢谢哈。
源代码 下载。
Navisworks 2014 Api 简单的使用的更多相关文章
- Libvlc API 简单说明 [转]
Libvlc API 简单说明 原文来自http://www.xuebuyuan.com/1519616.html libvlc_instance_t* libvlc_new(int argc, co ...
- salesforce零基础学习(八十五)streaming api 简单使用(接近实时获取你需要跟踪的数据的更新消息状态)
Streaming API参考链接: https://trailhead.salesforce.com/en/modules/api_basics/units/api_basics_streaming ...
- 基于C语言libvirt API简单小程序
libvirt API简单小程序 1.程序代码如下 #include<stdio.h> #include<libvirt/libvirt.h> int getDomainInf ...
- 常用函数式接口与Stream API简单讲解
常用函数式接口与Stream API简单讲解 Stream简直不要太好使啊!!! 常用函数式接口 Supplier<T>,主要方法:T get(),这是一个生产者,可以提供一个T对象. C ...
- Navisworks API 简单二次开发 (自定义工具条)
在Navisworks软件运行的时候界面右侧有个工具条.比较方便.但是在二次开发的时候我不知道在Api那里调用.如果有网友知道请告诉我.谢谢. 我用就自己设置一个工具.界面比较丑!没有美工. 代码: ...
- NavisWorks Api 简单使用与Gantt
相信很多朋友在做BIM项目的时候.都有客户会提出项目计划,形象进度 等需求. 那么当前最主要的问题就是计划与BIM模型的关联问题.那么我在项目中是用户用Project软件编辑计划然后手动跟三维模型关联 ...
- 百度地图API简单应用
在做移动端应用时经常用到百度地图API,百度API有强大的示例和文档,开发之前去百度相关网站注册密钥,很块博主只花了几分钟 百度地图API范例 百度地图API文档说明 例子1:输入特定关键字绘制地图标 ...
- 百度地图api简单使用方法
百度地图API的使用方法 百度地图API 开始学习百度地图API最简单的方式是看一个简单的示例.以下代码创建了一个520x340大小的地图区域并以天安门作为地图的中心: 1. <html&g ...
- Web API 简单示例
一.RESTful和Web API Representational State Transfer (REST) is a software architecture style consisting ...
随机推荐
- Hawk 4.6 并行化
并行化 Hawk支持单机并行化,也就是使用多线程获取数据.它可以控制目前所有任务的数量,为了不给网站造成过大的压力,仅当任务池中的任务数量小于一定值后,才会插入新的任务. 你可以在数据清洗的 执行面板 ...
- Velocity初探小结--Velocity在spring中的配置和使用
最近正在做的项目前端使用了Velocity进行View层的数据渲染,之前没有接触过,草草过了一遍,就上手开始写,现在又回头细致的看了一遍,做个笔记. velocity是一种基于java的模板引擎技术, ...
- ThinkPHP+Smarty模板中截取包含中英文混合的字符串乱码的解决方案
好几天没写博客了,其实有好多需要总结的,因为最近一直在忙着做项目,但是困惑了几天的Smarty模板中截取包含中英文混合的字符串乱码的问题,终于解决了,所以记录下来,需要的朋友看一下: 出现乱码的原因: ...
- python 数据类型 -- 元组
元组其实是一种只读列表, 不能增,改, 只可以查询 对于不可变的信息将使用元组:例如数据连接配置 元组的两个方法: index, count >>> r = (1,1,2,3) &g ...
- Visual Studio 2013 添加一般应用程序(.ashx)文件到SharePoint项目
默认,在用vs2013开发SharePoint项目时,vs没有提供一般应用程序(.ashx)的项目模板,本文解决此问题. 以管理员身份启动vs2013,创建一个"SharePoint 201 ...
- Intelli IDEA 设置项目编码(Mac)
Intelli IDEA->Editor->File Encodings
- Linux自动共享USB设备:udev+Samba
一.概述 公司最近要我实现USB设备插入Ubuntu后,自动共享到网络上,能像Windows共享一样(如\\192.168.1.10)访问里面的内容,不需要写入权限.当时听完这需求,我这新人表示惊呆了 ...
- 什么是英特尔® Edison 模块?
英特尔® Edison 模块 是一种 SD 卡大小的微型计算芯片,专为构建物联网 (IoT) 和可穿戴计算产品而设计. Edison 模块内含一个高速的双核处理单元.集成 Wi-Fi*.蓝牙* 低能耗 ...
- .NET面试题系列[1] - .NET框架基础知识(1)
很明显,CLS是CTS的一个子集,而且是最小的子集. - 张子阳 .NET框架基础知识(1) 参考资料: http://www.tracefact.net/CLR-and-Framework/DotN ...
- Demo源码放送:打通B/S与C/S !让HTML5 WebSocket与.NET Socket公用同一个服务端!
随着HTML5 WebSocket技术的日益成熟与普及,我们可以借助WebSocket来更加方便地打通BS与CS -- 因为B/S中的WebSocket可以直接连接到C/S的服务端,并进行双向通信.如 ...