Формули у Значеннях Властивостей в ARCHICAD 22

Формули у Значеннях Властивостей в ARCHICAD 22

Загальні особливості використання

Формули з’явилися як нове значення для користувача Властивостей, що створюються у Менеджері Властивостей. Властивості з формулами, як і звичайні властивості, прив’язуються до класу елементів, про що сповіщає нижня панель у правій половині вікна діалогу (рис. 1).

(рис. 1)

При нажатии кнопки Добавить появляется окно Редактора Формул. Кнопка Параметры и Свойства позволяет добавить свойства, находящиеся в панели Классификация и Свойства параметров каждого элемента. Функции и единицы измерения вы можете вводить с клавиатуры (если уже запомнили обозначения единиц измерения, функций и их синтаксис), но предусмотрены и специальные кнопки для выбора функций из списка. Функции удобно сгруппированы по типам, при наведении на функцию появляется всплывающая подсказка, а щелчком правой кнопки мыши можно вызвать более подробную справку о каждой функции. После выбора нужной функции в окне Редактора появляется правильный синтаксис данной функции и от пользователя требуется только подставить свои значения (строковые значения вписываются в кавычках, числовые – без кавычек). В нижней части окна Редактора в режиме реального времени выводятся подсказки по ходу ввода формулы. В целом интерфейс довольно дружелюбен, а синтаксис — очевиден и подробно описан в руководстве пользователя.

Пользовательские Свойства как с формулами, так и без них — расположены внизу списка параметров для вставки в окно Редактора Формул, автотекста и Интерактивных Каталогов (рис. 2).

(рис. 2)

Более подробное описание формул вы можете найти на сайте, а на официальном канале GRAPHISOFT Россия есть отдельный плейлист, посвященный формулам в значениях Свойств.
Для начала надо договориться об условных обозначениях, которые я буду использовать в дальнейшей части статьи.

Примеры формул будут выделяться курсивом.

Параметры и Свойства элементов, вставленные в формулы, будут иметь серый цвет – в соответствии с их отображением в окне Редактора Формул. Если, например, параметр Крыши Уклон скопировать из Редактора Формул и вставить в любой сторонний текстовый редактор, он будет иметь вид {Property:Крыша/Уклон}, то есть в названии закодирована также группа, в которой этот параметр расположен. Таким образом вы не сможете просто скопировать примеры формул, которые я разместил в статье: придется вручную подобрать либо создать нужные свойства для вставки в формулы. Процесс подбора нужного элемента позволит вам изучить набор стандартных параметров и Свойств элементов ARCHICAD, если вы не сделали этого ранее.

Пользовательские Свойства, которые создал я, будут иметь голубой фон.

{ФОРМУЛА} – так мы обозначим некую абстрактную формулу, суть которой не важна для рассматриваемого примера.

Одним из основных принципов BIM-проектирования в целом (и средствами ARCHICAD в частности) является создание унифицированного шаблона. Формулы позволяют устанавливать гораздо более сложные связи между параметрами элементов ARCHICAD и должны стать важной частью реквизитов шаблона вашей работы. Поскольку, начиная с 21-й версии, пользовательские Свойства привязаны не к инструментам, а к Классам элементов, вы должны четко понимать, как вы классифицируете различные элементы проекта:

Просмотреть и отредактировать стандартную классификацию или создать свою с нуля.
Назначить соответствующую классификацию элементам Избранного.
Необходимо не только понимать, но и иметь описание всех ваших реквизитов, их наименование и структуру хранения.
Создавая новые Свойства, вы также должны продуманно подходить к их наименованию и разделению по группам.

Без всего вышеперечисленного формулы внесут в вашу работу хаос, и быстро ориентироваться в растущем объеме информации будет затруднительно (рис. 3).

(рис. 3)

Когда шаблон сформирован и описан, классификация элементов вам понятна, вы должны сформулировать для себя задачу, которую хотите решить с помощью формулы. Первое, что мне пришло в голову, это назначить наконец такое свойство Крыши, как уклон в процентах. Создаю новое Свойство в группе «Основные конструкции», выбираю Классы, для которых это Свойство будет применяться (в моем случае Кровля и Марш пандуса), выбираю значение по умолчанию – Формула, набираю формулу:

100 * TAN ( Уклон )

и, наконец, меняю Тип данных (в моем случае Число). Все Свойства можно создавать в одной группе, но тогда со временем вы просто запутаетесь. Можно указывать для Свойств доступность всем Классам, но тогда список Свойств у каждого элемента (отображаемый в диалогах Параметров элементов) будет расширяться до бесконечности, причем для большей части Свойств даже не будет доступен расчет по формуле, так как параметр Уклон есть только у крыш.

Можно сразу задать формулу:

