Разработка плагинов
ifcql
Интерфейс работы с выражениями IFCQL: преобразование строки IFCQL в логическую группу условий (LogicGroup) и обратно, а также построитель условий вида «ключ = одно из значений». Логическую группу можно передать в bim.getElements, bim.getGeometryElements и другие методы выборки.
В обработчиках событий бизнес-процессов (
onCreate, onStatusChange и т.п.) ifcql недоступен (null). Методы createIfcqlFromLogicGroup, createLogicGroupFromIfcql и toString() построителя выполняют запрос к серверу.- build - создание строки ifcql
- createIfcqlFromLogicGroup - создание строки ifcql из логической группы
- createLogicGroupFromIfcql - создание логической группы из выражения ifcql
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.

