我正在处理一个应用程序,该应用程序需要知道哪个房间边界哪个。在这种情况下,知道房间边界是墙壁还是房间隔离器是相关的。
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年的兼容性。
答案 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