如何在2017年复兴中获得房间分隔符

时间:2016-07-07 12:04:36

标签: c# revit-api revit

我正在处理一个应用程序,该应用程序需要知道哪个房间边界哪个。在这种情况下,知道房间边界是墙壁还是房间隔离器是相关的。

 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,此代码现在抛出找不到的方法:&#39; Autodesk.Revit.DB.Element Autodesk.Revit.DB.BoundarySegment.get_Element()&#39;。异常表明此方法已被删除。

      var geometry = (Solid)room.get_Geometry(new Options()).First();
      var faces = geometry.Faces;

虽然这确实可以让我判断一些东西,比如地板是否有一个角度,它不会告诉我哪个边缘来自墙壁,哪个边缘来自房间隔间。

理想情况下,我可以拍摄我们的脸,并检查脸部的任何边缘是否是房间分隔符。如果有帮助的话,我已经有了所有墙的清单。

那么如何在2017年的复兴中做到这一点?最好不要破坏与2015年的兼容性。

2 个答案:

答案 0 :(得分:2)

Revit Platform API更改和添加文件(see SDK)的预期和记录,此方法在2016年被标记为已弃用,并于2017年被删除。< / p>

相反,您应该使用 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)
  {

  }
}

答案 1 :(得分:2)

Augusto指出的 Revit Platform API更改和添加文档也可在线获取:

http://thebuildingcoder.typepad.com/blog/2016/04/whats-new-in-the-revit-2017-api.html

只需搜索BoundarySegment即可。您缺少的get_Element方法实际上是Element属性的包装,已在Revit 2017中删除。

建筑编码器

提供了一个示例,演示如何使用.NET Reflection 库来支持不同版本的Revit中的不同功能。

http://thebuildingcoder.typepad.com/blog/2012/07/multi-version-add-in.html