【问题标题】:Autodesk Revit MEP 2010 .NET API C# room to door relationAutodesk Revit MEP 2010 .NET API C# 房间到门的关系
【发布时间】: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 的官方支持部分。在 未来我们预计它将被正确公开的数据所取代 一个属性。

这句话是真的吗?谁能指出一种有效的方法来获取门和房间之间的关系?

【问题讨论】:

  • 花了一段时间,但我找到了一种至少在我的情况下有效的解决方案。也可以帮助别人。遍历所有房间。为每个房间找到边界段。获取边界段的曲线。细分边界段的曲线。像地板上的投影一样工作。将结果与门的投影边界框相交。如果有交叉口,则门由房间托管。如果其他人找到更好的方法来连接房间和门,我会很高兴听到,因为我的方法有点麻烦。

标签: c# .net autodesk revit


【解决方案1】:

门是家庭实例,所以

Autodesk.Revit.Elements.FamilyInstance elementDoor = elementsetiteratorBIMDoors.Current as Autodesk.Revit.Elements.FamilyInstance;

Room fromRoom = elementDoor.FromRoom;
Room toRoom = elementDoor.ToRoom;

应该为此工作。

【讨论】:

  • 非常感谢。我错过了这种方法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-10-04
  • 2014-05-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-24
  • 2021-08-08
相关资源
最近更新 更多