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

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

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

Не размещаю рекламу.
加入频道
🔥 Autodesk Revit. Разработка инженерного раздела ОВ ❄️
новый видеокурс в онлайн-школе BIM2B!
Классический курс Вадима Муратова в новом формате для тех, кто не может учиться онлайн в рабочее время.

Внимание! Курс только по разделу ОВ!


Внутри 20 часов видео, разделённых на 135 коротких урока.
Вы научитесь создавать информационную модель систем отопления, вентиляции и кондиционирования, оформлять чертежи и получать спецификацию.
Полная программа на странице курса.

💲 цена - 15 000 руб.
Часть 2.

Чтобы инициировать подбор автоматически, нужно включить галочку в параметра. До этого обороты указываются вручную. Kv для подбора посчитается сам, если перепад давления больше нуля. Ну а дальше формулами подбираю ближайшее больше значение пропускной способности у клапана. Формула определяет количество оборотов, по оборотам уже подбирается пропускная способность, а по ней — фактические потери давления на клапане.

В Ревите ограниченный набор типов параметров, поэтому приходится обходиться той беднотой, что есть. Для оборотов, так как это фиксированный список значений, выбираю выпадающий список. Числовые параметры делать — это зашквар для лохов. Если параметров до 10, то надо делать выпадающие списки. Если больше — можно числа, потому что выпадающий список будет уже слишком длинным. Тут уже удобно сделать не получится. В идеале это был бы ползунок с заданным шагом, но у нас такого нет в интерфейсе.

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

Делайте красиво и удобно. Говно и без вас кто-нибудь сделает.
This media is not supported in your browser
VIEW IN TELEGRAM
Показываю, как работает клапан с радиаторами.
Сегодня хочу сделать прямой эфир.

Но есть вилка тем. С одной стороны, надо закончить скрипт для позиций в спецификации.

С другой стороны, хочу сделать розетки, но круче, чем делал в своих старых эфирах. Дизайнерские такие сделать, чтобы посты заполнялись, чтобы обозначение формировалось картинкой, чтобы можно было поворачивать на 90 градусов. Мои старые так не вертятся. Пост повернуть можно, но наполнение-то останется повернутым. И не нравится, что там полая геометрия видна на 1 посте.

Так что хочется сделать круто и с нуля. Что вам интереснее было бы? Скрипт закончим точно, может, просто не сегодня. Тут уже голосование решит.
19:30 МСК, 📱 Твич

https://www.twitch.tv/muratovbim

Ну хорошо, давайте закончим автоматизацию. Надеюсь, что успею за сегодня закончить, но с этим Питоном ни в чём уверенным быть нельзя. А потом будем делать розетки в следующих эфирах. Там у меня ещё кое-какие планы есть на эфиры, там вообще пушка будет. Но это попозже чутка.

Глядишь, сделаю крутые розетки и вообще на продажу выставлю, покажу дизайнерам кузькину меп. Ну или обосрусь и не получится ничего. Тоже опыт.

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

Пойду спину мазью натру, таблетки выпью, а то скоро прямой эфир. Обнял-приподнял, покряхтел.

Сегодня более быстрый инет подключил, так что как-нибудь попробуем рестрим делать сразу на две площадки, например в Твич и Ютуб или Твич и Телегу.
Please open Telegram to view this post
VIEW IN TELEGRAM
Рассказываю итоги вчерашнего эфира

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

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

Кароч. Я решил не в онлайн покрутить варианты, ведь если не получается провести кодификацию по категориям, то можно спуститься ещё ниже и сделать кодификацию каждого элемента, а уже потом по ней сортировать.

Но для этого недостаточно каждому элементу присвоить свой код, это очень просто, но фактически сработает так же, как работает галочка «Для каждого экземпляра». А мне нужно сгенерировать одинаковый код для каждой позиции с одинаковыми наименованием и маркой. Ну как минимум эти два параметра.

