如何在 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 2017 中获取房间分隔器

这是

预期并记录在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