Travailler avec VS 2008 et Autodesk Revit MEP 2010 en C# J'essaie de savoir si une porte est communicant avec les chambres:Autodesk Revit MEP 2010 API .NET C# salle à porte relation
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 ne fonctionne pas car la valeur de retour de elementDoor.get_Parameter(BuiltInParameter.FROM_ROOM_ID)
est toujours null
.
J'ai lu sur les Building Coder blog que
paramètres intégrés ne sont pas une partie officiellement prise en charge de l'API. Dans future, nous nous attendons à ce qu'il soit remplacé par des données correctement exposées comme une propriété.
Cette affirmation est-elle vraie? Quelqu'un peut-il me signaler un moyen efficace d'obtenir la relation entre les portes et les chambres?
Il a fallu du temps mais j'ai trouvé une solution qui fonctionne au moins dans mon cas. Que cela aide quelqu'un d'autre aussi. Itérer dans toutes les pièces. Pour chaque pièce, trouvez les segments de limite. Obtenez la courbe du segment de limite. Tesselate la courbe du segment de frontière. Fonctionne comme une projection sur le sol. Intersectez le résultat avec la boîte de délimitation projetée de la porte. S'il y a une intersection, la porte est hébergée dans la pièce. Si quelqu'un d'autre trouve un meilleur moyen d'obtenir la connexion entre la pièce et la porte, je serai heureux d'entendre parler de lui parce que mon approche est un peu lourd. –