Dzisiaj krótki wpis o prostej funkcji, która może zaoszczędzić nam sporo czasu, wtedy gdy go nie mamy. Chodzi o możliwość automatycznego wyłączenia wielu podrysów dla rzutów. Zazwyczaj jest to operacja potrzebna przed każdorazowym wydrukiem czy też eksportem rysunków z modelu. Niestety Revit nie pozwala na zrobienie tego hurtowo. Także im więcej rzutów, tym więcej powtarzanych kliknięć.
Z pomocą może nam przyjść jednak dodatek Dynamo, który świetnie nadaje się do automatyzacji prostych, a powtarzalnych, zadań. Przy jego pomocy jesteśmy w stanie pobrać z projektu listę potrzebnych nam rzutów, a następnie dokonać na nich pożądaną operację. Niestety domyślnie Dynamo nie posiada węzła, który umożliwiłby wyłączenie podrysu dla rysunku rzutu. Nie jest to na szczęście proces nazbyt skomplikowany i prosty kod w węźle skryptowym Pythona rozwiąże nasz problem. Podstawa naszej funkcji to w zasadzie jedna linijka kodu:
view.SetUnderlayRange(ElementId.InvalidElementId,ElementId.InvalidElementId)
Gdzie view to nasz widok do zmiany. Chcąc wyłączyć podrys ustawiemy jego zakresy na nieistniejący element modelu – InvalidElementId.
Starsze wersje Dynamo/Revita wymagają nieco innego kodu, aczkolwiek zasada jest dokładnie ta sama:
view.get_Parameter(BuiltInParameter.VIEW_UNDERLAY_ID).Set(ElementId.InvalidElementId)
Jako, że dokonujemy zmiany w modelu Revita, całość musimy umieścić w tzw. transakcji z bazą danych. Transakcję należy otworzyć przed dokonaniem zmian, a później zamknąć:
doc = DocumentManager.Instance.CurrentDBDocument TransactionManager.Instance.EnsureInTransaction(doc) #tu wstawiamy funkcję wymagającą zmiany modelu TransactionManager.Instance.TransactionTaskDone()
Całość kodu naszego węzła wyłączającego podrysy może wyglądać tak:
import clr clr.AddReference("RevitAPI") from Autodesk.Revit.DB import * clr.AddReference("RevitServices") import RevitServices from RevitServices.Persistence import DocumentManager from RevitServices.Transactions import TransactionManager #The inputs to this node will be stored as a list in the IN variables. elements = UnwrapElement(IN[0]) doc = DocumentManager.Instance.CurrentDBDocument TransactionManager.Instance.EnsureInTransaction(doc) for view in elements: #view.get_Parameter(BuiltInParameter.VIEW_UNDERLAY_ID).Set(ElementId.InvalidElementId) view.SetUnderlayRange(ElementId.InvalidElementId,ElementId.InvalidElementId) TransactionManager.Instance.TransactionTaskDone() #Assign your output to the OUT variable. OUT = 0
A to przykładowa definicja Dynamo wyłączająca podrysy w całym projekcie:
