【发布时间】:2016-11-09 17:53:20
【问题描述】:
我正在开发一个应用程序,该应用程序需要知道哪个房间的边界是哪个房间的边界。在这种情况下,了解房间边界是墙壁还是房间分隔符是相关的。
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 的兼容性。
【问题讨论】:
-
GetBoundarySegments() 没有在 2017 年从 API 中删除,它仍然存在(甚至没有标记为“已弃用”)。你没有错过参考吗?
-
该代码在 2017 年调用时会在 foreach 循环中引发异常,但在 2016 年可以正常工作。上述方法抛出异常: Method not found: 'Autodesk.Revit.DB.Element Autodesk.Revit.DB.BoundarySegment.get_Element()'。