相信很多朋友在做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的更多相关文章

  1. Navisworks API 简单二次开发 (自定义工具条)

    在Navisworks软件运行的时候界面右侧有个工具条.比较方便.但是在二次开发的时候我不知道在Api那里调用.如果有网友知道请告诉我.谢谢. 我用就自己设置一个工具.界面比较丑!没有美工. 代码: ...

  2. Navisworks 2014 Api 简单的使用

    初次接触Navisworks Api  .NET 的二次开发.主要是研究了一下.关于NavisWorks 结构树的加载. void LoadModel() { //清空当前的结构树信息 treeVie ...

  3. Navisworks Api Quantification

    Quantification  国外有的叫定量  我们国内一些施工方叫工程量. 通过TakeOff API的开发者有机会获得更多的数据和数据可通过图形用户界面. 1 添加Navisworks的Api ...

  4. Libvlc API 简单说明 [转]

    Libvlc API 简单说明 原文来自http://www.xuebuyuan.com/1519616.html libvlc_instance_t* libvlc_new(int argc, co ...

  5. salesforce零基础学习(八十五)streaming api 简单使用(接近实时获取你需要跟踪的数据的更新消息状态)

    Streaming API参考链接: https://trailhead.salesforce.com/en/modules/api_basics/units/api_basics_streaming ...

  6. 基于C语言libvirt API简单小程序

    libvirt API简单小程序 1.程序代码如下 #include<stdio.h> #include<libvirt/libvirt.h> int getDomainInf ...

  7. 常用函数式接口与Stream API简单讲解

    常用函数式接口与Stream API简单讲解 Stream简直不要太好使啊!!! 常用函数式接口 Supplier<T>,主要方法:T get(),这是一个生产者,可以提供一个T对象. C ...

  8. 百度地图API简单应用

    在做移动端应用时经常用到百度地图API,百度API有强大的示例和文档,开发之前去百度相关网站注册密钥,很块博主只花了几分钟 百度地图API范例 百度地图API文档说明 例子1:输入特定关键字绘制地图标 ...

  9. 百度地图api简单使用方法

    百度地图API的使用方法   百度地图API 开始学习百度地图API最简单的方式是看一个简单的示例.以下代码创建了一个520x340大小的地图区域并以天安门作为地图的中心: 1. <html&g ...

随机推荐

  1. python 数据类型 -- 元组

    元组其实是一种只读列表, 不能增,改, 只可以查询 对于不可变的信息将使用元组:例如数据连接配置 元组的两个方法: index, count >>> r = (1,1,2,3) &g ...

  2. 程序员必须要知道的Hadoop的一些事实

    程序员必须要知道的Hadoop的一些事实.现如今,Apache Hadoop已经无人不知无人不晓.当年雅虎搜索工程师Doug Cutting开发出这个用以创建分布式计算机环境的开源软...... 1: ...

  3. 微信小程序开发—快速掌握组件及API的方法

    微信小程序框架为开发者提供了一系列的组件和API接口. 组件主要完成小程序的视图部分,例如文字.图片显示.API主要完成逻辑功能,例如网络请求.数据存储.音视频播放控制,以及微信开放的微信登录.微信支 ...

  4. Git(1)

    安装Git 完毕 (在开始菜单打开的话,打开的不是你想要的路径,切换路径很麻烦) 1.D盘新建 GitTest 文件夹 2.打开GitTest , 在空白的地方右键, 3.单击 Git Bash He ...

  5. mysql开启慢查询日志及查询--windows

    MySQL慢查询配置 1. 慢查询有什么用? 它能记录下所有执行超过long_query_time时间的SQL语句, 帮你找到执行慢的SQL, 方便我们对这些SQL进行优化. 2. 如何开启慢查询? ...

  6. windows下mongodb配置

    打开cmd(windows键+r输入cmd)命令行,进入D:\mongodb\bin目录(如图先输入d:进入d盘然后输入cd d:\mongodb\bin), 输入如下的命令启动mongodb服务: ...

  7. 2-1 Linux 操作系统及常用命令

    根据马哥linux初级视频 2-1.2-2来编辑 1. GUI与CLI GUI: Graphic User Interface CLI: Command Line Interface 注:在Windo ...

  8. Josephus环类问题,java实现

    写出一个双向的循环链表,弄一个计数器,我定义的是到三的时候,自动删除当前节点,很简单. package Com; import java.util.Scanner; /* * 约瑟夫环问题,有n个人组 ...

  9. hive

    Hive Documentation https://cwiki.apache.org/confluence/display/Hive/Home 2016-12-22  14:52:41 ANTLR  ...

  10. 个人也能申请微信小程序获得APPID和手机测试效果

    微信小程序昨晚火爆公测,我也第一时间注册了小程序账号开启公测之旅. 注册过程可以看文档:https://my.oschina.net/imhoodoo/blog/780901 进入后台之后我们其实主要 ...