Autodesk Revit MEP 2010 .NET API C# 房间到门的关系
Posted
技术标签:
【中文标题】Autodesk Revit MEP 2010 .NET API C# 房间到门的关系【英文标题】:Autodesk Revit MEP 2010 .NET API C# room to door relation 【发布时间】:2010-12-04 23:32:00 【问题描述】:在 C# 中使用 VS 2008 和 Autodesk Revit MEP 2010 我试图确定门是否连接到房间:
ElementSetIterator elementsetiteratorBIMDoors =
bimdoors.getBIMDoors().ForwardIterator();
while (elementsetiteratorBIMDoors.MoveNext())
Autodesk.Revit.Element elementDoor =
elementsetiteratorBIMDoors.Current as Autodesk.Revit.Element;
if ((null != elementDoor.get_Parameter(BuiltInParameter.FROM_ROOM_ID)) &&
(null != elementDoor.get_Parameter(BuiltInParameter.TO_ROOM_ID)))
string sDoorFromRoomID =
elementDoor.get_Parameter(BuiltInParameter.FROM_ROOM_ID).ToString();
string sDoorToRoomID =
elementDoor.get_Parameter(BuiltInParameter.TO_ROOM_ID).ToString();
graph.addLink(new Link(sDoorFromRoomID, sDoorToRoomID));
这种方法不起作用,因为elementDoor.get_Parameter(BuiltInParameter.FROM_ROOM_ID)
的返回值始终是null
。
我在Building Coder blog 上看到
内置参数不是 API 的官方支持部分。在 未来我们预计它将被正确公开的数据所取代 一个属性。
这句话是真的吗?谁能指出一种有效的方法来获取门和房间之间的关系?
【问题讨论】:
花了一段时间,但我找到了一种至少在我的情况下有效的解决方案。也可以帮助别人。遍历所有房间。为每个房间找到边界段。获取边界段的曲线。细分边界段的曲线。像地板上的投影一样工作。将结果与门的投影边界框相交。如果有交叉口,则门由房间托管。如果其他人找到更好的方法来连接房间和门,我会很高兴听到,因为我的方法有点麻烦。 【参考方案1】:门是家庭实例,所以
Autodesk.Revit.Elements.FamilyInstance elementDoor = elementsetiteratorBIMDoors.Current as Autodesk.Revit.Elements.FamilyInstance;
Room fromRoom = elementDoor.FromRoom;
Room toRoom = elementDoor.ToRoom;
应该为此工作。
【讨论】:
非常感谢。我错过了这种方法。以上是关于Autodesk Revit MEP 2010 .NET API C# 房间到门的关系的主要内容,如果未能解决你的问题,请参考以下文章
autodesk revit architecture 2015与2014区别大吗
Revit API。从主模型元素所在的链接模型中获取一个房间
Revit API - 抛出异常:RevitAPI.dll 中的“Autodesk.Revit.Exceptions.InternalException” - 尝试两次运行按钮时