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. PHP之时间和日期函数

    // 时间日期函数 Time <?php date_default_timezone_set('UTC'); // 获取当前时间的时间戳 $time0 = mktime(); $time1 = ...

  2. 普通程序员如何转向AI方向

    眼下,人工智能已经成为越来越火的一个方向.普通程序员,如何转向人工智能方向,是知乎上的一个问题.本文是我对此问题的一个回答的归档版.相比原回答有所内容增加. 一. 目的 本文的目的是给出一个简单的,平 ...

  3. iOS7 NavigationController 手势问题

    在iOS7中,如果使用了UINavigationController,那么系统自带的附加了一个从屏幕左边缘开始滑动可以实现pop的手势.但是,如果自定义了navigationItem的leftBarB ...

  4. PHP相关代码

    1 <html>  <head>       <meta http-equiv="content-type" content="text/h ...

  5. 将css和js缓存到localStorage缓存,提高网页响应速度

    适用于小站点,这很极致,很快速~~ /** * Created by SevenNight on 2016/9/21 0021. * 插件功能:使用localStorage缓存js和css文件,减少h ...

  6. Mono+Jexus让C#运行在Linux(centos7_x64),学习笔记

    .h2cls { background: #6fa833 none repeat scroll 0 0 !important; color: #fff; font-family: "微软雅黑 ...

  7. 【开源】知乎日报UWP 更新

    说明 大概十天之前我更新了一次APP,后来又仔细看了一下Store里的评论,发现还有几个地方没有改过来.于是前天晚上抽时间改了一下,顺便完善了一下UI体验. 没有看前面文章的童鞋可以看一下下面的链接: ...

  8. 前端开发面试题收集(css部分)

    http://davidshariff.com/quiz/ 做了下这里面前端开发面试的题,发现有些不会,所以在此做个整理以供自己学习,参考,总结. 1.问: CSS属性是否区分大小写? ul { Ma ...

  9. SFTP 命令列表以备查询

    Available commands: ascii Set transfer mode to ASCII binary Set transfer mode to binary cd path Chan ...

  10. <a>与文件下载-(下载一)

    <a>可直接下载xls,doc,rar,zip,exe,js文件(图片跟txt文件是直接打开的) <a href="wKioJlJolKeCIzkCADd3Wf7OPI42 ...