CONCAT ( “i=”; STR (100 * TAN ( Уклон ); “%” ),

чтобы получить строку «i=1,50%» (только тип данных надо сменить на Строка), но тогда результат нельзя будет использовать для дальнейших расчетов, к тому же нужный текст можно дописать в выноске типа Текст/Автотекст и сохранить в Избранное, правда направление уклона в любом случае придется задавать вручную.

Формулы должны быть доступны только для тех Классов, для которых расчет по ним возможен и необходим. При этом пользовательское Свойство может быть создано и использоваться в формулах, и при этом вообще оставаться недоступным ни для одного Класса. Например, можно создать Свойство Степень огнестойкости с типом данных Набор Параметров и задать значения I, II, III, IV, V. Таким образом это Свойство становится как бы аналогом поля из Информации о Проекте, но с выбором из заранее установленных вариантов, без ручного ввода. Это может быть полезно, поскольку формулы чувствительны к точности значений и случайно поставленный пробел в конце значения параметра способен сбить расчет.

В одно Свойство может быть добавлено несколько формул, расчет ведется последовательно сверху вниз. Если первая формула не может быть рассчитана для элемента, то расчет переходит к следующей и так далее до тех пор, пока расчет не будет выполнен либо не кончатся формулы, при этом Тип данных у результата всех формул в одном Свойстве должен совпадать. Если формулы закончились, но ни одна из них не подошла элементу, то результатом будет <анализ формулы недоступен>, а в интерактивном каталоге отобразится «—». Поэтому я рекомендую последней формулой для Свойства с несколькими формулами и типом данных Строка делать формулу типа «!ОШИБКА!» (или какой-то аналог заметной надписи для визуального контроля). Таким образом эта заметная надпись будет выводиться в Выносках, Каталогах и Свойствах элемента, и вы будете понимать, что нужно откорректировать либо сами формулы, либо Классы, доступные для этого свойства. Также, сдвигая другие формулы ниже формулы с предупреждением, вы отделяете их от расчета, не удаляя их (рис. 4).

(рис. 4)

В одну Властивість може бути додано кілька формул для різних типів елементів (стіни / колони / перекриття і т.д.). Обмежити використання формули якимось одним типом елементу можна присутністю у ній хоча б одного параметру, характерного тільки для одного типу елемента, навіть якщо цей параметр не потрібен для роботи власне формули. Наприклад, у формулі

IF (Уклон <> Уклон; “!ОШИБКА!”; {ФОРМУЛА} ),

Перша умова нерівності нахилу покрівлі — неможлива і встановлена лише для обмеження розрахунку формули Покрівель, а інші типи елементів переходять до розрахунку за такою формулою.

На сьогодні немає можливості залишати коментарі у тілі формул, і, коли в одну Властивість додано багато формул, стає складно орієнтуватися у тому, яка формула була створена для якого типу елементів. Для ідентифікації я вигадав на початку також додавати умову, непотрібну для розрахунку (рис. 5). наприклад:

IF (“Стена” =”-”; “!ОШИБКА!”; {ФОРМУЛА} )

(рис. 5)

Очевидно, що рядок «Стіна» ніколи не буде дорівнювати рядку «-» і, відповідно, значення Властивості ніколи не стане «! ПОМИЛКА!», Але при цьому на початку формули з’явився напис, що говорить про елемент, для якого вона була створена.

Складні формули інколи зручно розбити на кілька Властивостей з формулами попереднього розрахунку. Наприклад, результат розрахунку формули нахилу покрівлі у відсотках можна використовувати самостійно щоб вказати відсоток нахилу покрівлі, а можна застосовувати в інших формулах – наприклад для визначення типу покрівлі (плоска / скатна):

IF (Уклон в % <= 5; “Плоская”; “Скатная”)

Тобто, якщо нахил менше або дорівнює 5%, то покрівля вважається плоскою, а якщо більше – скатною. Потрібно дуже уважно ставитися до Типів даних Властивостей з формулами і розуміти логіку визначення Типу даних програмою ARCHICAD. Так, у моєму прикладі параметр Нахил Покрівлі – це Кутова величина, але після застосування функції тангенса перетворюється на Число. Дану особливість можна використовувати для своїх цілей. Наприклад, якщо вам потрібно порахувати довжину якихось елементів у метрах, а в якості одиниць виміру лінійних величин вказано міліметри і вам незручно міняти їх заради одного параметру, ви можете створити Властивість для довжини потрібного типу елементів і вставити у нього формулу:

3D-длина * 1 m

Таким чином, початковим Типом даних у параметра була Лінійна величина, а після дії множення на один метр власне значення не змінилося, але тип даних змінився на Площу, і його відображення змінилося відповідно до відображення площ (у більшості випадків це м2 із двома знаками після коми).

У ARCHICAD поки не передбачено форматування формул: якщо ви перенесете частину формули на новий рядок, помилки не буде, але якщо закрити і повторно відкрити вікно формули вона знову вишикується в однин рядок. Для складних формул можна або складати схеми, про які я розповім нижче, або використовувати сторонній пропрієтарний текстовий редактор (наприклад Sublime Text) для перевірки відповідності відкритих і закритих дужок.

Стоит отметить, что формулы в ARCHICAD чувствительны к локализации программы, то есть тип элемента в RUS-версии будет иметь название «Стена», а в INT-версии – «Wall». Значения таких встроенных параметров, как Расположение и Конструктивная Функция, тоже различаются в зависимости от языка программы. При этом функции формул и значения Критерия Соответствия TRUE/FALSE (ПРАВДА/ЛОЖЬ) в обеих версиях на английском языке. Названия параметров и Свойств, вставленных в формулы, жестко привязываются к ним: при переименовании пользовательского Свойства оно автоматически изменится во всех формулах, где было применено. При этом значения всех Свойств вписываются в формулы вручную, даже значения свойств типа Набор Параметров и стандартные параметры элементов (Расположение, Конструктивная Функция и т.п.). Для большего удобства я рекомендую открыть вторую копию ARCHICAD — для копирования значений Свойств.

Иногда бывает необходимо, чтобы значение Свойства могло вычисляться по формуле, либо задаваться вручную. В Свойствах элемента можно «разорвать» цепь для ввода специального значения (рис. 6), но в таком случае, чтобы вернуть расчет Свойства по формуле, надо будет вручную вернуть значение «По умолчанию», что — неудобно. В таких случаях я делаю два свойства: свойство A с простым строковым значением (либо Набором Параметров) и значением по умолчанию «-», чтобы задавать значение вручную; и свойство B с формулой:

IF (A<>”-”; A; {ФОРМУЛА} )

То есть, если для свойства A задано какое-то значение, то B=A, иначе выполняется {ФОРМУЛА}.

(рис. 6)

Приклад 1: призначення межі вогнестійкості стіни відповідно до ФЗ-123

Якщо потрібно зробити дійсно складну багаторівневу формулу, тут не обійтися без схеми розгалужених умов, необхідної для розуміння логіки побудови, підрахунку кількості та положення закритих дужок. Зведення обчислення значення за деякою таблицею можна віднести саме до таких завдань і взагалі виділити в окремий клас задач при роботі з формулами. Для прикладу хочу показати частину роботи з таблицею (рис. 7) призначення межі вогнестійкості конструкцій будівлі (таблиця 21 з ФЗ-123).

(рис. 7)

Изначально для меня было очевидно, что признак предела огнестойкости (R, RE, E и т.д.) и непосредственно предел огнестойкости необходимо разделить на два Свойства, поскольку это позволит значительно упростить формулы. Следует определиться с исходными данными: какие параметры уже есть в ARCHICAD, какие необходимо создать в качестве поля в Информации о Проекте или пользовательского Свойства, какие параметры задаются автоматически, а какие вручную. Естественно, в такой формуле будут использоваться стандартные параметры Расположение и Конструктивная Функция, и правильное их назначение приобретает большую важность. Я создал свойство Степень огнестойкости, которое может быть использовано и в формулах, и в общих данных проекта. Пришлось создать пользовательское Свойство принадлежности стены к лестничной клетке, так как стандартное Свойство Имя связанной зоны привязывает стену к первой созданной зоне, примыкающей к стене, а следить за этим не всегда удобно (было бы здорово иметь в значении данного параметра список всех зон, примыкающих к стене, а не только первую размещенную зону).Также, перед началом составления формул, следует определить общие закономерности назначения параметров и не пытаться вычислять формулами каждую ячейку. Например, видно, что при V степени огнестойкости здания ни одна конструкция не нормируется – и эту строку можно отсечь глобально, а далее для наружных стен имеет значение только ответ на вопрос, I степень огнестойкости или нет. Я составил схему формулы – как она выглядит в черновом варианте, показано на рис. 8.

И, наконец, на рис. 9 представлена оформленная схема с пояснениями для данного материала.

(рис. 8-9)

Как видите, после чернового варианта схема немного изменилась – поначалу я забыл учесть, что иную огнестойкость имеют только внутренние стены лестничных клеток. Поэтому для выявления ошибок необходимо проверять работу формул во всех возможных вариантах. Желательно, чтобы это делал человек, не занимавшийся непосредственно составлением формулы.

Также обратите внимание, что после перебора всех возможных степеней огнестойкости стоит не просто ошибка, а указание на то, что степень огнестойкости задана неверно, то есть она не приведена совсем или имеет место ошибка (лишний пробел либо ненормативное значение). Подобным образом вы можете закладывать внутренние проверки в тело формулы, но, к сожалению, это возможно только для типа данных Строка.

В результате получается формула, которую практически невозможно создать без серьезной предварительной подготовки и продумывания структуры:

IF ( “Стена” = “”; “!ОШИБКА!”;

IF ( Предел огнестойкости <> ” “; Предел огнестойкости;

IF ( Длина Линии Привязки <> Длина Линии Привязки; “!ОШИБКА!”;

IF ( Степень огнестойкости = “V”; “Не нормируется”;

IF ( Конструктивная Функция = “Несущий Элемент”;

IF ( Степень огнестойкости = “I”; “120”;

IF ( Степень огнестойкости = “II”; “90”;

IF ( Степень огнестойкости = “III”;

IF ( AND (ЛК_Конструкции = TRUE; Расположение = “Внутри”); “60”; “45” );

IF ( Степень огнестойкости = “IV”;

IF ( AND (ЛК_Конструкции = TRUE; Расположение = “Внутри”); “45”; “15” ); “!Степень огнестойкости задана неверно!” ) ) ) );

IF ( Расположение = “Снаружи”;

IF ( Степень огнестойкости = “I”; “30”; “15” ); “Не нормируется” ) ) ) ) ) )

Я подписал формулу, так как данное свойство планируется расширить для всех необходимых типов элементов. Создано дублирующее свойство Предел огнестойкости на случай необходимости задать значение степени огнестойкости вручную. Задано свойство, ограничивающее применение формулы только для стен.

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

После составления формулы появляется желание подключить графическую замену для визуального контроля результатов, но тут мы встречаем программное ограничение. Свойства со сложными формулами не могут участвовать в критериях графической замены, однако тут можно воспользоваться способом, который был продемонстрирован в выступлении Игоря Юрасова на конференции в Киеве. Создается Интерактивный Каталог с уникальными ID элементов, у которых Свойство предела огнестойкости, например, равно 90; далее данный каталог сохраняется в TXT-формат, и из этого текстового файла список GUID копируется в специально подготовленное поле в Информации о Проекте, которое выполняет роль буфера данных. Далее создается новое Свойство с простой формулой:

CONTAINS ( Уникальный ID;!ПБ 90!; FALSE ),

где !ПБ 90! – это созданное поле в Информации о Проекте, и формула проверяет, находится ли GUID элемента в этом списке. Поле в Информации о Проекте и Свойство с проверкой GUID необходимо будет создать для каждого возможного результата значения исходного Свойства предела огнестойкости.

С помощью Юрия Цепова из Labpp я смог автоматизировать операцию записи GUID элементов в Информацию о Проекте. Посредством скрипта на C++ при нажатии одной кнопки в бесплатном расширении Goodwin GDL от Labpp (либо в любом платном решении от этой компании) я записываю списки GUID элементов по заданным характеристикам в предварительно созданные поля Информации о Проекте. В результате можно получить результат, показанный на рис. 10.

(рис. 10)

Возможно, предложенная структура формулы будет мной дорабатываться, либо вы найдете более изящное решение. Может показаться, что описанные мной действия невероятно сложны и сильно тормозят процесс создания модели, но на самом деле все, о чем я пишу, в основном требует лишь однократной настройки в шаблоне и некоторого навыка в процессе создания модели, но в результате у вас будет появляться действительно интерактивная BIM-модель, а не 3D-макет.

Приклад 2: найменування вікон за ДСТУ 23166-99

Хочу одразу наголосити, що є правило найменування у загальному ДБНі вікон і кілька відмінних типів найменувань в ГОСТах на віконні блоки з різних матеріалів. Я сформулював для себе середній варіант.

У зв’язку з тим, що у формулах не можна використовувати параметри бібліотечних елементів, довелося створити кілька Властивостей типу Набір Параметрів для вибору матеріалу вікна і типу відкривання. Також створено параметр опору теплопередачі вікна і набір Властивостей типу Критерій Відповідності для додаткових опцій (фрамуга, клапани тощо). Може здатися, що тут дуже багато вихідних параметрів, які задаються вручну, але, по-перше, у ході розвитку формул кількість таких параметрів скоротиться, а база, створена зараз, буде використовуватися. По-друге, найчастіше використовувані типи вікон можна зберегти у Вибраному. До того ж раніше доводилося регулярно звірятися із нормами для визначення ГОСТу на конкретний матеріал вікна або коду тієї чи іншої опції вікна (Фр – фрамуга, КК – кліматичний клапан і т.д.), а тепер можна просто виставити галочки навпроти елементів, необхідних в вікні (рис. 11).

(рис. 11)

Свойство сопротивления теплопередаче установлено по умолчанию (и применяется для всех окон проекта) на минимально допустимом значении для проектируемого региона. В дальнейшем, если заказчик решит улучшить параметры дома и повысить эффективность окон, можно изменить значение по умолчанию в Менеджере Свойств, и это изменение распространится на весь проект. При этом какие-то отдельные окна (например, технических помещений), для которых вы задали специальное значение, останутся неизменными.

Для свойств данной группы необходимо задать доступность Классов – в моем случае «Окно» и «Балконная дверь».

В процессе присвоения наименований нам, по сути, надо заполнить два поля спецификации: «Обозначение» и «Наименование». Для первого значения используется несложная, но многоуровневая формула подбора номера ГОСТа в зависимости от материала окна:

IF ( OR ( “Признак предела огнестойкости_Ф <> ” “; ОК_Материал = “Индивидуальный” ); “Индивидуальный”;

IF ( ОК_Материал = “ПВХ”; “ГОСТ 30674-99”;

IF ( ОК_Материал = “Алюминий”; “ГОСТ 21519-2003”;

IF ( ОК_Материал = “Дерево + стеклопакет”; “ГОСТ 24700-99”;

IF ( ОК_Материал = “Дерево + стекло”; “ГОСТ 11214-2003”;

IF ( ОК_Материал = “Дерево мансарда”; “ГОСТ 30734-2000”;

IF ( ОК_Материал = “Защитное”; “ГОСТ 31462-2011”;

“!Материал задан неверно!” ) ) ) ) ) ) )

У своїй роботі я не ставлю конкретного виробника протипожежних дверей, тому, в першу чергу, йде перевірка на виконання однієї з умов: або задано властивість Ознака межі вогнестійкості_Ф, або параметр ОК_Матеріал має значення “Індивідуальний” і при виконанні однієї з умов Позначення теж стає “Індивідуальний”. В іншому випадку починається підбір ГОСТу в залежності від тих значень, які я встановив для властивості ОК_Матеріал. Перебравши усі можливі значення ОК_Матеріал задане перевірочне значення – на випадок помилково заданої користувацької властивості.

«Найменування» — більш складний параметр, і я вирішив розбити його на кілька складових властивостей, які також визначаються за формулами.

Спочатку визначається вид виробу (ОК_1_Вид):

IF ( OR ( Признак предела огнестойкости_Ф <> ” “; ОК_Материал = “Индивидуальный” ); “Оконный блок”;

CONCAT ( IF ( КЛАССИФИКАЦИЯ моя – 22 = “Балконная дверь”; “Б”;

IF ( КЛАССИФИКАЦИЯ моя – 22 = “Окно”; “О”; “!Ошибка Классификации!” );

IF ( ОК_Материал = “ПВХ”; “П “;

IF ( ОК_Материал = “Алюминий”; “АК “;

IF ( ОК_Материал = “Дерево + стеклопакет”; “Д”;

IF ( ОК_Материал = “Дерево + стекло”; “Д”;

IF ( ОК_Материал = “Дерево мансарда”; “Д МАНСАРДНОЕ”;

IF ( ОК_Материал = “Защитное”; “П защитный”;

“!Материал задан неверно!” ) ) ) ) ) ) ) )

Спочатку я знову перевіряю, чи не встановлено межу вогнестійкості вікна або матеріалу – “Індивідуальний”. Якщо перша умова не виконана, то, в залежності від однієї з двох можливих класифікацій, задається код виду виробу (знову з перевіркою в кінці). Функцією CONCAT код виду виробу об’єднується з кодом матеріалу виробу, що підбирається в залежності від значення ОК_Матеріал.

Далее описываем конструкцию окна (ОК_02_Конструкция общая):

IF ( OR ( Признак предела огнестойкости_Ф <> ” “;
ОК_Материал = “Индивидуальный” ); “”;
IF ( ОК_06_Заполнение = “”; “О”;
IF ( ОК_Материал = “Дерево мансарда”; “-1”; “ОСП” ) ) )

Снова начинаем с проверки окна на индивидуальность. В ином случае, если последующее Свойство заполнения окна не задано, вписываем код одинарного остекления. Далее выбираем между конструкцией со среднеповоротным открыванием мансардного окна (по ГОСТ 30734-2000) или одинарной конструкцией со стеклопакетом.

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

Далее идет, казалось бы, простое Свойство размера (ОК_03_Размеры), но на случай, если по каким-то причинам мне понадобится классифицировать Библиотечный объект как Окно, в это свойство добавлены две формулы.

Первая для собственно окна:

IF ( “Окно” = “”; “!ОШИБКА!”;
SUBSTITUTE ( CONCAT (STRCALCUNIT (Ширина); “-“; STRCALCUNIT (Высота);
IF ( КЛАССИФИКАЦИЯ моя – 22 = “Балконная дверь”; Ориентация; “” ) ); ” “; “” ) )

Вначале подпись формулы. Далее функцией CONCAT объединяются Ширина, символ тире и Высота; в случае, если объект классифицирован как Балконная дверь, то к размерам добавляется обозначение ориентации открывания. Каждый параметр Линейного размера перед объединением необходимо перевести в Строку функцией STRCALCUNIT, так как объединяться могут только строковые значения. В ARCHICAD настройка отображения чисел (деление на группы по три цифры) задается через настройки Windows Панель управления > Региональные стандарты > Дополнительные параметры > Группировка цифр по разрядам. В формулах ARCHICAD 22 изменение данной настройки не меняет группировку цифр по разрядам, поэтому пришлось исключить пробелы между разрядами цифр, причем функция TRIM не удаляет эти пробелы и их пришлось копировать и вставлять в формулу для замены символа разделителя разрядов на ничто (пара кавычек, стоящих вплотную друг к другу) функцией SUBSTITUTE.

Вторая формула в этом свойстве – для Библиотечного элемента:

IF ( “Объект как Окно” = “”; “!ОШИБКА!”;
SUBSTITUTE ( CONCAT ( STRCALCUNIT (Длина (A)); “-“; STRCALCUNIT (Высота) );
” “; “” ) )

Данная формула, по сути, повторяет предыдущую, но параметр Ширина заменен на параметр Библиотечного элемента Длина (A).

Затем под Свойством я прописываю коды дополнительных опций окна (ОК_04_Конструкция_Детали):

IF ( OR ( Признак предела огнестойкости_Ф <> ” “; ОК_Материал = “Индивидуальный” ); “”;
TEXTJOIN ( ” “; TRUE; IF ( ОК_Форточка = TRUE; “Ф”; “” );
IF ( ОК_Фрамуга = TRUE; “Фр”; “” );
IF ( ОК_Клапан вентиляционный = TRUE; “ВК”; “” );
IF ( ОК_Клапан климатический = TRUE; “КК”; “” );
IF ( ОК_Система самовентиляции = TRUE; “СВ”; “” );
IF ( ОК_Система безопасности = TRUE; “СБ”; “” );
IF ( ОК_Открывание = “Поворотно-откидное”; “ПО”;
IF ( ОК_Открывание = “Параллельно-выдвижное”; “ПВ”; “” ) ) ) )

Для начала идет уже привычная проверка на индивидуальное окно. В принципе можно было вынести эту проверку в отдельное подсвойство и вставлять его в каждую формулу, но я решил, что тут и так достаточно свойств. Далее коды опций окна (Фрамуга, Форточка и т.п.) объединяются в строку, если их значение соответствует TRUE. В конце идет перебор типа открывания, из тех, что использую я. Объединение кодов выполнено функцией TEXTJOIN, которая позволяет задать символ-разделитель и игнорировать пустые значения объединяемых элементов.

Последние подсвойства (ОК_05_Класс и ОК_06_Заполнение) имеют одинаковую структуру и подпирают значение в зависимости от значения свойства ОК_R:

IF ( OR ( Признак предела огнестойкости_Ф <> ” “; ОК_Материал = “Индивидуальный” ); “”;
IF ( ОК_R = 0; “”;
IF ( ОК_R >= 0,8; “А1”;
IF ( ОК_R >= 0,75; “А2”;
IF ( ОК_R >= 0,7; “Б1”;
IF ( ОК_R >= 0,65; “Б2”;
IF ( ОК_R >= 0,6; “В1”;
IF ( ОК_R >= 0,55; “В2”;
IF ( ОК_R >= 0,5; “Г1”;
IF ( ОК_R >= 0,45; “Г2”;
IF ( ОК_R >= 0,4; “Д1”;
IF ( ОК_R >= 0,35; “Д2”; “” ) ) ) ) ) ) ) ) ) ) ) )

По очереди я отсекаю значения R (сопротивление теплопередаче) в соответствии с п. 4.7.1 ГОСТ 23166-99. Формула для подбора стеклопакета выглядит так же, только вместо значений класса указываются обозначения стеклопакетов, которые вы применяете, и их значение R.

И, наконец, Свойство ОК_НАИМЕНОВАНИЕ собирает вычисленные подсвойства в единое наименование:

TRIM ( TEXTJOIN ( ” “; TRUE; ОК_01_Вид; ОК_02_Конструкция общая;
Д/ОК_01_Описание_Начало; ОК_03_Размеры; ОК_04_Конструкция_Детали;
ОК_05_Класс; ОК_06_Заполнение; Д/ОК_02_Описание_Конец;
CONCAT ( Признак предела огнестойкости_Ф; Предел огнестойкости_Ф ) ) )

Значения для Свойств просто объединяются функцией TEXTJOIN и дополнительно функцией TRIM убираются пробелы, на всякий случай. Свойства Д/ОК_01_Описание_Начало и Д/ОК_02_Описание_Конец – это просто строковые пользовательские Свойства на случай, если мне надо добавить какое-то описание к окну или двери в начале или конце наименования.

В результате Интерактивный Каталог заполнения оконных проемов выглядит так, как показано на рис. 12.

(рис. 12)

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

Результат рассмотренной автоматизации можно включить в графическую замену без дополнительных ухищрений, посредством свойства ОК_Материал (рис. 13).

(рис. 13)

В заключение еще раз повторюсь, что представленный материал дан для понимания принципов работы нового инструмента и не претендует на точное соответствие нормативным требованиям, хотя и вполне удовлетворяет моим потребностям при работе.

Приклад 3: підбір площі розрізу вентканалу у квартирі

В этом примере я хотел бы продемонстрировать автоматизацию выполнения задания отдела ОВ по подбору площади канала естественной вентиляции в квартирах – с использованием формул, расширения Labpp_Квартирография и новой функции ARCHICAD: пользовательская Выносная Надпись.

При выполнении многих объектов я подолгу ждал выдачи задания от раздела ОВ по требуемым площадям каналов естественной вентиляции в квартирах (наши заказчики не хотят использовать какие-то стандартные сборные вентканалы). И вот, наконец, смог получить некое универсальное задание (рис. 14).

(рис. 14)

Увидев эти таблицы, я загрустил и сел думать, что мне с этим делать. Не хочу обсуждать правильность этих расчетов и саму суть задания, поскольку так и не сумел добиться ссылок на конкретные нормы, четко регламентирующие этот расчет.

По сути, мне нужно определить тип квартиры, исходя из расположения и количества санузлов: это я могу сделать только вручную. Количество жилых этажей в проектируемой секции и количество этажей с коммерческими площадями я тоже не придумал как автоматизировать – тем более что в одном проекте может быть несколько секций с разными показателями. Также вручную пришлось вводить количество зон (или групп) градаций площади вентканала по вертикали, так как иногда делаются две градации, иногда четыре, а иногда единая площадь на всю высоту. В результате у меня получился набор свойств, представленный на рис. 15.

(рис. 15)

Все эти Свойства доступны для Класса «Аннотирование» – его я создал сам для маркеров квартир, которые поставляются в составе расширения Labpp_Квартирография. В целом это приложение расширяет возможности формул в ARCHICAD, поскольку формулы рассчитываются на уровне отдельного элемента, а приложение сводит площади множества зон в один объект, разбивает их по группам и позволяет производить расчеты с этими данными. Только необходимо перенести значение Свойств библиотечного объекта в пользовательские Свойства в Менеджере Свойств. Для таких целей в составе расширения поставляется специальный скрипт, который я, решая данную задачу, подкорректировал для переноса жилой площади квартиры в Пользовательское свойство. Рассмотрим последовательность подбора вентканала. Для начала моделируем квартиру, размещаем Зоны и привязываем их к Маркеру квартиры. Подробно работу расширения квартирографии я показывал в специализированном вебинаре. Запускаем скрипт и переносим жилую площадь квартиры в Пользовательское свойство S жилая (рис. 16).

(рис. 16)

Далее нужно вручную выбрать Тип КВ для вентканала, задать Кол-во жилых этажей и № первого жилого этажа. И тут появляется проблема: я должен либо помнить наизусть типы квартиры, либо открывать какую-то справку. Помочь может новая функция создания пользовательской Выноски. Вы можете начертить с помощью линий, полилиний и штриховок то, что вам нужно вставить в требуемых местах в текст либо автотекст, а затем при помощи команды Документ > Аннотация > Выносная Надпись сохранить нарисованное и использовать его как Выносную Надпись. У меня получилась такая Выносная Надпись для помощи в подборе вентканала (рис. 17).

(рис. 17)

У лівій частині показана підказка щодо вибору типу квартири. Після цього розміщено вертикальний текст обраного типу і, нарешті, три значення площ вентиляційних каналів для різних приміщень.

Якщо подивитися на таблиці вихідного завдання, стає зрозуміло, що в залежності від житлової площі добирається не площа каналу, а його тип. Тому для кожної квартири розраховуються усі типи каналів, а вже у залежності від типу квартири і житлової площі — конкретний тип каналу у властивостях S каналу Кухні, S каналу С / у-L, S каналу С / у-S.

Розглянемо розрахунок площі каналу на прикладі властивостей для типу I (S каналу I):

IF ( № этажа расположения > Кол-во жилых этажей; “!!!Этажность меньше текущего этажа!!!”;

IF ( Кол-во жилых этажей <= 7; “0,067”;

IF ( Кол-во жилых этажей <= 13;

IF ( Кол-во зон = “1”; “0,133”;

IF (OR( Кол-во зон = “2”;Кол-во зон = “3/4”);

IF ( № этажа расположения <= 7; “0,067”; “0,133”); “!Ошибка количества зон!”));

IF ( Кол-во жилых этажей <= 21;

IF ( Кол-во зон = “1”; “0,222”;

IF ( Кол-во зон = “2”; IF ( № этажа расположения <= 13; “0,133”; “0,222”);

IF ( Кол-во зон <> “3/4”; “!Ошибка количества зон!”;

IF ( № этажа расположения <= 7; “0,067”;

IF ( № этажа расположения <= 13; “0,133”; “0,222”)))));

IF ( Кол-во жилых этажей > 25; “!Количество этажей больше расчетных 25!”;

IF ( Кол-во зон = “1”; “0,267”;

IF ( Кол-во зон = “2”; IF ( № этажа расположения <= 13; “0,133”; “0,267”);

IF ( Кол-во зон <> “3/4”; “!Ошибка количества зон!”;

IF ( № этажа расположения <= 7; “0,067”;

IF ( № этажа расположения <= 13; “0,133”;

IF ( № этажа расположения <= 19; “0,222” ; “0,267” )))))))))))

Спочатку перевіряється правильність вихідних даних, тобто, щоб кількість поверхів була більшою, ніж розташування поверху, який розраховується за формулою (№ поверху розташування):

Номер Власного Поверху – (№ першого житлового поверху – 1)

Я уменьшаю № первого жилого этажа на единицу: если квартиры начинаются с первого этажа, то и вычитать из собственного этажа ничего не надо. Параметр Количество нежилых этажей решил не использовать, поскольку при сложном рельефе и в случае дома, состоящего из нескольких секций, первый этаж отдельных секций может сместиться и на второй, и на минус первый.

Далее в формуле расчета площади вентканала идет перебор значений из таблицы в зависимости от количества жилых этажей в доме и этажа расположения квартиры. Если количество этажей в доме не превышает семи, то площадь канала минимальна и одинакова на всех этажах. Если этажей от 8 до 13, то уже возможны варианты единой зоны вентканалов и, соответственно, их одинаковой площади, либо градация площадей каналов по двум группам этажей (до 7 и выше). Для этажности от 14 до 21 этажа возможны уже три варианта градации площадей вентканалов (одна, две и три зоны). Для общего количества этажей 22-25 возможны градации площадей каналов на одну, две, четыре зоны. Поэтому последнее возможное значение Кол-во зон соответствует «3/4». Если общее количество этажей превышает 25, то либо это значение задано ошибочно, либо дом выходит за пределы расчетных параметров исходного задания и требует дополнительного расчета, о чем в формулу также помещено предупреждение. Так как у свойства Кол-во зон только три значения (1, 2 и 3/4), то на всякий случай добавлена проверка на правильность значения данного свойства, хотя оно и имеет тип Набор Параметров. Я стараюсь формировать формулы таким образом, чтобы в конце было как можно меньше чередующихся данных и закрывающих скобок – так мне удобнее ориентироваться в формуле. Аналогичным образом подбираются площади каналов типа II и III.

Подбор типа вентканала рассмотрю на примере канала кухни (S канала Кухни):

IF (S жилая = 0; “!!!НЕТ ЖИЛОЙ ПЛОЩАДИ!!!”;
IF ( Тип КВ для вентканала = ” “; “Выберете тип КВ для вентканала”;
IF ( OR (Тип КВ для вентканала = “1”; Тип КВ для вентканала = “3”);
IF ( S жилая <= 50; S канала I; S канала III );
IF ( Тип КВ для вентканала = “2”;
IF ( S жилая <= 63; S канала I; S канала III ); “!Ошибка типа квартиры!” ) ) ) )

Вначале идет проверка переноса жилой площади из параметров объекта маркера в пользовательское Свойство. Затем — проверка назначения типа квартиры. И, наконец, следует перебор значений из исходной таблицы в зависимости от жилой площади и типа квартиры.

Стоит отметить, что исходные данные (количество этажей и этаж расположения) можно вносить сразу для всех маркеров этажа. Скрипт также переносит значения жилой площади для всех маркеров в проекте. В итоге можно пакетно нанести подготовленные выноски для всех маркеров квартир на этаже (команда Документ > Аннотация > Нанести Выносные Надписи для выбранных Элементов) и заняться расстановкой вентканалов.

Вентканал у меня представляет собой группу элементов: стены с отверстиями, Библиотечный элемент разделения заборного канала, профилированной колонны из прозрачного материала с высоким приоритетом пересечения, и Выносная Надпись со свойством S КАНАЛА. Это Свойство надо сравнивать с минимальной площадью из задания ОВ, которая имеет три знака после запятой. Чтобы не переключаться между точностью отображения площадей, я решил попытаться реализовать это с помощью формул. Сначала я рассчитываю площадь колонны со сдвигом запятой на три знака вправо (S канала_черновая) (рис. 18).

SPLIT ( STRCALCUNIT ( Толщина / Диаметр Ядра * Ширина Ядра * 1000 ) ); “,”; 1 )

(рис. 18)

SPLIT ( STRCALCUNIT ( Толщина / Диаметр Ядра * Ширина Ядра * 1000 ) ); “,”; 1 )

