Cechą dobrego projektu jest jego skoordynowanie pomiędzy poszczególnymi branżami. Idea ta odgrywa znaczącą rolę w czasie pracy nad tematami w środowisku BIM. Możliwość współbieżnego projektowania, pozwala na bieżącą kontrolę poziomu spójności modeli pod względem kolizji czy też wzajemnych zależności między branżami. Elektrycy potrzebne informacje widzą w postaci parametrów w modelu, architekci wiedzą, gdzie w suficie będą nawiewniki, a konstruktorzy gdzie wykonać podkonstrukcje pod centrale wentylacyjne. Każdy dokłada fragment swojej pracy nad kompletnym, cyfrowym modelem budynku.
Przygotowanie otworów w ścianach dla instalacji to zadanie na styku trzech branż: instalatorów, architektów oraz konstruktorów. Klasycznym podejściem jest przygotowanie planu otworów, a następnie przekazanie ich do pozostałych branż. W przypadku dużych obiektów, punktów przejść przewodów instalacyjnych przez ściany może być sporo, dlatego też warto zrobić następny krok i znaleźć lepszy, bardziej efektywny sposób ich lokalizacji.
Na szczęście dysponujemy środowiskiem Dynamo, gdzie możemy przygotować skrypt, który wykona większość pracy za nas. Jego zadaniem będzie wycięcie otworów w ścianach w miejscach, gdzie przechodzą kanały wentylacyjne. Proces będzie realizowany w modelu architektonicznym, do którego został podłączony model instalacyjny.
Dynamo w akcji
Celem skryptu będzie przygotowanie w modelu architektury otworów w miejscach przejść kanałów wentylacyjnych przez ściany. Pierwszym zadaniem jest wybranie z modelu wszystkich elementów Ściana oraz wszystkich elementów Kanał wentylacyjny z podłączonego modelu wentylacji.
Kolejnym krokiem jest wychwycenie punktów, gdzie następuje skrzyżowanie ścian z kanałami.
Następnie wywoływane są grupy węzłów odpowiedzialnych za określenie punktów geometrii kolizji kanałów ze ścianą – względem kanału oraz względem ściany.
Po ustaleniu punktów przecięcia ścian z kanałami, dane przekazywane są do grup węzłów, gdzie pierwsza sprawdza kierunek w jakim przecinają się ściany z kanałem. Ustalenie tej zmiennej jest niezbędne, żeby wycinany otwór powstał równolegle do ściany. 🙂 Druga grupa określa wielkość otworu względem wielkości kanału.
Finalną częścią skryptu jest kod Python’a który wywołuje polecenie tworzenia otworu z Revit API.
import clr clr.AddReference('RevitAPI') from Autodesk.Revit.DB import * import Autodesk clr.AddReference("RevitServices") import RevitServices from RevitServices.Persistence import DocumentManager from RevitServices.Transactions import TransactionManager doc = DocumentManager.Instance.CurrentDBDocument openings = [] walls = IN[0] wallsCount = len(walls) points = IN[1] direction = IN[2] width = IN[3] height = IN[4] for idx in range(wallsCount): if direction[idx] == "x": ULX=(points[idx]).X - width[idx]/2 ULY=(points[idx]).Y ULZ=(points[idx]).Z + height[idx]/2 UL = XYZ(ULX/304.8,ULY/304.8,ULZ/304.8) DRX=(points[idx]).X + width[idx]/2 DRY=(points[idx]).Y DRZ=(points[idx]).Z - height[idx]/2 DR = XYZ(DRX/304.8,DRY/304.8,DRZ/304.8) else: ULX=(points[idx]).X ULY=(points[idx]).Y - width[idx]/2 ULZ=(points[idx]).Z + height[idx]/2 UL = XYZ(ULX/304.8,ULY/304.8,ULZ/304.8) DRX=(points[idx]).X DRY=(points[idx]).Y + width[idx]/2 DRZ=(points[idx]).Z - height[idx]/2 DR = XYZ(DRX/304.8,DRY/304.8,DRZ/304.8) TransactionManager.Instance.EnsureInTransaction(doc) opening = doc.Create.NewOpening(UnwrapElement(walls[idx]),UL,DR) TransactionManager.Instance.TransactionTaskDone() openings.append(opening) continue OUT = openings
Efekt pracy skryptu przedstawia poniższa wizualizacja.
Podsumowanie
Rynek pracy inżynierów zdecydowanie zmienia się w kierunku większej integracji z nowymi technologiami. Możliwości wykorzystania Dynamo w codziennej pracy są bardzo szerokie, wiele rzeczy można zautomatyzować i uprościć. Dokładając do tego skrypty Pythona i Revit API uzyskujemy potężne narzędzie inżynierskie, wykraczające daleko poza modelowanie 3D. Połączenie praktycznej wiedzy technicznej oraz umiejętność wykorzystania narzędzi jakie oferuje branża IT stanowią przyszłość pracy na rynku budownictwa w Polsce.