Pergunta

Trabalhando com o VS 2008 e o Autodesk Revit MEP 2010 em C# Estou tentando descobrir se uma porta está se conectando a salas:

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));
    }
}

Esta abordagem não funciona porque o valor de retorno de elementDoor.get_Parameter(BuiltInParameter.FROM_ROOM_ID) é sempre null.

Eu li no BLOGO DE CORDE DE CONSTRUÇÃO este

Os parâmetros embutidos não são uma parte oficialmente suportada da API. No futuro, esperamos que seja substituído por dados que sejam adequadamente expostos como uma propriedade.

Essa afirmação é verdadeira? Alguém pode me indicar uma maneira eficiente de obter a relação entre portas e quartos?

Foi útil?

Solução

As portas são instâncias familiares, então

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

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

deve funcionar para isso.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top