【发布时间】: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 的官方支持部分。在 未来我们预计它将被正确公开的数据所取代 一个属性。
这句话是真的吗?谁能指出一种有效的方法来获取门和房间之间的关系?
【问题讨论】:
-
花了一段时间,但我找到了一种至少在我的情况下有效的解决方案。也可以帮助别人。遍历所有房间。为每个房间找到边界段。获取边界段的曲线。细分边界段的曲线。像地板上的投影一样工作。将结果与门的投影边界框相交。如果有交叉口,则门由房间托管。如果其他人找到更好的方法来连接房间和门,我会很高兴听到,因为我的方法有点麻烦。