Блог Муратова про Revit MEP
7.57K subscribers
1.6K photos
96 videos
17 files
1.72K links
Вадим @Vadim_Rafi — раньше ОВэшник, теперь BIM-менеджер и препод. Блог про Ревит — muratovbim.pro

Чат для вопросов: @revitask

— Создаю семейства для Ревита.
— Обучаю моделировать разделы ОВ, ВК, ТМ.

Не размещаю рекламу.
Download Telegram
Купить такой же мерч, чтобы на улице свои узнавали: https://muratovbim.vsemaykishop.ru/
Добавил новое видео про работу с врезками в курс по фитингам трубопроводов

В 10-минутном видео рассказываю, как формулами получить диаметр магистрали, в которую врезаетесь. Мне это помогло сделать семейства седловых врезок такими, что пользователю не придётся что-то править руками, он сможет сразу врезать трубы друг в друга, диаметры построются и будут меняться корректно, если будут из допустимого диапазона значений.

Кто купил курс ранее, можете смотреть, для вас обновление бесплатно. Кому интересно, покупайте по этой ссылке: https://stepik.org/a/106986
Ну чё, погнали!
Обновления дистрибутивов

Ревит 2025.2 — поставил, проверил, всё работает.

Автокад 2022.15
Автокад 2025.1

Все ссылки здесь: https://muratovbim.pro/blog/revit-ustanovochnye-fajly/
Речь в опросе про вот такие насосы.
Раньше здесь было производство, а теперь — фотостудия и остатки былых систем.
Кому надо вот такие пожарные штуки, забирайте. Разработка настолько элементарная, что даже статью писать не хочу, тут просто нечего рассказывать, всё очень обычно.

Скачать с бимлиба
Трубчатый радиатор своими руками недорого
Над каким проектом в Ревите вы работаете прямо сейчас?

У меня отключили свет, так что я вынужден гулять. Ну хоть вы там работаете, ВВП страны поднимаете. Спасибо вам за это.
Нас тут 6000 уже, это хорошо. Давайте стрим сделаем

Был запрос на работу с изоляцией — давайте посмотрим, как это можно сделать в Ревите с помощью Динамо и Ревит АПИ.

Снова будут муки Петона и втыкания в VS Code, но зато получится круто, если получится. Мне нужно подготовить обложку для эфира, так что пока ставьте реакты, придёте или будет в записи смотреть.

Начало минут через 10-15. Скину сюда ссылку.

❤️ — приду на онлайн, буду смотреть
🔥 — крутяк, но посмотрю в записи, щас дела
🤝 — это мне не интересно, не мой профиль
Код из стрима, выкладываю в этот пост, чтобы вы могли скопировать в Динамо в более старых Ревитах:

import clr

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

clr.AddReference('RevitServices')
from RevitServices.Persistence import DocumentManager as DM

from RevitServices.Transactions import TransactionManager as TM

from System import Guid

doc = DM.Instance.CurrentDBDocument

clr.AddReference('RevitNodes')
import Revit

def getInsulationHost(insulation): # получаем основу с изоляции

host_el_Id = insulation.HostElementId # получили айди хоста изоляции
host_el = doc.GetElement(host_el_Id) # получаем элемент по его айди

return host_el

zapas = IN[0]
param_area_fittings = IN[1]
param_area_set = IN[2]

duct_insulation = []

duct_insulation.extend(FilteredElementCollector(doc).OfCategory(BuiltInCategory.OST_DuctInsulations).WhereElementIsNotElementType().ToElements()) # получаем всю изоляцию из активного проекта

duct_ins_host = []

for di in duct_insulation:
duct_ins_host.append(getInsulationHost(di))

TM.Instance.EnsureInTransaction(doc) # Открытие транзакции

for duct_insulation_instance, host in zip(duct_insulation, duct_ins_host):

if isinstance(host, MEPCurve):
di_area = duct_insulation_instance.get_Parameter(BuiltInParameter.RBS_CURVE_SURFACE_AREA).AsDouble() * 0.3048 * 0.3048 * zapas
duct_insulation_instance.LookupParameter(param_area_set).Set(di_area)

elif host.Category.BuiltInCategory == BuiltInCategory.OST_DuctFitting:
if host.LookupParameter(param_area_fittings):
di_area_fitting = host.LookupParameter(param_area_fittings).AsDouble() * 0.3048 * 0.3048 * zapas
duct_insulation_instance.LookupParameter(param_area_set).Set(di_area_fitting)

elif host.Category.BuiltInCategory == BuiltInCategory.OST_DuctAccessory:
host_connectors = host.MEPModel.ConnectorManager.Connectors
connector_list = list(host_connectors)
if len(connector_list) == 2:

first_con_origin = connector_list[0].Origin
second_con_origin = connector_list[1].Origin
con_distance = first_con_origin.DistanceTo(second_con_origin) * 304.8

if connector_list[0].Shape == ConnectorProfileType.Rectangular:
con_height = connector_list[0].Height * 0.3048
con_width = connector_list[0].Width * 0.3048

con_perimeter = 2 * (con_height + con_width)

section_area = con_perimeter * con_distance / 1000

duct_insulation_instance.LookupParameter(param_area_set).Set(section_area)

elif connector_list[0].Shape == ConnectorProfileType.Round:
con_diameter = connector_list[0].Radius * 0.3048 * 2
con_perimeter = 3.14159 * con_diameter
section_area = con_perimeter * con_distance / 1000

duct_insulation_instance.LookupParameter(param_area_set).Set(section_area)

TM.Instance.TransactionTaskDone() # Закрытие транзакции

OUT = duct_insulation, duct_ins_host
Выкладываю скрипт в Динамо, он для Ревита 2023.

Если нужно то же самое в Ревитах помладше, то создайте новый скрипт в нужной версии Динамо, воссоздайте ноды, как в этом скрипте, и вставьте этот код в Питон скрипт.

Он должен работать с системами воздуховодов в шаблонах АДСК. С трубами работать тоже будет, но обрабатывать будет только прямые участки, для труб код нужно дополнять.

Условия работы в системе вентиляции:

1. Обрабатываются прямые и гибкие воздуховоды, фитинги воздуховодов и арматура воздуховодов.

2. Фитинги воздуховодов обрабатываются через параметр экземпляра семейства ADSK_Размер_Площадь. В нём должна внутри семейства считаться площадь детали. Скрипт просто скопирует её, также, как это делает сейчас апдейтер в шаблоне.

3. Чем код отличается, так это возможность обрабатывать канальную арматуру воздуховодов. То есть только ту арматуру, у которой две точки подключения, ни меньше, ни больше.

Скрипт берёт размер соединителя, берёт расстояние между соединителя, получаем периметр по размеру соединителя и длину между соединителями. Перемножаем — получаем упрощённую площадь арматуры.

Например, в сети стоит клапан длиной 100 мм, сечением 300х200 мм. Периметр будет 2 * (300 + 200) = 1 метр. Длина между соединителями — 0.1 м. Произведение даём нам площадь 0.1 м², её пишем в изоляцию. Само собой, что у реального изделия форма будет отличаться от просто куска воздуховода, но у тех же фильтров и клапанов, если не брать в расчёт привод и площадку под него, форма довольна близка к форме обычного воздуховода.

В итоге получаем хоть какой-то приблизительный расчёт, это лучше, чем ничего.

Также есть возможность накинуть запас, можно им тоже поиграться, чтобы подстраховать свои расчёты площади.

Кому пригодится — приятной работы. Если будут ошибки, то сорян, не повезло. Отдельное спасибо Паше Алтынникову 🫶 за напутствия в питонировании этого скрипта.