如何在 revit 2017 中获取房间分隔器
本文关键字:获取 房间 分隔 2017 revit | 更新日期: 2023-09-27 17:55:48
我正在开发一个应用程序,该应用程序需要了解哪个房间边框哪个其他房间。在这种情况下,了解房间边界是墙壁还是房间分隔符是相关的。
public FindsRoomSeperators(){
SpatialElementBoundaryOptions options = new SpatialElementBoundaryOptions();
options.SpatialElementBoundaryLocation = SpatialElementBoundaryLocation.Finish;
foreach (IList<Autodesk.Revit.DB.BoundarySegment> boundSegList in room.GetBoundarySegments(options))
{
foreach (Autodesk.Revit.DB.BoundarySegment boundSeg in boundSegList)
if ((BuiltInCategory)el.Category.Id.IntegerValue == BuiltInCategory.OST_RoomSeparationLines)
//proccess el
}
}
但是,作为Revit 2017,此代码现在抛出未找到的方法:"Autodesk.Revit.DB.Element Autodesk.Revit.DB.BoundarySegment.get_Element()"。 异常表明此方法已被删除。
var geometry = (Solid)room.get_Geometry(new Options()).First();
var faces = geometry.Faces;
虽然这确实允许我判断地板是否以一定角度站立的东西,但它并没有告诉我哪些边缘来自墙壁,哪些来自房间分隔器。
理想情况下,我将能够获取我们拥有的面孔,并检查脸部的任何边缘是否是房间分隔符。如果有帮助的话,我已经有了一份所有墙壁的列表。
那么如何在Revit 2017中做到这一点呢?最好不破坏与 2015 的兼容性。
预期并记录在Revit平台API更改和添加文件(请参阅SDK)中,此方法在2016年被标记为已弃用,并于2017年被删除。
相反,您应该使用 ElementId 或 LinkElementId(请参阅文档)。
foreach (Autodesk.Revit.DB.BoundarySegment boundSeg in boundSegList)
{
Element el = doc.GetElement(boundSeg.ElementId); // or doc.GetElement(boundSeg.LinkElementId);
if ((BuiltInCategory)el.Category.Id.IntegerValue == BuiltInCategory.OST_RoomSeparationLines)
{
}
}
Augusto 在上面指出的 Revit 平台 API 更改和添加文档也可在线获取:
http://thebuildingcoder.typepad.com/blog/2016/04/whats-new-in-the-revit-2017-api.html
只需搜索边界段。您缺少的get_Element
方法实际上是 Element
属性的包装器,该包装器已在 Revit 2017 中删除。
演示如何使用 .NET 反射库支持不同版本 Revit 中的不同功能的示例由建筑编码人员提供,网址为
http://thebuildingcoder.typepad.com/blog/2012/07/multi-version-add-in.html