Revit kopiowanie filtrów

20 luty 2022

Bez kategorii

Dzięki tej funkcji nie będziesz musiał ustawiać tych samych nadpisań filtrów dla wielu widoków. Wystarczy utworzyć zestaw na jednym z widoków, a następnie wystarczy skopiować filtry.

Spis treści:

Ikona z icons8.com/icon/
Ikona funkcji z icons8.com/icon/

Revit kopiowanie filtrów – założenia programu

Funkcja revit kopiowanie filtrów upraszcza proces tworzenia widoków w modelu. Dzięki niej nie jest wymagane tworzenie tych samych filtrów dla każdego widoku. Wystarczy je przekopiować. Ta funkcja przyda Ci się:

  1. Ustawisz odpowiednie widoki w modelu
  2. Przygotowujesz rysunki do druku na skomplikowanym modelu
  3. W trakcie projektu pojawia się potrzeba utworzenia specyficznych filtrów

Instrukcję instalacji nakładki znajdziesz w tym artykule.

Działanie programu

W pierwszej kolejności program pobiera listę filtrów w otworzonym przez nas widoku, a następnie wyświetla nam możliwe do wyboru warianty. Możliwe jest wybranie kilku revit filtrów na raz!

revit-kopiowanie-filtrów

Następnie przechodzimy do okna wyboru widoków do jakich chcemy skopiować nasze ustawienia filtrów. Tutaj również możliwy jest wybór wielu widoków.

revit-kopiowanie-filtrów-widoku

Po kliknięciu przycisku zatwierdzającego program nadpisuje filtry, a następnie zwraca nam listę przetransferowanych filtrów. Dzięki temu możemy upewnić się, że wszystko przebiegło po naszej myśli.

revit-kopiowanie-filtrów-wyniki

Film z działania programu

Kod programu – revit kopiowanie filtrów

Poniżej znajduje się kod programu z pierwszej wersji nakładki. Po więcej zapraszam na mojego GitHubie, gdzie na bieżąco pojawiać się będą nowe wersje nakładki.

Python
Copyright (C) 2022 Paweł Kińczyk
from rpw import revit as rv
from Autodesk.Revit.UI.Selection import *
from Autodesk.Revit.DB import *
from pyrevit import forms
from pyrevit import output

doc = rv.doc
uidoc = rv.uidoc

class View_copy:
    def __init__(self):
        
        ## Get active view
        
        self.views_to_paste = []
        self.active_view = doc.ActiveView
        
        ## Get active view filters
        
        filters = [doc.GetElement(i) for i in self.active_view.GetFilters()]
        self.filter_dict = {x.Name : x for x in filters}
        views = FilteredElementCollector(doc).OfCategory(BuiltInCategory.OST_Views).WhereElementIsNotElementType().ToElements()
        views_template = []
        
        for view in views:
            if view.IsTemplate == True:
                views_template.append(view)

        self.views_dict = {Element.Name.GetValue(x) : x for x in views_template}
        
        ## Pick filters you want to copy
        
        self.selected_option_a = forms.SelectFromList.show(self.filter_dict.keys(), title = "Select filters in active view", multiselect=True,button_name='Select filters to copy')
        self.selected_option_b = forms.SelectFromList.show(self.views_dict.keys(), title = "Select views where you want to past filters", multiselect=True,button_name='Select views to past filters')
        
        ## Set filters to new view
        filters_overr = []
        filters_overr_id = []
             
        transaction = Transaction(doc, 'Add insulation - PYLAB')
        transaction.Start()
        
        try:
            
            for filter in self.selected_option_a:
                f = self.filter_dict[filter]
                filter_id = f.Id
                filters_overr.append(self.active_view.GetFilterOverrides(filter_id))
                filters_overr_id.append(filter_id)
            
            for view in self.selected_option_b:
                for filter_overr_id, filter_overr in zip(filters_overr_id, filters_overr):
                    self.views_dict[view].SetFilterOverrides(filter_overr_id, filter_overr)
                    print("View: " + str(view) + " <- Filter: " + str(doc.GetElement(filter_overr_id).Name))
        except TypeError as e:
            print("Error: \n You didn't pick any view or filter")
        except Exception as e: 
            print("Error:")
            print(e)  

        transaction.Commit()

output = output.get_output()
output.print_html('<font size="6"><strong>Results:</strong></font>')
a = View_copy()


Wszelkie nieprawidłowości w działaniu programu jakie występują podczas korzystania proszę zgłaszać na moich kontach społecznościowych, albo koncie GitHub.

Sprawdź również:

Paweł Kińczyk
Paweł Kińczyk
Artykuły: 58

Newsletter

Chcesz być na bieżąco? Zapisz się do newslettera!

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *