Dzięki tej funkcji z mojej nakładki dobieranie nawiewników i wywiewników nie będzie już topornym procesem. Program możesz dopasować pod swoje potrzeby i preferencje. Więcej zobaczysz w moim filmie podlinkowanym poniżej.
Spis treści artykułu „Kalkulator wentylacji mechanicznej”:
- Revit kalkulator wentylacji mechanicznej – założenia programu
- Działanie programu
- Film z działania programu
- Kod programu
- Sprawdź również

Revit kalkulator wentylacji mechanicznej – założenia programu
Program umożliwia ustawienie własnych preferencji doboru nawiewników i wywiewników w programie Revit. Na bazie podanych preferencji możesz następnie umieszczać elementy bezpośrednio w modelu. Kiedy z tego skorzystasz?
- Dobierasz urządzenia wentylacyjne jak nawiewniki i wywiewniki
Instrukcję jak pobrać moją nakładkę możesz znaleźć tutaj.
Działanie programu
Szerzej działanie programu opisuję w swoim filmie. Tutaj jedynie zamieszczę podstawowe informacje dotyczące funkcji wchodzących w skład kalkulatora.
Air terminal calculator settings
Za pomocą tej funkcji możesz dodać lub usunąć preferencję doboru danego terminalu wentylacyjnego. Program zawiera osobne preferencje dla systemu nawiewnego i wywiewnego. Szczegółowy opis wprowadzania włąsnych preferencji znajduje się w filmie poniżej.

Air terminal calculator (supply lub return)
Gdy wprowadzimy własne preferencje będziemy mogli w pełni korzystać z kalkulatora. Wystarczy wybrać interesujące nas urządzenia i wprowadzić przepływ powietrza. Program zwróci nam proponowane urządzenia na bazie naszych ustawień.

Film z działania programu
Kod programu – Revit kalkulator wentylacji mechanicznej
Poniżej znajduje się kod jednej z funkcji (Air terminal calculator(supply)). Po więcej zapraszam na mojego GitHubie, gdzie na bieżąco pojawiać się będą nowe wersje nakładki.
Copyright (C) 2023 Paweł Kińczyk
## Imports
from Autodesk.Revit.UI.Selection import *
from Autodesk.Revit.DB import *
from pyrevit import forms, script
from rpw import revit
import json
import os
doc = revit.doc
uidoc = revit.uidoc
class CustomISelectionFilter(ISelectionFilter):
def __init__(self, nom_categorie):
self.nom_categorie = nom_categorie
def AllowElement(self, e):
if e.Category.Name in self.nom_categorie:
# if self.nom_categorie.Contains(e.Category.Name):
# if e.Category.Name == self.nom_categorie:
return True
else:
return False
def AllowReference(self, ref, point):
return True
def pick_objects(title="Pick", filter=""):
with forms.WarningBar(title=title):
return uidoc.Selection.PickObjects(ObjectType.Element, CustomISelectionFilter(filter))
def open_json(name_of_file="", open_method="r"):
with open(name_of_file, open_method) as file:
data = json.load(file)
return data
# Pick air terminal
try:
air_terminal = pick_objects(
title="Pick supply air terminal", filter="Air Terminals")
except:
forms.alert(title="Program Error",
msg="You didn't pick any air terminal", exitscript=True)
# Write air flow
try:
air_flow = forms.ask_for_string(
prompt="Write air supply", title="Air terminal air flow")
air_flow = int(air_flow)
except:
forms.alert(title="Program Error",
msg="You didn't write anything", exitscript=True)
# Get air terminal sizes
os.chdir(os.path.dirname(os.path.abspath(__file__)))
try:
dqj_list = open_json("air_terminals_supply_settings.json", "r")
except:
forms.alert(title="Program Error",
msg="Didn't find settings", exitscript=True)
# Search for prefer family
correct_dqj = []
for dqj in dqj_list:
dqj_min = int(dqj[0][0:4:])
dqj_max = int(dqj[0][5:9:])
if air_flow > dqj_min and air_flow < dqj_max:
air_flow_avaible = ("{}-{}".format(dqj_min, dqj_max))
new_dqj = tuple([air_flow_avaible])+tuple(dqj[1])
correct_dqj.append(new_dqj)
try:
selected_dqj = forms.SelectFromList.show(
correct_dqj, title="Select air terminal which you want to pick", multiselect=False, button_name='Select DQJ', width=800)
selected_dqj_size = selected_dqj[1]
except:
forms.alert(title="Program Error",
msg="You didn't pick any type", exitscript=True)
transaction = Transaction(doc, 'Air terminal calculator - PYLAB')
transaction.Start()
# Change to new type
try:
for element in air_terminal:
element = doc.GetElement(element)
if isinstance(element, FamilyInstance):
family_instance = element
else:
family_instance = None
types = family_instance.Symbol.GetSimilarTypes()
for i in types:
if selected_dqj_size in Element.Name.GetValue(doc.GetElement(i)):
element.ChangeTypeId(i)
except Exception as e:
forms.alert(title="Program Error", msg=e, exitscript=True)
transaction.Commit()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ż:
- LM Studio – optymalizacja lokalnych LLM. Ustawienia, które naprawdę mają znaczenie
- Gotowe prompty AI dla inżynierów, które realnie przyspieszają pracę
- AI w Thunderbirdzie: automatyzacja maili, odpowiedzi i podsumowań z lokalnym LLM
- Thunderbird w 30 minut – jak ogarnąć chaos w mailach i odzyskać kontrolę
- Automatyczne generowanie kart pomieszczeń w Revit za pomocą Dynamo

