Как параметризировать изменяемые размеры в семействе Revit?
В программе Revit мы занимаемся объектно-ориентированным проектированием, то есть моделируем элементы, каждый из которых является цифровым аналогом реального объекта со своими свойствами, поведением и правилами. Геометрия проектных элементов ограничена материалами, производственными особенностями, экономикой, процессами монтажа и транспортировки, поэтому большинство объектов имеет ограничения, которые важно закладывать в процессе моделирования.
При работе с данными очень важно уметь управлять этими ограничениями, не теряя логики моделируемого объекта, чтобы обеспечить корректность наших данных.
Поэтому здесь мы поговорим о параметрах длины, которые закладываются при моделировании семейств. Подробно рассмотрим варианты управления параметром для пользователя: от полной свободы до строго ограниченных значений.
Несколько примеров, которые мы сегодня рассмотрим:
- пользователю нужно менять значение параметра с помощью элементов управления - "ручек"
- пользователю нужно ограничить возможность вводимых значений, допустив значения только с определенным шагом
- пользователю нужно ввести ограничения по диапазону значений, которые может принимать параметр
- параметр может принимать значения только из определенного списка
Немного теории
Все числовые значения, которые мы можем задать параметрам можно представить в виде числовых последовательностей.
Если отойти от темы BIM, то в математике существуют множество типов числовых последовательностей. Есть несколько классификаций, к примеру:
- дискретные - могут принимать только определенные значения в диапазоне, к примеру все целые числа или все числа, кратные определенному значению
Тип данных мы задаем во время создания параметра. Сейчас мы рассматриваем только величины типа данных "Длина".
И если копнуть в тело программы, то длина - это вещественное число, которое в пользовательском пространстве представляется в наших единицах проекта.
И если данную логику перевести в строительные объекты:
- длина стены может принимать значения из непрерывной последовательности
- габариты железобетонной плиты могут принимать значения из дискретной последовательности (кратные 10, 50 или любому значению, которое принято на основе шага арматурной сетки)
- габариты отверстий в железобетонной плите под инженерные сети могут принимать значения из категориальной последовательности (к примеру, 100, 150, 250, 400)
Теперь переходим к моделированию. Как же все это сделать?
Создание ручек в семействе
Сначала создадим семейство, это может быть любая категория геометрии, соответственно, выбираем тот шаблон, который вам нужен.
Для того, чтобы ручками можно было изменить параметр длины, нужно соблюсти несколько условий:
- размер, который отвечает за параметр, должен быть привязан к опорным плоскостям со связью, подробнее об этом можно будет прочитать в отдельной статье. Главное - чтобы параметр "Связь" не имел значение "Нет". В ручках мы двигаем не геометрию, а опорные плоскости.
Семейство можно подгрузить в проект и убедиться в его работоспособности. Наличие ручек не исключает возможности ввода значений с клавиатуры.
Сейчас мы имеем параметр, значения которого составляют непрерывную последовательность. Идем дальше
Создание параметра, кратного определенному значению
Теперь реализуем чуть более сложную логику:
За длину отвечает два параметра. Одно значение - пользовательский ввод, другое - фактическое, округленное. Пользовательский ввод - управляющий параметр, на основе которого происходит расчет. Результат расчета - фактический размер в модели.
Такую логику мы реализуем по причине того, что в ревите нет возможности ввести значение и в этом же параметре его округлить
Пользовательский параметр у нас уже есть, его переименовываем в "Ширина фактическая". Получаем то, что показано на скринах ниже.
Дальше нам нужно добавить параметр, который будет отвечать за результат округления. Для этого создаю параметры "Шаг" и "Ширина_пользовательская", у обоих параметров тип данных - длина. Обоим параметрам присваиваем любые значения, чтобы они не были нулевыми.
И фактическая, и пользовательская ширина должны быть параметрами экземпляра! Иначе логика не сработает. А шаг может быть как типом, так и экземпляром
Прописываем формулу в параметре "Ширина_фактическая", которая округляет значение до кратного нашему шагу. Формула выглядит следующим образом:
roundup(Ширина_пользовательская / Шаг) * Шаг
Далее нам нужно реализовать небольшой трюк, связав наши параметры с геометрией.
Необязательный пункт: создаю подкатегорию и задаю ей иные настройки видимости, чтобы визуально в редакторе семейств они отличались от других опорных плоскостей. Подробную инструкцию по работе с опорными элементами можно будет прочитать в следующей статье. Вот цвета, которыми я буду показывать параметры:
За периметром объекта строим две вспомогательные линии, перпендикулярные ширине. Панель "Создание" --> вкладка "Основа" --> инструмент "Вспомогательная линия".
Дальше я скрываю лишнее и показываю только те объекты, с которыми работаю
Переопределяем связи опорных элементов:
- теперь "фактические" опорные плоскости не должны иметь связи, они расчетные, их значение подбирается на основе формулы
- а "пользовательские" вспомогательные линии должны иметь сильные или слабые связи, именно их будет двигать пользователь за «ручки» в модели
Перекрестно образмериваю опорные плоскости и вспомогательные линии. Размерам присваиваю параметр "Ширина_пользовательская".
Загружаю в проект и смотрю на результат. Ручки можно сдвинуть на любое расстояние, а вот фактический размер будет кратен нашему шагу.
В этом шаге мы получили семейство, значения которого составляют дискретную последовательность из чисел, кратных 150 мм.
Ограничение диапазона значений параметра
Ограничить значения параметра мы можем искусственно смоделированной ошибкой. Это будет элемент геометрии, который будет сообщать пользователю о необходимости внесения изменений.
В качестве ошибки инженеры часто используют красный шар, в других дисциплинах я чаще встречала текстовые обозначения ошибок. От типа объекта логика не меняется, сейчас мы будем использовать текст модели.
- При «ожидаемых» значениях ошибка никак себя не проявляет
- При некорректных значениях ошибка появляется в модели
Создаем элемент геометрии. Вкладка «Создание» --> панель «Модель» --> инструмент «Текст модели». Я создаю с текстом «Семейство некорректно», содержание текста, кстати, тоже можно параметризировать.
Далее при выделении текста модели в панели свойств параметризирую его видимость. Создаю параметр, который называю «Ошибка», он должен принадлежать экземпляру.
Далее прописываю формулу в значении параметра «Ошибка»:
Ширина_фактическая > 1000 мм
То есть, ошибка видна только в случае, если значение превышает 1000 мм. Есть варианты посложнее, к примеру:
or(and(Ширина_фактическая > 500 мм, Ширина_фактическая < 1000 мм), Ширина_фактическая > 2500 мм)
Ошибка видна, если значение попадает в диапазон от 500 до 1000 и превышает 2500. То есть с помощью формул можно прописать любой диапазон, главное – связать это с логикой моделирования.
Подгружаю в модель и проверяю значения:
Обращаем внимание на параметр «Ширина_фактическая», ошибка появляется только при значениях от 500 до 1000 и выше 2500, все как в формуле. Тут мы получили значения из ограниченной дискретной последовательности.
Значения параметра только из списка
Самым лучшим примером будет определение типоразмеров в семействе, в которых вы прописываете значения для каждого типа отдельно. Но возможны и другие варианты, к примеру, таблицы выбора, которые мы рассмотрим в отельной статье или прописывание формул. Сейчас мы рассматриваем управление только формулами.
К примеру, у параметра возможны только значения из списка (400, 700, 1500). Мы можем прописать такую формулу, при которой происходит подбор фактического размера на основе пользовательского. Аналогично с методом создания размера с шагом.
Прописываем значение параметра «Ширина_фактическая»:
if(Ширина_пользовательская < 400 мм, 400 мм, if(Ширина_пользовательская < 700 мм, 700 мм, 1500 мм))
Данный способ удобен, если происходит изменение более чем одного параметра, подбор осуществляется в проекте и совмещение всех возможных значений в типоразмеры создаст огромный список. Из минусов – длинная формула, которую стоит прописать в отдельном окне, а потом вставлять в ревит.
Тут мы получили значение параметра из категориальной последовательности.
Спасибо всем, кто дочитал до конца! Надеюсь, вы нашли для себя что-то полезное в этой статье. Если у вас возникли вопросы по теме, обращайтесь ко мне в Telegram.
Больше информации по теме информационного моделирования в моем тгк "BIM журнал".