Znajdowanie położenia obiektu na podstawie Bounding Box w Dynamo

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
Posts created 32

Dodaj komentarz

Twój adres email nie zostanie opublikowany.

Related Posts

Begin typing your search term above and press enter to search. Press ESC to cancel.

Back To Top