之前有说到过BIM模型其实就是一个结构化的数据库,这个数据库按照特定的排列规则,在BIM模型中就是构件和语义的排序规则,今天我们就通过Revit二次开发获取构件参数。
思路:以墙为例,通过选择单个或者多个墙的方法,获取构件的id,通过id获取构件,再获取构件的参数。准备材料:Visual Studio 2017,Revit 2017。using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;
using System.Data;
using Autodesk.Revit;
using Autodesk.Revit.UI;
using Autodesk.Revit.UI.Selection;
using Autodesk.Revit.DB;
using Autodesk.Revit.DB.Architecture;
using Autodesk.Revit.Attributes;
namespace GetElementParameters
{
[Transaction(Autodesk.Revit.Attributes.TransactionMode.Manual)]
[Regeneration(Autodesk.Revit.Attributes.RegenerationOption.Manual)]
[Journaling(Autodesk.Revit.Attributes.JournalingMode.NoCommandData)]
public class get_parameters : IExternalCommand
{
public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
{
Autodesk.Revit.ApplicationServices.Application app = commandData.Application.Application;
Document doc = commandData.Application.ActiveUIDocument.Document;
UIApplication uiapp = commandData.Application;
UIDocument uiDoc = uiapp.ActiveUIDocument;
Selection selection = uiDoc.Selection;
ICollection<ElementId> selectedIds = uiDoc.Selection.GetElementIds();
if (0 == selectedIds.Count)
{
// 如果没有选择元素
TaskDialog.Show("开发提示框", "请先选择一个构件");
}
else
{
String info = "选择到的元素:";
foreach (ElementId id in selectedIds)
{
Element element = doc.GetElement(id);
info += "\n\t类型名称:" + element.Name.ToString();
info += " id:"+id.IntegerValue;
info += " 长度:"+element.get_Parameter(BuiltInParameter.CURVE_ELEM_LENGTH).AsValueString();
info += " 体积:" + element.get_Parameter(BuiltInParameter.HOST_VOLUME_COMPUTED).AsValueString();
info += " 标高:" + element.get_Parameter(BuiltInParameter.WALL_BASE_CONSTRAINT).AsValueString();
}
TaskDialog.Show("开发提示框", info);
}
return Result.Succeeded;
}
}
}
这里最核心的思想就是通过内置参数(BuildInParameter )来获取到构件参数,BuildInParameter 无视语言,这种方法十分的有效和简单。一般我们在Lookup中查找想要的BuildInParameter ,顺序:选中构件>Snoop Current Selection>Parameters点击上方的Definition,弹出以下窗口,红色箭头就是BuiltInParameter,右键可以复制。另外,这里有Snoop Built-In Parameters和Snoop Built-In Enum MappingsSnoop Built-In Parameters是查看Built-In Parameter的各种属性和方法,注意红框内是我们经常使用到的将Revit自身的各种数据类型的方法转换成C#中常用的数据类型,以方便和C#进行整合使用。Snoop Built-In Enum Mappings更像是一个Built-In Parameter和中文的对照表,左边那一列就是内置参数了。点击上方生成>生成解决方法,复制一下生成的文件路径。打开Revit,通过Add-In Manager将代码加载到Revit。选中构件,这里可以选择一个墙体,也可以选中多个墙体,运行载入的dll文件,弹出窗口。在Revit二次开发中会经常用到获取构件的参数,这也是对BIM模型的信息获取的方法。微信公众号【BIM技术应用交流】后台回复“二开12”获取本期源代码。欢迎关注知乎专栏【BKM - Revit二次开发】