BIMIT
Разработка плагинов

ifcql

Интерфейс работы с выражениями IFCQL: преобразование строки IFCQL в логическую группу условий (LogicGroup) и обратно, а также построитель условий вида «ключ = одно из значений». Логическую группу можно передать в bim.getElements, bim.getGeometryElements и другие методы выборки.

В обработчиках событий бизнес-процессов (onCreate, onStatusChange и т.п.) ifcql недоступен (null). Методы createIfcqlFromLogicGroup, createLogicGroupFromIfcql и toString() построителя выполняют запрос к серверу.
build - создание строки ifcql
  • ifcql.build() → Builder - создаёт пустой построитель условия. Builder является логической группой (LogicGroup), поэтому результат можно сразу передавать в методы выборки

Методы построителя (каждый возвращает Builder, вызовы можно объединять в цепочку):

  • open() - открывает вложенную группу (скобку) и возвращает её
  • close() - закрывает текущую группу и возвращает родительскую
  • and() - соединять условия текущей группы через «И»
  • or() - соединять условия текущей группы через «ИЛИ»
  • in(String key, String... values) - добавляет в текущую группу условия key = value для каждого значения и переключает группу на «ИЛИ». Если передано одно значение-строка вида ["АР","КР"] (значение поля мультивыбора формы), оно разбирается как список
  • in(String key, Set<String> values) - то же для набора значений
  • toString() → String - строка IFCQL, собранная из условий построителя

key - те же оси, что у bim.createCondition: class, model, floor и т.д.

in() переключает свою группу на «ИЛИ». Помещайте каждый in() в отдельную группу open()...close(), а группы соединяйте через and() на внешнем уровне.

Пример использования:

def wallsAndSlabs = ifcql.build()
        .open().in("class", "IfcWall", "IfcSlab").close()
        .and()
        .open().in("floor", ["Этаж 1", "Этаж 2"] as Set).close()
def elements = bim.getElements(wallsAndSlabs)
console.info(wallsAndSlabs.toString())
createIfcqlFromLogicGroup - создание строки ifcql из логической группы
  • ifcql.createIfcqlFromLogicGroup(LogicGroup logicGroup) → String - строка IFCQL для логической группы (например, созданной через bim.createCondition)

Пример использования:

def logicGroup = bim.createCondition("class", "eq", "IfcWindow")
String expression = ifcql.createIfcqlFromLogicGroup(logicGroup)
createLogicGroupFromIfcql - создание логической группы из выражения ifcql
  • ifcql.createLogicGroupFromIfcql(String expression) → LogicGroup - логическая группа условий, разобранная из выражения IFCQL

Пример использования:

def condition = ifcql.createLogicGroupFromIfcql("identification.PropIfcId = \"15crQKBYj1du05dEYLopeu\"")
def elements = bim.getElements(condition)

Примечание:

Все, что внутри скобок и кавычек должно быть валидно ifcql. При ошибке разбора сервер вернёт ошибку PluginApiException.

Copyright © 2026