Question

Travailler avec VS 2008 et Autodesk Revit MEP 2010 en C # J'essaie de savoir si une porte est communicant avec les chambres:

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

Cette approche ne fonctionne pas parce que la valeur de retour de elementDoor.get_Parameter(BuiltInParameter.FROM_ROOM_ID) est toujours null.

J'ai lu sur le bâtiment Blog Coder

  

paramètres intégrés ne sont pas une partie officiellement prise en charge de l'API. Dans   l'avenir, nous prévoyons qu'il sera remplacé par des données correctement exposées comme   une propriété.

Cette déclaration est vraie? Quelqu'un peut-il me pointer vers un moyen efficace pour obtenir la relation entre les portes et les chambres?

Était-ce utile?

La solution

Les portes sont des instances de la famille, donc

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

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

devrait travailler pour cela.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top