И тут случился затык. В той модели, которую взял для работы, у многих позиций тупо нет параметров или они есть, но не заполнены. Соответственно, я не могу обработать такие элементы. Так что решил бросить эту затею и больше не тратить времени.

Тем не менее, что я вам предлагаю. Я уже выложил для донов первый ролик этой серии. Второй ролик тоже выложу, но нужно понимать, что результата там нет. Разве что посмотреть, как тыкаюсь с Питоном.

При этом вот тут я выложу код Питона. Я его немного доработал, сделал «поумнее». Хе-хе, настоящие программисты назовут это полным говном, но настоящих программистов тут мало, пусть себе говорят. У них всё равно нет того, что есть у меня — приятно булькающий в животе зелёный чай с жасмином и сэндвичем с какой-то невкусной хернёй.

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

doc = DM.Instance.CurrentDBDocument

def subcomponents(element):
all_subs = []
if hasattr(element, "GetSubComponentIds"):
sub_Id_list = element.GetSubComponentIds()

for sub_Id in sub_Id_list:
sub = doc.GetElement(sub_Id)
if sub.GetSubComponentIds():
all_subs.append(sub)
all_subs.append(subcomponents(sub))
else:
all_subs.append(sub)
return all_subs

mep_systems = UnwrapElement(IN[0])
system_label_parameter = IN[1]

elements_from_system = []

for system in mep_systems:
system_element_list = []
if system.Category.Id.IntegerValue == -2008015: # Системы воздуховодов
system_elements = system.DuctNetwork
elif system.Category.Id.IntegerValue == -2008043: # Трубопроводные системы
system_element_list = system.PipingNetwork
pass

for element in system_elements:
system_name = element.get_Parameter(BuiltInParameter.RBS_SYSTEM_NAME_PARAM).AsString()
system_element_list.append(element)
element_subcomponents = subcomponents(element)

TM.Instance.EnsureInTransaction(doc) # Открытие транзакции
element.LookupParameter(system_label_parameter).Set(system_name)
for sub in element_subcomponents:
sub.LookupParameter(system_label_parameter).Set(system_name)

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

system_element_list.extend(element_subcomponents)

elements_from_system.append(system_element_list)

OUT = elements_from_system


Что делает этот код. Он получает все элементы из систем вентиляции и трубопроводов. Проверял на вентиляции, там работает. При этом получает не только элементы систем, то и общие вложенные со всех уровней.

Далее копирует имя системы в указанный пользователем параметр и для элементов систем и для их общих вложенных.

На выходе будет список всех элементов из системы, как обычных, так и общих вложенных. И дальше уже делайте с ними, чего хотите. Код можно вставить в обычный Питон-нод и подавать на два входа список
Помогают ли вам в работе вложенные семейства радиаторной арматуры в отопительные приборы? Речь про термоклапаны, термоголовки, Н-клапаны, мультифлексы и так далее без привязки к конкретному бренду.
Anonymous Poll
41%
Да, и для бокового, и для нижнего подключения это полезно и помогает
1%
Да, но полезно только для бокового подключения
3%
Да, но полезно только для нижнего подключения
10%
Нет, всегда мешает, лучше делать без вложенной арматуры или дать возможность её отключать
45%
Посмотреть ответы
А ты за что?
#BIMdigest 110 — Интеграции в AEC
В этом выпуске:
— Autodesk углубляет интеграцию с ArcGIS;
— Archicad 28 - крутая работа с облаками точек и не только;
— скрипт Dynamo, использующий Stable Diffusion для генерации текстур Revit по текстовому промпту;
❄️ Autodesk Revit. Разработка инженерного раздела ОВ ❄️ — новый видеокурс в онлайн-школе BIM2B;
— что делать, если не удаётся найти элемент модели в спецификации;
— Enscape для совещаний с заказчиком;
— обновление Enscape 4.2;
— интервью с создателем That Open Company (ранее IFC.js).
Forwarded from Mikhail Nikolaev
Из твоего тут фитинги для сшитика, нержа, колбы гейзер премьер)
Столкнулся с интерполяцией значений в Ревите

