Купить такой же мерч, чтобы на улице свои узнавали: https://muratovbim.vsemaykishop.ru/
Добавил новое видео про работу с врезками в курс по фитингам трубопроводов
В 10-минутном видео рассказываю, как формулами получить диаметр магистрали, в которую врезаетесь. Мне это помогло сделать семейства седловых врезок такими, что пользователю не придётся что-то править руками, он сможет сразу врезать трубы друг в друга, диаметры построются и будут меняться корректно, если будут из допустимого диапазона значений.
Кто купил курс ранее, можете смотреть, для вас обновление бесплатно. Кому интересно, покупайте по этой ссылке: https://stepik.org/a/106986
В 10-минутном видео рассказываю, как формулами получить диаметр магистрали, в которую врезаетесь. Мне это помогло сделать семейства седловых врезок такими, что пользователю не придётся что-то править руками, он сможет сразу врезать трубы друг в друга, диаметры построются и будут меняться корректно, если будут из допустимого диапазона значений.
Кто купил курс ранее, можете смотреть, для вас обновление бесплатно. Кому интересно, покупайте по этой ссылке: https://stepik.org/a/106986
Обновления дистрибутивов
Ревит 2025.2 — поставил, проверил, всё работает.
Автокад 2022.15
Автокад 2025.1
Все ссылки здесь: https://muratovbim.pro/blog/revit-ustanovochnye-fajly/
Ревит 2025.2 — поставил, проверил, всё работает.
Автокад 2022.15
Автокад 2025.1
Все ссылки здесь: https://muratovbim.pro/blog/revit-ustanovochnye-fajly/
Как вы размещаете в модели вертикальные насосы, у которых соосны вход и выход? Как вам удобнее с ними работать? Следующим постом дам картинку для понимания.
Anonymous Poll
19%
Размещаю на замоделированном заранее трубопроводе, добавляю фланцы и готово
36%
Размещаю на плане этажа (на уровне/ на фундаменте) и далее уже из насоса или к насосу веду трубы
20%
Делаю и так, и так, мне без разницы, одинаково удобно
26%
Не работаю с насосами / Посмотреть ответы
Раньше здесь было производство, а теперь — фотостудия и остатки былых систем.
Кому надо вот такие пожарные штуки, забирайте. Разработка настолько элементарная, что даже статью писать не хочу, тут просто нечего рассказывать, всё очень обычно.
Скачать с бимлиба
Скачать с бимлиба
Нас тут 6000 уже, это хорошо. Давайте стрим сделаем
Был запрос на работу с изоляцией — давайте посмотрим, как это можно сделать в Ревите с помощью Динамо и Ревит АПИ.
Снова будут муки Петона и втыкания в VS Code, но зато получится круто, если получится. Мне нужно подготовить обложку для эфира, так что пока ставьте реакты, придёте или будет в записи смотреть.
Начало минут через 10-15. Скину сюда ссылку.
❤️ — приду на онлайн, буду смотреть
🔥 — крутяк, но посмотрю в записи, щас дела
🤝 — это мне не интересно, не мой профиль
Был запрос на работу с изоляцией — давайте посмотрим, как это можно сделать в Ревите с помощью Динамо и Ревит АПИ.
Снова будут муки Петона и втыкания в 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 м², её пишем в изоляцию. Само собой, что у реального изделия форма будет отличаться от просто куска воздуховода, но у тех же фильтров и клапанов, если не брать в расчёт привод и площадку под него, форма довольна близка к форме обычного воздуховода.
В итоге получаем хоть какой-то приблизительный расчёт, это лучше, чем ничего.
Также есть возможность накинуть запас, можно им тоже поиграться, чтобы подстраховать свои расчёты площади.
Кому пригодится — приятной работы. Если будут ошибки, то сорян, не повезло. Отдельное спасибо Паше Алтынникову 🫶 за напутствия в питонировании этого скрипта.
Если нужно то же самое в Ревитах помладше, то создайте новый скрипт в нужной версии Динамо, воссоздайте ноды, как в этом скрипте, и вставьте этот код в Питон скрипт.
Он должен работать с системами воздуховодов в шаблонах АДСК. С трубами работать тоже будет, но обрабатывать будет только прямые участки, для труб код нужно дополнять.
Условия работы в системе вентиляции:
1. Обрабатываются прямые и гибкие воздуховоды, фитинги воздуховодов и арматура воздуховодов.
2. Фитинги воздуховодов обрабатываются через параметр экземпляра семейства ADSK_Размер_Площадь. В нём должна внутри семейства считаться площадь детали. Скрипт просто скопирует её, также, как это делает сейчас апдейтер в шаблоне.
3. Чем код отличается, так это возможность обрабатывать канальную арматуру воздуховодов. То есть только ту арматуру, у которой две точки подключения, ни меньше, ни больше.
Скрипт берёт размер соединителя, берёт расстояние между соединителя, получаем периметр по размеру соединителя и длину между соединителями. Перемножаем — получаем упрощённую площадь арматуры.
Например, в сети стоит клапан длиной 100 мм, сечением 300х200 мм. Периметр будет 2 * (300 + 200) = 1 метр. Длина между соединителями — 0.1 м. Произведение даём нам площадь 0.1 м², её пишем в изоляцию. Само собой, что у реального изделия форма будет отличаться от просто куска воздуховода, но у тех же фильтров и клапанов, если не брать в расчёт привод и площадку под него, форма довольна близка к форме обычного воздуховода.
В итоге получаем хоть какой-то приблизительный расчёт, это лучше, чем ничего.
Также есть возможность накинуть запас, можно им тоже поиграться, чтобы подстраховать свои расчёты площади.
Кому пригодится — приятной работы. Если будут ошибки, то сорян, не повезло. Отдельное спасибо Паше Алтынникову 🫶 за напутствия в питонировании этого скрипта.