Quantification  国外有的叫定量  我们国内一些施工方叫工程量。

通过TakeOff API的开发者有机会获得更多的数据和数据可通过图形用户界面。

1 添加Navisworks的Api

Autodesk.Navisworks.Takeoff.dll

2获取量一般是由随模型一起有个Access数据库.所有数据存在该数据库里面。当然也可以是基本数据库..
3使用C#和使用Autodesk.Navisworks.Api.Takeoff命名空间则扩展方法:

DocumentExtensions.GetTakeoff 

例如 C# 代码:

DocumentTakeoff docTakeoff =
Autodesk.Navisworks.Api.Application.MainDocument.Takeoff as DocumentTakeoff; DocumentTakeoff docTakeoff2 =
Autodesk.Navisworks.Api.Application.MainDocument.GetTakeoff();
注:下面有关键字 table 都是数据库里的表。
DocumentExtensions类的地方扩展到文档类的DocumentTakeoff文档部件类。
 
DocumentTakeoff提供对与起飞相关的各种文档部分。
 
ItemGroupTable配置信息ItemGorupTable。
 
ItemTable配置信息ItemTable。
 
ObjectResourceTable配置信息ObjectResourceTable。
 
ObjectStepTable配置信息ObjectStepTable。
 
ObjectTable配置信息ObjectTable。
 
ResourceGroupTable配置信息ResourceGroupTable。
 
ResourceTable配置信息ResourceTable。
 
StepResourceTable配置信息StepResourceTable。
 
StepTable配置信息StepTable。
 
TakeoffTable为所有表共有的特征共同的基类。
 
TakeoffTableSelection表示在一个表中选择。
 
TakeoffColumnDefinition起飞表中的固定列的定义。
 
TakeoffProjectSettings Access项目设置。
 
TakeoffSelection切入点每个表的选择。
 
TakeoffSelectionChangeEventArgs用于TakeoffSelection Changed事件通过哪些表被修改。
 
TakeoffSheetIds访问表编号。
 
TakeoffVariable代表一个变量。
 
TakeoffVariableCollection代表配置列的行数据。
 
TakeoffVariableDefinition起飞表变量列的定义。
 
的配置列定义TakeoffVariableDefinitionCollection集合

4使用标准的SQL查询数据

Int64 GetLastInsertRowId()
{
DocumentTakeoff docTakeoff = Autodesk.Navisworks.Api.Application.MainDocument.GetTakeoff();
using (NavisworksCommand cmd = docTakeoff.Database.Value.CreateCommand())
{
//use SELECT ... FROM ... WHERE ... sql for query.
//last_insert_rowid() is a stored function used to retrieve the rowid of the last insert row
cmd.CommandText = "select last_insert_rowid()";
using (NavisWorksDataReader dataReader = cmd.ExecuteReader())
{
Int64 lastId = -;
if (dataReader.Read())
{
Int64.TryParse(dataReader[].ToString(), out lastId);
}
return lastId;
}
}
}

5使用标准的SQL创建目录

Int64 InsertItem(Int64? parent, String name, String description, String wbs, Int32 color, Double transparency)
{
Debug.Assert(name != null);
DocumentTakeoff docTakeoff = Autodesk.Navisworks.Api.Application.MainDocument.GetTakeoff();
ItemTable table = docTakeoff.Items;
Debug.Assert(table != null); //Directly operate on database
//Database schema entry: TakeoffTable
//INSERT INTO TABLE(COL1,COL2,COL3...) VALUES(V1,V2,V3...);
String sql = "INSERT INTO TK_ITEM(parent, name, description, wbs, color, transparency) VALUES(@parent, @name, @description,@wbs, @color,@transparency)";
//Modification must be surrounded by NavisworksTransaction
using (NavisworksTransaction trans = docTakeoff.Database.BeginTransaction(DatabaseChangedAction.Edited))
{
using (NavisworksCommand cmd = docTakeoff.Database.Value.CreateCommand())
{
NavisworksParameter p = cmd.CreateParameter();
p.ParameterName = "@parent";
if (parent.HasValue)
p.Value = parent.Value;
else
p.Value = null;
cmd.Parameters.Add(p); p = cmd.CreateParameter();
p.ParameterName = "@name";
p.Value = name;
cmd.Parameters.Add(p); p = cmd.CreateParameter();
p.ParameterName = "@description";
p.Value = description;
cmd.Parameters.Add(p); p = cmd.CreateParameter();
p.ParameterName = "@wbs";
p.Value = wbs;
cmd.Parameters.Add(p); p = cmd.CreateParameter();
p.ParameterName = "@color";
p.Value = color;
cmd.Parameters.Add(p); p = cmd.CreateParameter();
p.ParameterName = "@transparency";
p.Value = transparency;
cmd.Parameters.Add(p); cmd.CommandText = sql;
cmd.ExecuteNonQuery();
}
trans.Commit();
}
return GetLastInsertRowId();
}

