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. CRL快速开发框架系列教程七(使用事务)

    本系列目录 CRL快速开发框架系列教程一(Code First数据表不需再关心) CRL快速开发框架系列教程二(基于Lambda表达式查询) CRL快速开发框架系列教程三(更新数据) CRL快速开发框 ...

  2. css居中div的几种常用方法

    在开发过程中,很多需求需要我们居中一个div,比如html文档流当中的一块div,比如弹出层内容部分这种脱离了文档流等.不同的情况有不同的居中方式,接下来就分享下一下几种常用的居中方式. 1.text ...

  3. 使用mybatis-generator在自动生成Model类和Mapper文件

    使用mybatis-generator插件可以很轻松的实现mybatis的逆向工程,即,能通过表结构自动生成对应的java类及mapper文件,可以大大提高工作效率,并且它提供了很多自定义的设置可以应 ...

  4. 【夯实PHP基础】PHP数组,字符串,对象等基础面面观

    本文地址 分享提纲 1.数组篇 2.字符创篇 3.函数篇 4.面向对象篇 5.其他篇 /*************************** 一.数组篇 Begin***************** ...

  5. IIS启动失败,启动Windows Process Activation Service时,出现错误13:数据无效 ;HTTP 错误 401.2 - Unauthorized 由于身份验证头无效,您无权查看此页

    因为修改过管理员账号的密码后重启服务器导致IIS无法启动,出现已下异常 1.解决:"启动Windows Process Activation Service时,出现错误13:数据无效&quo ...

  6. mysql源码包手动安装、配置以及测试(亲测可行)

    笔记编者:小波/qq463431476博客首页:http://www.cnblogs.com/xiaobo-Linux/ 记下这篇mysql笔记,望日后有用! redhat6采用centos yum源 ...

  7. Spring MVC注解开发入门

    注解式开发初步 常用的两个注解: @Controller:是SpringMVC中最常用的注解,它可以帮助定义当前类为一个Spring管理的bean,同时指定该类是一个控制器,可以用来接受请求.标识当前 ...

  8. 微软将向Linux用户提供SQL Server程序

    微软公司(Microsoft Corp., MSFT)将向Linux操作系统的用户提供旗下一项最赚钱的产品,这是该公司几年前无法想像的举措.这家软件巨头周一表示,将向免费的Linux Server提供 ...

  9. .NET基础拾遗(1)类型语法基础和内存管理基础

    Index : (1)类型语法.内存管理和垃圾回收基础 (2)面向对象的实现和异常的处理 (3)字符串.集合与流 (4)委托.事件.反射与特性 (5)多线程开发基础 (6)ADO.NET与数据库开发基 ...

  10. [Intel Edison开发板] 05、Edison开发基于MRAA实现IO控制,特别是UART通信

    一.前言 下面是本系列文章的前几篇: [Intel Edison开发板] 01.Edison开发板性能简述 [Intel Edison开发板] 02.Edison开发板入门 [Intel Edison ...