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# 房间到门的关系的主要内容,如果未能解决你的问题,请参考以下文章

Revit是建筑人群的必备课,该如何开启其大门?

autodesk revit architecture 2015与2014区别大吗

Autodesk Revit 装配体

Revit API。从主模型元素所在的链接模型中获取一个房间

Revit使用WinForm和WPF编程范式

Revit API - 抛出异常:RevitAPI.dll 中的“Autodesk.Revit.Exceptions.InternalException” - 尝试两次运行按钮时