6复制使用类来创建一个takeOff

Int64 DoTakeoff(Int64 itemId, Guid modelItemGuid)
{
DocumentTakeoff docTakeoff = Autodesk.Navisworks.Api.Application.MainDocument.GetTakeoff();
List<Autodesk.Navisworks.Api.ModelItem> items = Autodesk.Navisworks.Api.Application.MainDocument.Models.RootItemDescendantsAndSelf.WhereInstanceGuid(modelItemGuid).ToList();
Int64 lastId = -;
if (items.Count != )
{
using (NavisworksTransaction trans = docTakeoff.Database.BeginTransaction(DatabaseChangedAction.Edited))
{
docTakeoff.Objects.InsertModelItemTakeoff(itemId, items[]);
//Quantification UI actually expect the takeoff to have a non-empty wbs, so better to set the wbs for it using the sql way
lastId = GetLastInsertRowId();
Debug.Assert(lastId > );
using (NavisworksCommand cmd = docTakeoff.Database.Value.CreateCommand())
{
//UPDATE Object set WBS = value WHERE id = lastId;
cmd.CommandText = "UPDATE TK_OBJECT SET wbs = @wbs WHERE id = @id";
NavisworksParameter p = cmd.CreateParameter();
p.ParameterName = "@wbs";
p.Value = ;
cmd.Parameters.Add(p); p = cmd.CreateParameter();
p.ParameterName = "@id";
p.Value = lastId;
cmd.Parameters.Add(p); cmd.ExecuteNonQuery();
}
trans.Commit();
} }
return lastId;
}

7使用类查询和修改数据

void UpdateTakeoffValue(Int64 objectId)
{
DocumentTakeoff docTakeoff = Autodesk.Navisworks.Api.Application.MainDocument.GetTakeoff();
//TakeoffVariableCollection TakeoffVariable are the entrance for read/update of the variables
TakeoffVariableCollection variableCollection = docTakeoff.Objects.SelectInputVariables(objectId);
Int32 lengthIndex = variableCollection.Find("ModelLength");
if (lengthIndex != -)
{
TakeoffVariable lengthVariable = variableCollection.GetItem(lengthIndex);
if (lengthVariable.IsAbleToSetValue)
{
lengthVariable.Value = Autodesk.Navisworks.Api.VariantData.FromDouble(5.6);
using (NavisworksTransaction trans = docTakeoff.Database.BeginTransaction(DatabaseChangedAction.Edited))
{
docTakeoff.Objects.UpdateInputVariables(objectId, variableCollection);
trans.Commit();
}
}
}
}

8选择在不同层次的元素在层次结构中

void SelectUIItem(Int64 itemId)
{
TakeoffSelection takeoffSelection = Autodesk.Navisworks.Api.Application.MainDocument.GetTakeoff().CurrentSelection;
takeoffSelection.BeginEdit();
takeoffSelection.Items.Clear();
takeoffSelection.ItemGroups.Clear();
takeoffSelection.StepResources.Clear();
takeoffSelection.Steps.Clear();
takeoffSelection.Items.Add(itemId);
takeoffSelection.EndEdit();
}
粘贴的老外的

