Wyłączanie podrysów przy pomocy Dynamo

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:

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