Делаю я ручной балансировочник, у него есть обороты рукоятки. Что-то похожее уже делал для Ридановской балансировочной арматуры, но там задача была проще: был стандартный список значений от 0 до 9.9, надо было выбрать ближайшее большее значение по фактической пропускной способности.

А тут делаю Вальтековский балансир, и у него есть таблица с шагом 5, от 0 до 99. И вот промежуточные значения вычисляются интерполяцией, шаг — 1. То есть по сути тут 99 вариантов для каждого диаметра.

Сначала подумал, что смогу быстро сделать интерполяцию для всех значений в Экселе. Но ничего не вышло, функции Экселя выдавали какую-то дичь, я не понял, почему. Времени и желания разбираться с Экселем не было, а вбивать в него обычные формулы — долго очень, я на такое не подписывался.

Но потом подумал: ну хорошо, сделать в Экселе слишком трудозатратно, а что, если сделать тот же расчёт, но в Ревите?

Для этого мне нужны:
— значение фактической пропускной способности, это легко, параметр расхода есть, требуемый перепад пользователь тоже в параметр вобьёт;

— значение табличной пропускной способности снизу и сверху. То есть, если фактическая пропускная способность 2,28, то надо взять из таблицы ближайшее большее и меньшее значения, а также обороты для них. Для примера пусть это будут 2,21 и 2,37, а обороты 30 и 35;

— значения оборотов снизу и сверху, это уже упомянул выше.

В результате можно простой арифметикой посчитать значение для оборотов: 30 + (2,28 - 2,21) × (35 - 30) / (2,37 - 2,21) = 32.1875, или 32. Получаю обороты искомые. Правда, надо уточнить, тут округлять вверх или можно вниз до целых.

Вся загвоздка в том, как получить значения снизу и сверху. На самом деле, это делается относительно легко. Нам нужно сделать таблицу выбора на все значения для каждого диаметра: пропускная способность — обороты. А далее формулой для таблицы выбора получать значения пропускной способности для каждого табличного значения оборотов. И обороты указывать не из переменной, а прямо числами: 1, 2, 3, ...

В итоге мы можем обычным сравнением получить значение сверху. Если при оборотах 1 табличная пропускная способность больше, чем фактическая, то у нас 1 оборот. Если меньше, то идём далее на обороты 2. И вот так перебором по порядку получаем значение сверху.

Для значения снизу нужно идти в обратном порядке, от максимальных оборотов до минимальных. Если при оборотах 99 табличное значение меньше фактического, то обороты 99. Если нет, то спускаемся ниже на 95, 90 и так далее. Как только условие выполнилось — мы получили наше значение снизу.

Ну а дальше арифметика. В создании таких длинных формул отлично помогает Эксель.
This media is not supported in your browser
VIEW IN TELEGRAM
Просто ветерок твой вентилятор колышет
🙂 Привет, ревитчики!

Сегодня продолжение цикла про настройку ВС Кода для программирования на Питоне под Ревит.

В новой статье Костя расскажет, как настроить подсказки для кода — так называемые заглушки. Они помогают программисту вводить команды и смотреть на доступные свойства и методы у элемента. Это удобно, так как иногда команды реально длинные, ещё и пишется всё слитно на английском языке, часто можно ошибиться. Заглушки сглаживают эти негативные эффекты.

Ссылка на материал: https://muratovbim.pro/blog/revit-api-podskazki-dlya-raboty-s-kodom/

Спасибо за репост в профильные чаты и коллегам-ревитчикам 🫶

Блог | Магазин | Курсы | Мерч

Чат в Телеге для вопросов 📱

Сообщество VK 📱 | Эфиры на Твиче 📱

Задонатить в Телеге 💸
Please open Telegram to view this post
VIEW IN TELEGRAM
Дяденька, у вас ширинка расстегнулась.