Перед переходом до строкового значення відсікаю дробову частину (кома і все, що правіше неї) площі функцією SPLIT. А потім вже змінюю відображення отриманого значення як дріб з трьома знаками після коми, використовуючи те, що ARCHICAD 22 не прибирає прогалини між розрядами чисел в формулах (про що я говорив вище):

IF ( CONTAINS ( ” “; S канала_черновая ); SUBSTITUTE ( S канала_черновая; ” “; “,” );

CONCAT ( “0,”; S канала_черновая ) )

У цій формулі застосовані тільки функції перетворення тексту. Таким чином, якщо S канала_черновая має більше трьох цифр, то в ній є прогалина, яку я заміняю на кому, інакше ставлю на початок рядка “0,”. Дане рішення є абсурдним, антинауковим і неуніверсальним (наприклад, буде функціонувати належним чином із площами, що мають більше шести знаків), але воно працює і демонструє, що досить нестандартні завдання можна вирішити, якщо мислити ширше.

Очевидно, що результат далекий від повної автоматизації – по суті, я просто позбавив процес проектування роботи із таблицями і зменшив можливість помилки при підборі мінімальних значень площі вентканалу. Знову ж таки хочу уточнити: я не стверджую, що вихідне завдання є абсолютно вірним, і не закликаю точно наслідувати мої формули. Я лише хочу показати загальні принципи того, як можна автоматизувати рутинні завдання, якщо один раз добре подумати.

