Strop z otworem wewnętrznym w Dynamo

Krótki post pokazujący jak można utworzyć przy pomocy Dynamo strop z otworem wewnętrznym. Niestety w Revit API nie daje nam możliwości na wykonanie stropu ze złożonym szkicem (dwie pętle obrysu).

Dlatego też rozwiązaniem w tym wypadku będzie utworzenie pełnego stropu, a następnie umieszczenie w nim otworu. Jedyne na co trzeba uważać to konieczność wykonania dwóch transakcji. Nowy strop musi być wypchnięty do Revita (zamknięcie transakcji), zanim umieścimy w nim otwór.

Dla porządku całość opakowujemy tzw. TransactionGroup. Poniżej cały kod Pythona, a na końcu plik .dyn do pobrania.

Węzeł z kodem Pythona ma dwa wejścia – pierwszy to lista obwiedni stropów, drugi lista obwiedni otworów.

# Enable Python support and load DesignScript library
import clr

clr.AddReference("RevitAPI")
from Autodesk.Revit.DB import *

import Autodesk

clr.AddReference("RevitServices")
import RevitServices
from RevitServices.Persistence import DocumentManager

clr.AddReference("RevitNodes")
import Revit
clr.ImportExtensions(Revit.GeometryConversion)

borders = UnwrapElement(IN[0])
holes = UnwrapElement(IN[1])

output=[]

doc = DocumentManager.Instance.CurrentDBDocument
tg=TransactionGroup(doc, 'Floors')
tg.Start()

for b,h in zip(borders,holes):
	border = CurveArray()
	for c in b:
		border.Append(c.ToRevitType())
		
	t0 = Transaction(doc, 'Floor border')
	t0.Start()
	floor = doc.Create.NewFloor(border,False)
	t0.Commit()
	
	hole = CurveArray()
	for c in h:
		hole.Append(c.ToRevitType())
		
	t1 = Transaction(doc, 'Floor hole')
	t1.Start()
	opening = doc.Create.NewOpening(floor,hole,True)
	t1.Commit()
		
	output.append([floor,opening])

tg.Assimilate()
# Assign your output to the OUT variable.
OUT = output
Posts created 42

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