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

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

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

Не размещаю рекламу.
加入频道
Media is too big
VIEW IN 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