我正在开发一个需要了解其他房间边界的应用程序。在这种情况下,了解房间边界是墙还是房间分隔符很重要。

 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 Platform API更改和添加文件(see 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)
  {

  }
}

关于c# - 如何在Revit 2017中获得房间分隔符,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38245018/

10-12 13:05