Lokalizację obiektu Revitowego w Dynamo możemy w łatwy sposób pozyskać przy pomocy standardowych węzłów – chociażby FamilyInstance.Location. Są jednak takie typy elementów dla, których kwestia ta się komplikuje. Ściany np. nie zwracają lokalizacji w postaci punktu, a jako krzywą. Obiekty generowane na podstawie obrysów (takie jak np. stropy) w ogóle nie zwrócą takiego parametru. Jeśli jednak potrzebujemy znaleźć środkowy punkt położenia takich elementów, możemy posłużyć tzw. Bounding Box. Jest to rodzaj przestrzennej obwiedni obiektu – najmniejsze prostopadłościenne pudełko, w którym mieści się nasz element. Znajdując geometryczny środek takiego prostopadłościanu otrzymamy również punkt lokalizacji badanego elementu. Nie zawsze jest to lokalizacja dokładna, np. w przypadku wklęsłych obrysów punkt środkowy może wypaść poza tymże obrysem. Jednak w wielu przypadkach lokalizacja otrzymana w ten sposób może być w zupełności wystarczająca (np. w celach porównawczych z innymi obiektami). Obwiednię Bounding Box w Pythonie możemy pobrać dla zadanego obiektu przy pomocy metody:
element.get_BoundingBox(View)
Czasem zakres obwiedni zmienia się w zależności od widoku (np. część obiektu jest przycięta), dlatego też możemy podać konkretny widok jako parametr wywołując funkcję. Równie dobrze możemy jako wartość parametru przekazać “None” i wtedy otrzymamy obwiednię bez żadnych modyfikacji. Obiekt typu Bounding Box zawiera właściwości Min i Max, będące skrajnymi punktami w przestrzeni trójwymiarowej, wyznaczającymi prostopadłościan. Na podstawie ich współrzędnych możemy wyliczyć środek geometryczny pudełka. Całość kodu w węźle Pythona może wyglądać następująco:
import clr clr.AddReference("RevitAPI") from Autodesk.Revit.DB import * #The inputs to this node will be stored as a list in the IN variables. elements = UnwrapElement(IN[0]) points =[] for e in elements: bb = e.get_BoundingBox(None) if not bb is None: centre = bb.Min+(bb.Max-bb.Min)/2 points.append(centre) #Assign your output to the OUT variable. OUT = points