воскресенье, 3 июля 2016 г.

Формулы и условные выражения Revit (часть методички курса "BIM мастер 2.0")

На прошлой неделе я читал курс "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 мм.

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



Еще больше про формулы вы можете прочитать в других статьях моего блога:

Семейства Revit. Параметризация вложенных семейств Revit.
Семейства Revit. Настраиваем массив "как импосты в витражах". Часть 1
Семейства Revit. Настраиваем массив "как импосты в витражах". Часть 2
Семейства Revit. "Центровка массива". Частный случай
Семейства Revit. "Уклон или градус? И то и другое, или ни в чем себе не отказывайте!"
Семейства Revit: параметр для отчетов
Немного про марки в Revit

5 комментариев :


  1. Отличные статьи) Подскажите , как правильно написать формулу для спецификации бруса?. Мне нужно посчитать, сколько 6м получится для проекта? ( у меня указаны длины каждого бруска , например 2м, 3м, 4м и тд) вроде сумма(if(2+3+4+n)<6=1),(if(2+3+4+n)<6=1),(if(2+3+4+n)

    ОтветитьУдалить
    Ответы
    1. У меня была похожая задача с канализационной трубой. Нужно было посчитать количество палок трубы исходя из длины участков. Я решил эту задачу с помощью формулы в спецификации

      Удалить
  2. Подскажите, если нужно задать условия текстовому параметру (Марка):
    =IF (AND(Марка = 1 , Марка = 2), Параметр А, Параметр Б ). Но ревит не даёт задавать условия текстовым параметрам. Как выйти из ситуации?

    ОтветитьУдалить
  3. Добрый день. Вот озадачился, нужно из суммы размеров число округлить в большую сторону и чтобы оно было кратно 300. Может кто встречал такое?

    ОтветитьУдалить

Примечание. Отправлять комментарии могут только участники этого блога.