Висновки

Формули — це значний крок ARCHICAD на шляху автоматизації наповнення моделі інформацією. Те, що раніше виконувалося тільки через неочевидні інструменти IFC-схем (об’єднання декількох параметрів у рядок), тепер виконується безпосередньо з Менеджера Властивостей. Те, що раніше вимагало вивантаження в Excel із подальшою обробкою (обчислення відсотка житлової площі від загальної площі квартири або квартир на поверсі), тепер може обчислюватися автоматично у середовищі ARCHICAD і відображатися Виносним Написом або в Інтерактивному Каталозі. Те, що раніше могло призначатися тільки вручну (межа вогнестійкості конструкцій), тепер може розраховуватися автоматично.

Можливості застосування формул — вже зараз досить обширні, особливо в комплексі зі сторонніми розширеннями. А з розвитком цього інструменту будуть обмежені лише уявою користувача.

Підсумовуючи, хотілося б відзначити наступне: декому може здатися, що все показане мною — мало схоже на те, чим звик займатися архітектор. Але професія архітектора завжди була пов’язана із необхідністю бути обізнаним у безлічі суміжних спеціальностей, і програмування — лише ще одна з них. Мова програмування – це міжнародна мова нового часу, нарівні з англійською, і, відмовляючись від вивчення хоча б базових принципів програмування, ви фактично відмовляєтесь від саморозвитку.

«… доводиться бігти щодуху, щоб тільки залишитися на тому ж місці, а щоб потрапити в інше місце, потрібно бігти вдвічі швидше» (Льюїс Керролл «Аліса в Задзеркаллі»).

ПРО GRAPHISOFT

Компанія GRAPHISOFT® в 1984 році здійснила BIM-революцію, розробивши ARCHICAD® — перше в індустрії САПР BIM-рішення для архітекторів. GRAPHISOFT продовжує бути лідером на ринку архітектурного програмного забезпечення, створюючи такі інноваційні продукти, як BIMcloud™ — перше в світі рішення, спрямоване на організацію спільного BIM-проектування в режимі реального часу, EcoDesigner™ — перший в світі повністю інтегрований додаток, призначений для енергетичного моделювання та оцінки енергоефективності будівель, і BIMx® — лідируючий мобільний додаток для демонстрації та презентації BIM-моделей. З 2007 року компанія GRAPHISOFT входить до складу концерну Nemetschek Group.