Основная проблема при работе с трубами — их нельзя гнуть так, как их гнут на монтаже. Ревит простить тут можно, его логика понятна, но легче от этого не становится.

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

Можно создать семейство отвода, в котором длина сразу считается в ADSK_Количество, а потом собрать всё в спецификации по нескольким категориям, задав отводу в параметре ADSK_Наименование такое же имя, как и у трубы. Выглядеть все будет хорошо, но для заполнения ADSK_Наименования у трубы нужно запускать макросы из шаблона АДСК. Хотя это уже довольно приемлемый вариант.

Поддайся гипнозу тёплого пола!
Поддайся гипнозу тёплого пола!

Мое предложение

Объединить оба способа: семейство + автоматизация, в моём случае это Динамо, а не макрос.

Как это работает: вы моделируете систему из трубы определённого типа с определённым семейством отвода, так оно обычно ведь и бывает. А потом запускаете скрипт, который заполняет все параметры так, что на выходе вы получаете спецификацию трубопроводов, в которой будет вся длина труб в контуре. И отводы и трубы. В одной спецификации.

У моего метода есть и минус, о нём скажу в конце.

Условия работы скрипта

Я сделал всё на основе шаблона АДСК для ОВ версии 1.2. Взял оттуда семейство отвода «ADSK_ФасоннаяЧасть_ПЭ_Отвод_Гнутый» и немного изменил его, добавил туда вложенное общее семейство в категории «Труба». Оно и падает в спецификацию трубопроводов. Хотите узнать, как такое делается? Приходите ко мне в Телеграм @Vadim_Radi или пишите на почту bimvadim@bk.ru, видеоролик по созданию отводов стоит 250 ₽.

Имя системы нельзя добавить скриптом во вложенное семейство категории «Труба», потому что Динамо этот параметр не видит, поэтому приходится использовать другой параметр, я использовал «ADSK_Группирование».

То же для наименования, я использовал «ADSK_Наименование», и для количество — тут у меня «ADSK_Количество».

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

Если у вас порядок команд будет другой, то ничего страшного
Если у вас порядок команд будет другой, то ничего страшного

1 — в этот параметр будет копироваться имя системы из системного параметра, в итоге одно имя системы будет и у обычных труб, и у отводов, и у вложенной трубы. Если нужен другой параметр, нужно редактировать семейства отвода и вложенной трубы + добавлять параметр проекта для обычных труб, то есть подходит только другой общий параметр.

2 — укажите полное имя семейства, которое вы используете как гнутую трубу.

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

Дублирую картинку и го дальше.

Revit: моделирование теплого пола
Revit: моделирование теплого пола

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

5 — коэффициент, который будет домножаться на длину и обычной трубы, и вложенной, если указать скрипту такую необходимость.

6 — если ваши трубы называются иначе, чем в шаблоне АДСК, то просто вбейте сюда первую часть названия. Наименование соберётся так:

«А» + «Диаметр условный» + «х» + «Толщина стенки трубы», где А — тот текст, что вы вобьёте в поле 6.

Пример: если в поле 6 вбито «Труба полиэтиленовая KREC-PEX DN», диаметра условный трубы 20, внешний диаметр равен 20, а внутренний 16, то запись будет такая: «Труба полиэтиленовая KREC-PEX DN20х2.0»

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

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

8 — если вы хотите добавить запаса ещё и на длину гнутых частей системы, то поставьте переключать в положение True. Запас будет тот же, что в поле 5. Таким образом вы сможете накинуть свой запас на всю систему вообще. По умолчанию выключено.

У гнутых труб можно вручную поменять коэффициент гиба. Сделал это для случаев, когда места мало, а повернуть нужно. Выделяете отвод, в блоке «Зависимости» будет параметр «Коэффициент гиба», по умолчанию сохранил значение из семейства — 5,5. Длина будет пересчитываться с учётом коэффициента.

