четверг, 27 марта 2014 г.

Hello, world! или как заставить Revit округлять итоговую площадь помещений правильно


Одна из типичных проблем фишек Revit - "неправильное" округление площадей в экспликации помещений. На самом деле, это общая особенность, но заказчики акцентируют внимание именно на площадях (естественно, цена квадратного метра зашкаливает). Так вот, дело в том, что Revit сначала суммирует значения, а потом округляет результат. И если сложить все значения площадей "столбиком", то получим совсем не то, что написано в строке "Итого". Доходило до того, что архитекторы писали итоговое значение вручную, лишь бы было правильно...
Давайте разберемся, как эту проблему решить.


На самом деле, уже достаточно давно в Revit есть инструмент, который позволяет это сделать: функция "округление" (round(x))
Кто догадался, что будет дальше - молодец, остальные - читаем.
1. Создаем "Расчетное значение", экспериментируем:
2. И вообще, нам же нужно не до целых округлить, а до сотых! Как? Сначала умножить на 100, округлить, потом поделить на 100. Приведу пример, как это работает:
123.456789 * 100 = 12345.6789
round(12345.6789) = 12345
12345 / 100 = 123.45
Итак, пишем: round(100*Площадь)/100
Опять несовместимые единицы? Не беда!
3. "Обнулим" единицы измерения, формула примет вид: round(100*Площадь/(1м*1м))/100
Если сейчас указать тип данных "Число", то формула применится:
4. Однако нам нужна площадь (хотя бы для чистоты эксперимента), поэтому снова добавим единицы измерения, но уже после функции округления: (round(100*Площадь/(1м*1м))*1м*1м)/100
5. Наслаждаемся полученным результатом:

P.S. Если нужно округлить до десятых - просто сменить в формуле 100 на 10:
(round(10*Площадь/(1м*1м))*1м*1м)/10

P.P.S. Для самых ленивых, файл со спецификацией для 2013 версии прилагается.

P.P.P.S. Для тех, кто не знает, как быстро загрузить чужую спецификацию - скриншот ниже:



UPD. Записал видео...