Navisworks Api Quantification的更多相关文章

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

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

  2. NavisWorks Api 简单使用与Gantt

    相信很多朋友在做BIM项目的时候.都有客户会提出项目计划,形象进度 等需求. 那么当前最主要的问题就是计划与BIM模型的关联问题.那么我在项目中是用户用Project软件编辑计划然后手动跟三维模型关联 ...

  3. Navisworks Api Tool

    用Google 翻译的..做个参考 None  无有效的选择  Select  选择 SelectBox 选择框 RedlineFreehand  红线写意 RedlineLine 红线线 Redli ...

  4. Navisworks 提供了.NET, COM和NwCreate 三种API

    Navisworks 提供了.NET, COM和NwCreate 三种API.而通常我们说Navisworks API其实指的只是COM或.NET,因为NwCreate的功能比较特殊.待我一一道来: ...

  5. Navisworks 2014 Api 简单的使用

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

  6. Navisworks Addin 插件集成

    调用Navisworks的 Api . 我这里是基于.NET 开发的. 我主要是尝试着获取一下工程量的API.不过还在研究. 插件的启动入口. //插件描述 [PluginAttribute(&quo ...

  7. Autodesk 产品开发培训开始报名-8月26~28-武汉– Revit, Vault, Autodesk Viewer, Navisworks

    为了帮助Autodesk中国地区的二次开发人员有机会系统地了解与学习Autodesk 在BIM解决方案中的旗舰产品 Revit以及Navisworks等产品的最新开发技术,并有机会与Autodesk ...

  8. C#开发BIMFACE系列40 服务端API之模型集成

    BIMFACE二次开发系列目录     [已更新最新开发文章,点击查看详细] 随着建筑信息化模型技术的发展,越来越多的人选择在云端浏览建筑模型.现阶段的云端模型浏览大多是基于文件级别,一次只可以浏览一 ...

  9. 干货来袭-整套完整安全的API接口解决方案

    在各种手机APP泛滥的现在,背后都有同样泛滥的API接口在支撑,其中鱼龙混杂,直接裸奔的WEB API大量存在,安全性令人堪优 在以前WEB API概念没有很普及的时候,都采用自已定义的接口和结构,对 ...

随机推荐

  1. JS继承之寄生类继承

    原型式继承 其原理就是借助原型,可以基于已有的对象创建新对象.节省了创建自定义类型这一步(虽然觉得这样没什么意义). 模型 function object(o){ function W(){ } W. ...

  2. Node.js入门(一)

    一.Node.js本质上是js的运行环境. 二.可以解析js代码(没有浏览器安全级的限制): 提供系统级的API:1.文件的读写 2.进程的管理 3.网络通信 三.可以关注的四个网站: 1.https ...

  3. form表单验证-Javascript

    Form表单验证: js基础考试内容,form表单验证,正则表达式,blur事件,自动获取数组,以及css布局样式,动态清除等.完整代码如下: <!DOCTYPE html PUBLIC &qu ...

  4. 跟着老男孩教育学Python开发【第二篇】:Python基本数据类型

    运算符 设定:a=10,b=20 . 算数运算 2.比较运算 3.赋值运算 4.逻辑运算 5.成员运算 基本数据类型 1.数字 int(整型) 在32位机器上,整数的位数为32位,取值范围为-2**3 ...

  5. Ubuntu1604下安装Liggghts及CFDEM Coupling

    部分内容参考http://www.linuxdiyf.com/linux/16315.html LIGGGHTS是一款开源的DEM软件,来自于著名的分子动力学软件LAMMPS,目前借助于CFDEM C ...

  6. [学习笔记]JavaScript之函数式编程

    欢迎指导与讨论:) 前言 函数式编程能使我们的代码结构变得简洁,让代码更接近于自然语言,易于理解. 一.减少不必要的函数嵌套代码 (1)当存在函数嵌套时,若内层函数的参数与外层函数的参数一致时,可以这 ...

  7. 机器指令翻译成 JavaScript —— No.6 深度优化

    第一篇 中我们曾提到,JavaScript 最终还得经过浏览器来解析.因此可以把一些优化工作,交给脚本引擎来完成. 现代浏览器的优化能力确实很强,但是,运行时的优化终归是有限的.如果能在事先实现,则可 ...

  8. 闲话Promise机制

    Promise的诞生与Javascript中异步编程息息相关,js中异步编程主要指的是setTimout/setInterval.DOM事件机制.ajax,通过传入回调函数实现控制反转.异步编程为js ...

  9. Netty5使用自签证书实现SSL安全连接

    这次使用的Netty是最新的5.0 Alpha2版本,下载地址是:http://dl.bintray.com/netty/downloads/netty-5.0.0.Alpha2.tar.bz2,发布 ...

  10. 菜鸟在C语言编译,链接时可能遇到的两个问题

    最近在看 CSAPP (Computer Systems A Programmers Perspective 2nd) 的第七章 链接.学到了点东西,跟大家分享.下文中的例子都是出自CSAPP第七章. ...