Меняйте коэффициент, как пожелаете, но помните о монтаже
Меняйте коэффициент, как пожелаете, но помните о монтаже

В файле RVT есть две спецификации:

Revit: моделирование теплого пола
Revit: моделирование теплого пола

«О_ОВ_Трубопроводы_Гнутые» — это стандартная «О_ОВ_Трубопроводы», но с откорректированной сортировкой (убрал сортировку по ADSK_Марка и ADSK_Код изделия). В «В_ОВ_Трубопроводы_Гнутые» сортировка идёт не по имени системы, а по ADSK_Группирование, плюс немного иначе идут столбцы.

Вот так выглядит спецификация В_ОВ (уже после выполнения скрипта):

В вспомогательной спецификации пустые ячейки третьего столбца — это привет от вложенных отводов
В вспомогательной спецификации пустые ячейки третьего столбца — это привет от вложенных отводов

В третьем столбце заполненные поля — это имена труб, которые заполняются формулой, это стандартный приём из шаблона АДСК. Пустые поля — это вложенные трубы в отводах, которые попали в спецификацию, и формулой их заполнить нельзя.

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

Если хотите где-то что-то фильтровать или сортировать по имени системы, то проделать такую ручную работу нужно. Это несложно через спецификацию.

Вот так можно выделить в спецификации вложенные трубы и заполнить у них «Имя системы»
Вот так можно выделить в спецификации вложенные трубы и заполнить у них «Имя системы»

В итоге скрипт назначит всем элементам имена системы в ADSK_Группирование, посчитает обычным трубам длину в ADSK_Количество, и сформирует наименования для обычных и вложенных труб. Сами отводы в спецификации попадать не будут, так как они отфильтровываются по ADSK_Наименование.

ADSK_Наименование в семействе самого отвода и тот же параметр во вложенной трубе — это не связанные параметры, значение из отвода не падает в трубу. В трубу падает текст из параметра семейства «Наименование_Труба».

Итоговая спецификация. Подрезал картинку, чтобы убрать пустые поля
Итоговая спецификация. Подрезал картинку, чтобы убрать пустые поля

На выходе имеем спецификацию по ГОСТ, в которой посчитаны длины всех элементов теплого пола: и обычная труба, и та труба, что идёт на гнутые участки. Всё отсортировано по имени системы и сидит в одной спецификации.

Важно!

Параметр «ADSK_Наименование» в трубе связан с параметром «Наименование_Труба» в отводе. Из-за этого блокируется работа макроса CopyParameters из шаблона ОВ, он выдаёт вот такую ошибку:

Ошибка говорит, что какой-то параметр только для чтения — это ADSK_Наименование в отводе
Ошибка говорит, что какой-то параметр только для чтения — это ADSK_Наименование в отводе

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

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

Идеальный вариант — делать тёплые полы в отдельном файле Ревита. Ну да, плохо, а что поделать? Правки в Конституцию этого не запрещают.

Либо другой вариант — собирать длину трубы в спецификации по нескольким категориям, в которой будут обычные трубы и гнутые фитинги-отводы. У фитингов длина будет считаться через ADSK_Количество внутри семейства, а у остальной трубы заполняться макросом или скриптом. При этом нужно будет в фитингах в ADSK_Наименование дать каждому диаметру точно такое же имя, как и то, что собирается формулой для обычных труб. Тогда Ревит сможет всё собрать в одном месте и просуммировать длину.

Подобный скрипт тоже могу написать, пишите в комменты, если интересно.

Демонстрация работы

Записал короткий ролик, как всё это выглядит в проекте.

Подписаться на обновления блога

в Телеграм-канале «Блог Муратова про Revit MEP»

Отблагодарить автора

Я много времени уделяю блогу. Теперь можно отблагодарить меня. Это не обязательно, но такой подарок даст сил продолжать.

Ссылки на скачивание

Скрипт, семейство и пример проекта на Яндекс.Диске