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 ...
随机推荐
- Android 剪贴板详解
版权声明:本文为博主原创文章,未经博主允许不得转载. 微博:厉圣杰 源码:AndroidDemo/Clipboard 如本文有助于你理解 Android 剪贴板,不妨给我一个 Star.对于码农而言, ...
- 一个IT人的成长路
毕业四年多了,来深圳三年多了,经历了刚毕业的懵懂少年,成长为现在的成熟稳重青年.职场上,从刚毕业的小白,成长为现在可以成熟应对各种事情的老司机.经历过从初级研发工程师,到中级研发工程师,到高级研发工程 ...
- UVa 122 Trees on the level
题目的意思: 输入很多个节点,包括路径和数值,但是不一定这些全部可以构成一棵树,问题就是判断所给的能否构成一棵树,且没有多余. 网上其他大神已经给出了题目意思:比如我一直很喜欢的小白菜又菜的博客 说一 ...
- MementoPattern(备忘录模式)
/** * 备忘录模式 * @author TMAC-J * 用于存储bean的状态 */ public class MementoPattern { public class Memento{ pr ...
- BPM配置故事之案例5-必填与水印文本
物资申请表改好了,但是没过两天老李又找来了. 老李:这个表格每次都是各个部门发给我们,再由我们采购部来填,太影响效率了,以后要让他们自己填. 小明:那就让他们填呗,他们有权限啊. 老李:可是他们说不会 ...
- Git学习笔记一:新建本地仓库及初始化
1.百度搜索Git下载安装,直接按默认选项安装即可. 例如:Git-2.7.2-32-bit_setup.1457942412.exe 2.配置Git信息,建立版本仓库 (Alt+PrintScerr ...
- MyEclipse对Maven的安装
好记性不如烂笔头,记录一下. 操作系统:windows 7 MyEclipse2015 JDK1.7 maven的下载链接,点这里下载apache-maven-3.0.4-bin.tar.gz. 下载 ...
- 如何在Open Live Writer(OLW)中使用precode代码高亮Syntax Highlighter
早先Microsotf的Windows Live Writer(WLW)现在已经开源了,并且更名为Open Live Writer,但是现在Windows Live Writer还是可以现在,Open ...
- 在ASP.NET MVC 4 on Mono中使用OracleClient in CentOS 6.x的问题记录
在ASP.NET MVC 4 on Mono中使用OracleClient in CentOS 6.x的问题记录 前言 最近有个Web项目,业务功能不复杂,但是这个客户(某政府部门)有两个硬性要求:1 ...
- 详解微信开发者文档——5 access_token管理
写在前面的话:前几篇博客详细讲解了如何获取用户发送的消息并进行回复,这里的回复是一种被动的回复,而被动回复的方式便是通过echo返回信息给微信服务器的POST请求,因此,其实我们并没有算的上调用了微信 ...