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.





