NavisWorks Api 简单使用与Gantt
相信很多朋友在做BIM项目的时候.都有客户会提出项目计划,形象进度 等需求。
那么当前最主要的问题就是计划与BIM模型的关联问题.那么我在项目中是用户用Project软件编辑计划然后手动跟三维模型关联。如果同行有更好的解决办法请告诉我,非常感谢
1界面布局

2 代码部分
//当前选中的模型的名称
private string _currentSelectionName = string.Empty;
//当前选中的模型的GUID
private string _currentSelectionGuid = string.Empty;
//当前选中的Item
private GanttItem _currentGanttItem = null;、
/// <summary>
/// 选中计划 聚焦到对应的模型
/// </summary>
private void SetCurrentModel()
{
if (Autodesk.Navisworks.Api.Application.ActiveDocument != null)
{
if (_currentGanttItem != null)
{
object modelid = _currentGanttItem.GetProperty("ModelId");
object modelName = _currentGanttItem.GetProperty("ModelName"); if (modelid != null)
{
if (!string.IsNullOrEmpty(modelid.ToString()))
{
Guid guid = Guid.Parse(modelid.ToString());
List<Autodesk.Navisworks.Api.ModelItem> seletedObjs = Autodesk.Navisworks.Api.Application.ActiveDocument.Models.RootItemDescendantsAndSelf.WhereInstanceGuid(guid).ToList();
if (seletedObjs.Any())
{
Document oDoc = Autodesk.Navisworks.Api.Application.ActiveDocument;
oDoc.CurrentSelection.CopyFrom(seletedObjs);
oDoc.ActiveView.FocusOnCurrentSelection();
} } }
} }
}
/// <summary>
/// 将当前选中的模型 附件到计划 与计划匹配
/// </summary>
void MT_AddCurrentModel_Click(object sender, EventArgs e)
{
//验证模型
if (Autodesk.Navisworks.Api.Application.ActiveDocument != null &&
!Autodesk.Navisworks.Api.Application.ActiveDocument.IsClear)
{
Autodesk.Navisworks.Api.Document doc = Autodesk.Navisworks.Api.Application.ActiveDocument;
if (doc != null)
{ if (doc.CurrentSelection.SelectedItems.Any())
{
//获取当前选中的模型信息
var selectItem = doc.CurrentSelection.SelectedItems[];
if (selectItem != null)
{
_currentSelectionGuid = selectItem.InstanceGuid.ToString();
_currentSelectionName = selectItem.DisplayName; }
//获取当前选中的Task
if (_currentGanttItem != null)
{
var exist = _taskList.Where(o => o.ModelId == _currentSelectionGuid);
if (exist.Any())
{
XtraMessageBox.Show("尊敬的用户您好!当前模型已经在计划中添加了!谢谢", "系统提示");
}
else
{
var modify = _taskList.FirstOrDefault(o => o.ProjectName == _currentGanttItem.Text);
if (modify != null)
{
modify.ModelName = _currentSelectionName;
modify.ModelItem = selectItem;
modify.ModelId = _currentSelectionGuid;
BindData();
}
}
}
}
else
{
XtraMessageBox.Show("尊敬的用户您好!当前没有选中模型!请先选中模型!", "系统提示");
} }
}
}
Gantt 属性存储是以XML的形式存储
[Serializable]
[XmlRoot("Properties")]
public class SerializableDictionary<TKey, TValue> : Dictionary<TKey, TValue>, IXmlSerializable, ISerializable
{
public SerializableDictionary()
{
} [EditorBrowsable(EditorBrowsableState.Advanced)]
public SerializableDictionary(SerializationInfo info, StreamingContext context)
: base(info, context)
{
} [EditorBrowsable(EditorBrowsableState.Advanced)]
[SecurityPermission(SecurityAction.LinkDemand, Flags = SecurityPermissionFlag.SerializationFormatter)]
public override void GetObjectData(SerializationInfo info, StreamingContext context)
{
base.GetObjectData(info, context);
} public XmlSchema GetSchema()
{
return null;
} public void ReadXml(XmlReader reader)
{
XmlSerializer xmlSerializer = typeof(TKey).CreateDefaultXmlSerializer();
XmlSerializer xmlSerializer2 = typeof(TValue).CreateDefaultXmlSerializer();
bool isEmptyElement = reader.IsEmptyElement;
reader.Read();
if (!isEmptyElement)
{
while (reader.NodeType != XmlNodeType.EndElement)
{
reader.ReadStartElement("item");
reader.ReadStartElement("key");
TKey key = (TKey)xmlSerializer.Deserialize(reader);
reader.ReadEndElement();
reader.ReadStartElement("value");
TValue value = (TValue)xmlSerializer2.Deserialize(reader);
reader.ReadEndElement();
base.Add(key, value);
reader.ReadEndElement();
reader.MoveToContent();
}
reader.ReadEndElement();
}
} public void WriteXml(XmlWriter writer)
{
XmlSerializer xmlSerializer = typeof(TKey).CreateDefaultXmlSerializer();
XmlSerializer xmlSerializer2 = typeof(TValue).CreateDefaultXmlSerializer();
foreach (TKey key in base.Keys)
{
writer.WriteStartElement("item");
writer.WriteStartElement("key");
xmlSerializer.Serialize(writer, key);
writer.WriteEndElement();
writer.WriteStartElement("value");
TValue val = base[key];
xmlSerializer2.Serialize(writer, val);
writer.WriteEndElement();
writer.WriteEndElement();
}
}
}
SerializableDictionary 类
public static T FromXmlString<T>(string xml)
{
if (string.IsNullOrEmpty(xml))
{
return default(T);
}
using (MemoryStream stream = new MemoryStream(Encoding.UTF8.GetBytes(xml)))
{
return XmlObjectHelpers.FromXmlStream<T>(stream);
}
}
FromXmlString
public static T DeserializeFromXml<T>(this string xml)
{
return XmlObjectHelpers.FromXmlString<T>(xml);
}
我用的是NavisWorks SDK 2015. 当然每个版本都不一样。如果有错误的地方请网友指出!
NavisWorks Api 简单使用与Gantt的更多相关文章
- Navisworks API 简单二次开发 (自定义工具条)
在Navisworks软件运行的时候界面右侧有个工具条.比较方便.但是在二次开发的时候我不知道在Api那里调用.如果有网友知道请告诉我.谢谢. 我用就自己设置一个工具.界面比较丑!没有美工. 代码: ...
- Navisworks 2014 Api 简单的使用
初次接触Navisworks Api .NET 的二次开发.主要是研究了一下.关于NavisWorks 结构树的加载. void LoadModel() { //清空当前的结构树信息 treeVie ...
- Navisworks Api Quantification
Quantification 国外有的叫定量 我们国内一些施工方叫工程量. 通过TakeOff API的开发者有机会获得更多的数据和数据可通过图形用户界面. 1 添加Navisworks的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 ...
- 百度地图API简单应用
在做移动端应用时经常用到百度地图API,百度API有强大的示例和文档,开发之前去百度相关网站注册密钥,很块博主只花了几分钟 百度地图API范例 百度地图API文档说明 例子1:输入特定关键字绘制地图标 ...
- 百度地图api简单使用方法
百度地图API的使用方法 百度地图API 开始学习百度地图API最简单的方式是看一个简单的示例.以下代码创建了一个520x340大小的地图区域并以天安门作为地图的中心: 1. <html&g ...
随机推荐
- 代码的坏味道(15)——冗余类(Lazy Class)
坏味道--冗余类(Lazy Class) 特征 理解和维护类总是费时费力的.如果一个类不值得你花费精力,它就应该被删除. 问题原因 也许一个类的初始设计是一个功能完全的类,然而随着代码的变迁,变得没什 ...
- 「译」JUnit 5 系列:条件测试
原文地址:http://blog.codefx.org/libraries/junit-5-conditions/ 原文日期:08, May, 2016 译文首发:Linesh 的博客:「译」JUni ...
- RSA算法
RSA.h #ifndef _RSA_H #define _RSA_H #include<stdio.h> #include<iostream> #include<mat ...
- WEB安全隐患
org.apache.commons.lang.StringEscapeUtils 进行输入框内容处理 [StringEscapeUtils.escapeSql(str);StringEscapeUt ...
- 微信开发笔记(accesstoken)
access_token分两种 一种是公众号权限获取用,调用cgi-bin接口 ,此种token一个公众号同时只有一个,用这一个就够了. 服务器最好缓存. 用这个token前提是用户关注了此公众号. ...
- Form 表单提交参数
今天因为要额外提交参数数组性的参数给form传到后台而苦恼了半天,结果发现,只需要在form表单对应的字段html空间中定义name = 后台参数名 的属性就ok了. 后台本来是只有模型参数的,但是后 ...
- 基于Node.js实现一个小小的爬虫
以前一直听说有爬虫这种东西,稍微看了看资料,貌似不是太复杂. 正好了解过node.js,那就基于它来个简单的爬虫. 1.本次爬虫目标: 从拉钩招聘网站中找出“前端开发”这一类岗位的信息,并作相应页面分 ...
- JavaScript知识结构图
画的一个知识结构图,方便理解.
- 淘宝UWP中的100个为什么
从淘宝UWP第一版发布到现在,已经有十个月了,期间收到了用户各种各样的反馈,感谢这些用户的反馈,指导我们不断的修正.完善应用.但是也有一部分需求或建议,由于资源或技术的限制,目前确实无法做到,只能对广 ...
- Fedora 22中的DNF软件包管理工具
Introduction DNF is the The Fedora Project package manager that is able to query for information abo ...