18 февраля 2019 г.

Формулы и условные выражения Revit

Автор: Dmitry Chubrik 

На прошлой неделе я читал курс "BIM мастер 2.0". К курсу прилагалась методичка, и я решил опубликовать ее часть, посвященную формулам в Revit. Что называется, "как есть". Пользуйтесь. 

Синтаксис формул 
Формулы Revit поддерживают стандартные арифметические операции и тригонометрические функции. 
В формулах используются следующие операторы и функции: 
Сложение: + 
Вычитание: - 
Умножение: * 
Деление: / 
Возведение в степень: ^ (Пример: 3^2 – это 3 в квадрате, т.е. 3 в степени 2) 

Все следующие функции имеют стандартную запись: функция (значение) 
Например: sin (Угол) – синус параметра «Угол». 
Логарифмирование: log 
Извлечение квадратного корня: sqrt 
Синус: sin 
Косинус: cos 
Тангенс: tan 
Арксинус: asin 
Арккосинус: acos 
Арктангенс: atan 
10 в степени x: exp(x) 
Модуль числа: abs 
Число Pi: pi() 

Имена параметров в формулах чувствительны к регистру. Если имя параметра начинается с заглавной буквы, например "Ширина", то формулах его следует вводить именно начиная с заглавной буквы. 
Примеры использования функций в формулах: 
Длина = Высота + Ширина + sqrt(Высота * Ширина) 
Длина = Длина1 + Длина2 
Площадь = Длина * Ширина 
Площадь Круга = pi() * Радиус^2 
Объем = Длина * Ширина * Высота 
Ширина = 100 мм * cos(Угол) 
Параметр = 2 * abs(a) + abs(b/2) 
Число элементов массива = Длина / Шаг 


Если нужно заблокировать от изменения из проекта значение какого-либо параметра, его значение пишут в формуле (для текста значение пишут в кавычках): 


Для значений в формулах можно использовать функцию округления. 
round(x) Функция round возвращает значение, округленное до ближайшего целого числа. При этом не учитывается направление округления. round(3.1) = 3, round(3,5) = 4 
roundup(x) Функция roundup возвращает значение, округленное до максимального целого значения, большего или равного х. roundup(3) = 3, roundup(3.1) = 4 
rounddown(x) Функция rounddown возвращает значение, округленное до минимального встроенного значения, меньшего или равного х. rounddown(3) = 3, rounddown(3.7) = 3

Округление работает только с числами без размерностей, т.е. не работает с параметрами длины, площади и т.п. 
Чтобы округление работало, нужно в записи выражения с округлением сначала убрать единицы (делением на 1, единицы Revit подставит сам), а потом (после функции округления) вернуть единицы (умножением на 1). 
Примеры работы формул по округлению: 


Площадь 01 - простое округление 
Площадь 02 - округление в меньшую сторону 
Площадь 03 - настроено округление до десятых в большую сторону. 

Чтобы округлять до конкретного числа, нужно сначала поделить значение на это число (в данном примере – поделить на 0,1), а потом, после округления – умножить на это число.

Синтаксис условных выражений 
В Revit можно использовать условные выражения. 
Структура условного выражения: IF (<условие>, <значение, если выполняется>, <значение, если не выполняется>) 
Пример: if (Площадь > 1 м², 500 мм, 300 мм) 


Пример читается так: Если Площадь больше 1м², то Отступ равен 500 мм, а если меньше – то Отступ равен 300 мм 

При использовании параметры типа "Да/Нет" форма записи условия укорочена: 


В условии можно использовать следующие операторы сравнения: "<", ">" и "=". Также поддерживается использование логических операторов: "AND", "OR" и "NOT". 
На текущий момент не поддерживаются операторы "<=" и ">=". Однако, эти операторы может заменить логический оператор "NOT". Например, неравенство a<=b можно записать как NOT(a > b)

Примеры формул с условными выражениями: 

IF со строковым параметром: IF (Длина > 350 мм, "Текст 1", "Текст 2") 
Если Длина больше 350 мм, то пишем "Текст1", а если меньше или равно - пишем "Текст2" 

IF и логический оператор AND (должны выполняться все условия, перечисленные в скобках): =IF (AND(x = 1 , y = 2), 8, 3 ) 
Если параметр "х" равно 1 и параметр "у" равно 2, то пишем "8", а если "х" не равно 1, или параметр "у" не равно 2 - пишем "3" 

IF и логический оператор OR (должно выполняться хотя бы одно условие из перечисленных в скобках): =IF (OR( A = 1 , B = 2), 8, 3 ) 
Если параметр "А" равно 1, или параметр "В" равно 2, то пишем "8", а если параметр "А" не равно 1, и параметр "В" не равно 2 - пишем "3" 

Вложенное IF-условие: =IF(Длина < 10500 мм, 450 мм, IF(Length < 13500 мм, 900 мм, IF(Длина < 16500 мм, 1500 мм, 2400 мм))) 
Если Длина меньше 10500 мм, то параметр равен 450 мм, 
а если Длина больше или равна 10500 мм, но меньше 13500 мм, то параметр равен 900 мм, 
а если Длина больше или равна 13500 мм, но меньше 16500 мм, то параметр равен 1500 мм, 
а если Длина больше 16500 мм, то параметр равен 2400 мм. 

Если нужно запараметризовать параметр типа "Да/Нет", также используется укороченная форма записи.