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

bim

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

Проект и модели

  • getProject - взятие проекта, на котором выполняется плагин
  • getGeometryProject - взятие данных о проекте с данными по геометрии: границы и размеры границ по осям OX, OY, OZ
  • getProjectHashSum - взятие хэша сборки проекта
  • getProjectXmlFile - получение ТЭП XML-файла, привязанного к проекту
  • getProjectModels - взятие всех активных моделей проекта
  • getModels - получение моделей из структуры проекта
  • getModelsGeometry - получение моделей с данными по геометрии
  • getGeometryModel - взятие данных о модели по её идентификатору с данными по геометрии
  • getModelRevisions - взятие всех ревизий модели
  • getModelNamesTree - получение дерева моделей по элементу
  • setUsedRevision - установка ревизий, из которых будут браться элементы
  • getLogicGroupsFromProject - получение логических групп текущего проекта

Условия поиска

  • createCondition - функция создания условия поиска элементов
  • testElements - проверка, существуют ли элементы, соответствующие условию
  • getCondition - добавление к строке IFCQL условия по списку моделей

Элементы

Элементы с геометрией

Точная геометрия (сетки треугольников)

  • getGeometryObject - функция получения координат элемента для формирования объёмной модели или отрисовки на экране
  • getGeometryObjects - функция получения списка координат элементов для формирования объёмной модели или отрисовки на экране
  • getGeometryObjectsMap - то же, что getGeometryObjects, но в виде карты «UUID элемента → геометрия»
  • getOrientedBoundingBoxes - получение ориентированных ограничивающих боксов (OBB) элементов по условию
  • getElementPolygonsCountByUuid - получение количества полигонов элемента

Атрибуты

Этажи

  • getFloors - возвращает все этажи проекта
  • getFloor - возвращает этаж конкретного элемента
  • getBuildingStoreysFloors - возвращает этажи по идентификаторам элементов IfcBuildingStorey
  • getElementFloor - определение этажа элемента из заданного списка этажей
  • testSameFloor - проверка, находятся ли два элемента на одном этаже
  • extractFloorNameNumber - извлечение номера этажа из его названия

Отображение на модели

  • showElements - функция отображения на экране списка элементов (выбор/подсветка на модели)
  • createGroupElements - создание (объединение) элементов в группы с указанием цвета в формате HEX
  • showGroupElements - функция отображения/подсветки на экране ранее созданных групп элементов

3D-виды и чертежи

Коллизии и правила проверки

  • getProjectCollisions - функция получения списка коллизий проекта
  • getModelCollisions - функция получения списка коллизий модели
  • getCollisionsForReport - функция получения списка коллизий для отчёта
  • getCollisionInfo - получение объекта CollisionInfo для коллизии, назначенной к задаче
  • filterGeometryElementsToCheck - отбор элементов для проверки с учётом родительского правила (цепочки проверок)
  • filterGeometryObjectToCheck - то же для геометрических объектов
  • setRuleParam - заполнение параметров встроенного правила (RuleParam)

Задачи

  • getProjectTasks - получение списка всех задач проекта
  • getTask - получение задачи по её идентификатору
  • getTasks - получение списка задач
  • getTasksTree - получение дерева задач проекта
  • getWorkSpacesCurrentProject - получение идентификаторов рабочих пространств проекта
  • getTasksCurrentWorkSpace - получение списка задач рабочего пространства
  • getTasksTreeCurrentWorkspace - получение дерева задач рабочего пространства
  • getLateTasks - получение списка всех просроченных задач, либо задач на эскалации
  • getFirstEscalationTasks - получение списка просроченных задач (первая эскалация)
  • getSecondEscalationTasks - получение списка задач второй эскалации
  • saveTask - создание и/или сохранение задачи
  • getLinkToTask - получение ссылки на проект с параметрами для открытия конкретной задачи
  • getTaskComments - получение списка всех комментариев задачи
  • getTaskAttachments - получение списка всех вложений задачи
  • getCommentFromTaskAttachment - получение текста комментария из sourceData вложения
  • getTaskForm - получение списка данных формы задачи
  • getTaskWorkers - получение списка профилей исполнителей задачи
  • getFilesDownloadLinks - получение списка ссылок на скачивание файлов, вложенных в задачи проекта
  • editTokenExpiredDate - изменение срока действия токена для скачивания файлов

Пользовательские статусы и параметры задач

  • registerProcessStatuses - регистрация списка пользовательских статусов задач
  • initPluginTaskStatus - инициализация пользовательских статусов в проекте
  • getProcessStatuses - получение списка пользовательских статусов для активного рабочего пространства
  • setPluginStatusToTask - изменение пользовательского статуса задачи
  • saveParamsToTask - сохранение пользовательских параметров задачи
  • getParamsToTask - получение списка параметров задачи
  • getTaskParams - получение списка параметров всех задач рабочего пространства
  • editParam - редактирование параметра задачи
  • deleteParam - удаление параметра задачи
  • deleteParams - удаление параметров

Пользователи и группы организации

  • getProfile - получение данных о пользователе по его идентификатору
  • getProfiles - получение данных о пользователях по их идентификаторам
  • getOrgGroups - получение списка групп организации
  • getOrgGroup - получение группы организации
  • setGroupResponderToTask - назначение группы организации ответственным за задачу
  • setGroupWorkersToTask - назначение групп организации исполнителями задачи
  • deleteDutyShift - удаление назначенной к задаче группы, название которой содержит указанную строку

Техническое обслуживание (ТО)

Даты и вспомогательные методы

  • getStartDate - получение даты на начало следующего дня
  • getEndDate - получение даты на конец следующего дня
  • getAmountDate - получение даты через указанное количество дней
  • getDate - получение даты из строки
  • getDateTime - получение даты и времени из строки
  • getRuDate - получение даты в RU-формате
  • parseOptionValueToList - преобразование значения поля мультивыбора формы в список
  • convertStringUuidToUUID - конвертация строковых идентификаторов в UUID

Справочники

Каждый метод, который получает данные, выполняет запрос к серверу. В циклах по элементам используйте пакетные варианты (условие поиска, список идентификаторов) вместо поэлементных вызовов getElement, getFloor и т.п. Наборы (Set) в результатах не упорядочены — для сортировки используйте, например, elements.sort { it.name }.

Проект и модели

getProject - взятие проекта, на котором выполняется плагин
  • bim.getProject() → Project - метод возвращает следующую структуру:
ПолеТип данных поляОписание поляМетод взятия данных поля
uuidUUIDидентификатор проектаgetUuid()
aliasStringуникальное название английскоеgetAlias()
titleStringзаголовокgetTitle()
descriptionStringописаниеgetDescription()
colorStringцвет метки проектаgetColor()
previewStringссылка на картинку превью проектаgetPreview()
createDateInstantдата созданияgetCreateDate()
editDateInstantдата последнего редактированияgetEditDate()
profileUuidUUIDидентификатор пользователя автора проектаgetProfileUuid()

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

def project = bim.getProject()
def editProjectDate = project.getEditDate()
console.info(editProjectDate.toString())
// -> "INFO: 2022-01-01T01:01:12.567Z"
getGeometryProject - взятие данных о проекте с добавленными данными по геометрии модели: границы и размеры границ по осям OX, OY, OZ
  • bim.getGeometryProject() → GeometryProject - содержит все поля getProject и дополнительно:
ПолеТип данных поляОписание поляМетод взятия данных поля
boundSizeXdoubleдлина проектной модели вдоль оси ОХgetBoundSizeX()
boundSizeYdoubleдлина проектной модели вдоль оси ОYgetBoundSizeY()
boundSizeZdoubleдлина проектной модели вдоль оси ОZgetBoundSizeZ()
boundsBoundsструктура границы проектной модели (см. getGeometryElement)getBounds()

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

def geometryProject = bim.getGeometryProject()
def bounds = geometryProject.getBounds()
console.info("Размер по X: " + geometryProject.getBoundSizeX())
getProjectHashSum - взятие хэша сборки проекта, в котором выполняется плагин
  • bim.getProjectHashSum() → String - хэш меняется при изменении состава моделей проекта; его можно сохранить и сравнивать при следующих запусках, чтобы понять, менялся ли проект

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

def hash = bim.getProjectHashSum()
console.info("Хэш сборки проекта: " + hash)
getProjectXmlFile - получение ТЭП XML-файла, привязанного к проекту
  • bim.getProjectXmlFile() → String - содержимое XML-файла в base64; разбирается вспомогательным классом XMLParser

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

def xml = bim.getProjectXmlFile()
if (xml) {
    def errors = XMLParser.validateXML(xml)
    def xmlMap = XMLParser.parseXMLBase64ToMap(xml)
}
getProjectModels - взятие всех активных моделей проекта, на котором выполняется плагин
  • bim.getProjectModels() → List<Model>
Возвращаются только модели верхнего уровня. Вложенные модели лежат в поле model (getModel()) каждой модели — их нужно обходить рекурсивно. Встроенные правила проверок сопоставляют модели по title.

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

def flattenModels(def model, List acc = []) {
    acc.add(model)
    model.model?.each { flattenModels(it, acc) }
    return acc
}

def start() {
    def listModels = bim.getProjectModels()
    def allModels = listModels.collectMany { flattenModels(it) }
    for (Model model : allModels) {
        console.info(model.getUuid().toString() + " " + model.getTitle())
        // -> "INFO: 4e733308-7ddd-11ec-90d6-0242ac120003 АР"
    }
}
getModels - получение моделей из структуры проекта
  • bim.getModels() → List<Model> - выполняет тот же запрос, что и getProjectModels, результат одинаковый (только модели верхнего уровня)

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

def models = bim.getModels()
models.each { m -> console.info(m.title) }
getModelsGeometry - получение моделей с геометрией из структуры проекта
  • bim.getModelsGeometry() → List<GeometryModel> - модели с полями getGeometryModel (границы и размеры границ)

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

def models = bim.getModelsGeometry()
models.each { m -> console.info(m.title + ": " + m.boundSizeX + " x " + m.boundSizeY + " x " + m.boundSizeZ) }
getGeometryModel - взятие данных о модели по её идентификатору с добавленными данными по геометрии модели: границы и размеры границ по осям OX, OY, OZ
  • bim.getGeometryModel(UUID modelUuid) → GeometryModel
ПолеТип данных поляОписание поляМетод взятия данных поля
uuidUUIDидентификатор моделиgetUuid()
nameStringнаименование моделиgetName()
titleStringзаголовок моделиgetTitle()
archivedbooleanпризнак нахождения модели в архивеisArchived()
offsetXdoubleсмещение модели по оси XgetOffsetX()
offsetYdoubleсмещение модели по оси YgetOffsetY()
offsetZdoubleсмещение модели по оси ZgetOffsetZ()
eulerXdoubleЭйлеровский поворот модели вокруг оси OXgetEulerX()
eulerYdoubleЭйлеровский поворот модели вокруг оси OYgetEulerY()
eulerZdoubleЭйлеровский поворот модели вокруг оси OZgetEulerZ()
sortOrderintпорядок сортировки модели в своем уровнеgetSortOrder()
realOffsetXdoubleсмещение модели по оси X с учетом родительского смещенияgetRealOffsetX()
realOffsetYdoubleсмещение модели по оси Y с учетом родительского смещенияgetRealOffsetY()
realOffsetZdoubleсмещение модели по оси Z с учетом родительского смещенияgetRealOffsetZ()
realEulerXdoubleЭйлеровский поворот модели вокруг оси OX с учетом родительского поворотаgetRealEulerX()
realEulerYdoubleЭйлеровский поворот модели вокруг оси OY с учетом родительского поворотаgetRealEulerY()
realEulerZdoubleЭйлеровский поворот модели вокруг оси OZ с учетом родительского поворотаgetRealEulerZ()
modelList<Model>подмоделиgetModel()
boundSizeXdoubleдлина модели вдоль оси ОХgetBoundSizeX()
boundSizeYdoubleдлина модели вдоль оси ОYgetBoundSizeY()
boundSizeZdoubleдлина модели вдоль оси ОZgetBoundSizeZ()
boundsBoundsструктура границы модели (см. getGeometryElement)getBounds()

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

def geometryModel = bim.getGeometryModel(UUID.fromString("ac178efe-7e8d-11ec-90d6-0242ac120003"))
def bounds = geometryModel.getBounds()
getModelRevisions - взятие всех ревизий модели
  • bim.getModelRevisions(UUID modelUuid) → List<ModelRevision>

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

def listModelRevisions = bim.getModelRevisions(UUID.fromString("4e733308-7ddd-11ec-90d6-0242ac120003"))
for (ModelRevision modelRevision : listModelRevisions) {
    def modelRevisionUuid = modelRevision.getUuid()
    console.info(modelRevisionUuid.toString() + " v" + modelRevision.getVersion())
    // -> "INFO: 697ba2b6-7ddd-11ec-90d6-0242ac120003 v1"
}
getModelNamesTree - получение дерева моделей по элементу
  • bim.getModelNamesTree(UUID elementUuid) → String - строка с именами моделей, к которым относится элемент
  • bim.getModelNamesTree(String elementUuid) → String - то же по строковому идентификатору; строка, не являющаяся UUID, вызывает исключение

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

def task = bim.getTask(UUID.fromString("c73df7aa-7ddd-11ec-90d6-0242ac120003"))
def modelName = task.entityId ? bim.getModelNamesTree(task.entityId) : ""
setUsedRevision - установка ревизий, из которых будут браться элементы
  • bim.setUsedRevision(Collection<UUID> uuids) - задаёт ревизии моделей, из которых берутся элементы в getElements, getGeometryElements, showElements и createGroupElements (по условию). Если ревизии не заданы (или передан пустой список), используются последние ревизии
Настройка действует на все последующие выборки до конца запуска плагина. Чтобы вернуться к последним ревизиям, вызовите bim.setUsedRevision([]).

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

def model = bim.getProjectModels()[0]
def firstRevision = bim.getModelRevisions(model.uuid).min { it.version }
bim.setUsedRevision([firstRevision.uuid])
def oldWalls = bim.getElements('entity = "IfcWall"')
bim.setUsedRevision([])
def newWalls = bim.getElements('entity = "IfcWall"')
console.info("Стен было: " + oldWalls.size() + ", стало: " + newWalls.size())
getLogicGroupsFromProject - получение логических групп из текущего проекта
  • bim.getLogicGroupsFromProject() → Set<LogicGroup> - логические группы (условия поиска) проекта; их можно передавать в методы выборки

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

def groups = bim.getLogicGroupsFromProject()
for (def lg : groups) {
    console.info(ifcql.createIfcqlFromLogicGroup(lg) + " -> " + bim.getElements(lg).size())
}

Условия поиска

createCondition - функция создания условия поиска элементов

Условия объединяются операторами & (И) и | (ИЛИ). Вместо условия во все методы выборки можно передать строку IFCQL (см. ifcql).

Все аргументы — строки: bim.createCondition("attribute", "Width", "gt", 1000) вызовет ошибку, число нужно передавать как "1000" (или "" + value). Неизвестный параметр поиска (например, опечатка) молча превращается в class, неизвестный оператор — в eq.
Для параметра class поиск идёт по именам IFC-классов, найденным в проекте; если ничего не найдено, вернётся пустое условие. В моделях IFC2x3 стены часто имеют класс IfcWallStandardCase — для надёжности используйте bim.createCondition("class", "cont", "IfcWall").

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

def conditionWall = bim.createCondition("class", "eq", "IfcWall")
def conditionDoor = bim.createCondition("class", "eq", "IfcDoor")
bim.showElements(conditionWall | conditionDoor)
def elementCondition = bim.createCondition("attribute", "width", "gt", "1000")
bim.showElements(elementCondition)
def elementCondition = bim.createCondition("attribute", "BaseQuantities", "width", "gt", "1000")
bim.showElements(elementCondition)
def high = bim.createCondition("attribute", "OverallHeight>=1000")
def floor1 = bim.createCondition("floor", "=Этаж 1")
def elements = bim.getElements(high & floor1)
testElements - проверка, существуют ли элементы, соответствующие условию
  • bim.testElements(LogicGroup lg) → boolean - по условию поиска
  • bim.testElements(String expression) → boolean - по выражению IFCQL

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

if (!bim.testElements('entity = "IfcSpace"')) {
    console.info("В проекте нет помещений")
}
getCondition - добавление к строке IFCQL условия по списку моделей (логика многомодельного извлечения элементов)
  • bim.getCondition(String baseCondition, Set<String> modelNames) → String - возвращает строку baseCondition + " and " + modelNames[0] + " or " + modelNames[1] ...; элементы modelNames, кроме первого, уже содержащиеся в baseCondition, пропускаются. Если список пуст, возвращается baseCondition
Метод только склеивает строки, без скобок и кавычек: элементы modelNames должны быть готовыми фрагментами IFCQL (например, model = "АР"), а при нескольких моделях приоритет and/or может дать не ту выборку. Надёжнее собрать выражение самостоятельно со скобками.

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

def condition = bim.getCondition('entity = "IfcWall"', ['model = "АР"'] as Set)
// -> 'entity = "IfcWall" and model = "АР"'
def walls = bim.getElements(condition)

Элементы

getElements - функция получения списка элементов с полной информацией
  • bim.getElements(LogicGroup logicGroup) → Set<ElementExternal> - по условию поиска (в том числе сложному)
  • bim.getElements(String expression) → Set<ElementExternal> - по выражению IFCQL
  • bim.getElements(Collection<Object> elements) → Set<ElementExternal> - по списку идентификаторов: UUID, строк-UUID или IFC GlobalId
ПолеТип данных поляОписание поляМетод взятия данных поля
uuidUUIDидентификатор элементаgetUuid()
globalIdStringглобальный идентификатор элемента (IFC GlobalId)getGlobalId()
nameStringнаименование элементаgetName()
longNameStringполное наименование элементаgetLongName()
descriptionStringописание элементаgetDescription()
elementClassUUIDидентификатор класса элементаgetElementClass()
elementClassNameStringнаименование класса элемента ifcgetElementClassName()
elementClassTitleStringнаименование класса элементаgetElementClassTitle()
stringValueStringзначение элемента для атрибутных элементов в строковом видеgetStringValue()
doubleValuedoubleзначение элемента для атрибутных элементов в численном виде, если преобразование возможно, иначе будет 0getDoubleValue()
projectUUIDидентификатор проектаgetProject()
modelUUIDидентификатор моделиgetModel()
modelRevisionUUIDидентификатор ревизии моделиgetModelRevision()
buildingStoreyUUIDидентификатор элемента этажа (IfcBuildingStorey)getBuildingStorey()
parentUUIDидентификатор родительского элементаgetParent()
childrenSetдочерние элементы: атрибуты и группы атрибутовgetChildren()

Значение атрибута: element.getAttribute("Набор/Свойство") (никогда не возвращает null: при отсутствии атрибута имя пустое, stringValue — "", doubleValue — 0), несколько значений сразу — element.getAttributes("Свойство1", "Набор/Свойство2") → Map.

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

def conditionWall = bim.createCondition("class", "eq", "IfcWall")
def listWalls = bim.getElements(conditionWall)
for (ElementExternal element : listWalls) {
    def globalId = element.getGlobalId()
    console.info(globalId)
    // -> "INFO: 0Dtdg2chjBhhgnQ7zCqZkk"
}
def doors = bim.getElements('entity = "IfcDoor" and floor like "1"')
doors.each { d -> console.info(d.name + ": " + d.getAttribute("Pset_DoorCommon/FireRating").stringValue) }
def elements = new HashSet<Object>()
elements.add(UUID.fromString("e5a114d0-7de1-11ec-90d6-0242ac120003"))
elements.add("0Dtdg2chjBhhgnQ7zCqZkk")
def listElements = bim.getElements(elements)
for (ElementExternal element : listElements) {
    console.info(element.getGlobalId())
}
getElement - функция получения полной информации об элементе
  • bim.getElement(UUID elementUuid) → ElementExternal
  • bim.getElement(String elementStrUuid) → ElementExternal - для строки, не являющейся UUID, возвращает null
Каждый вызов — отдельный запрос к серверу. Для множества элементов используйте getElements со списком идентификаторов.

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

def element = bim.getElement(UUID.fromString("e5a114d0-7de1-11ec-90d6-0242ac120003"))
def globalId = element.getGlobalId()
// console.info(globalId) -> "INFO: 0Dtdg2chjBhhgnQ7zCqZkk"
def element = bim.getElement("e5a114d0-7de1-11ec-90d6-0242ac120003")
def globalId = element.getGlobalId()
// console.info(globalId) -> "INFO: 0Dtdg2chjBhhgnQ7zCqZkk"
getAllElementsByListUuidAndProjectUuid - взятие данных об элементах по списку их идентификаторов в проекте, в котором выполняется плагин
  • bim.getAllElementsByListUuidAndProjectUuid(Collection<UUID> listUuidElements) → Set<ElementExternal>

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

def uuids = bim.getUuidsElementsByProjectUuid().take(100)
def elements = bim.getAllElementsByListUuidAndProjectUuid(uuids)
getUuidsElementsByProjectUuid - взятие всех идентификаторов элементов из проекта, в котором выполняется плагин
  • bim.getUuidsElementsByProjectUuid() → Set<UUID>

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

def elemUuidsByProj = bim.getUuidsElementsByProjectUuid()
console.info("Элементов в проекте: " + elemUuidsByProj.size())
getElementsByModelUuid - функция получения списка элементов по идентификатору модели
  • bim.getElementsByModelUuid(UUID modelUuid) → Set<ElementExternal>

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

def model = bim.getProjectModels()[0]
def elements = bim.getElementsByModelUuid(model.uuid)
console.info(model.title + ": " + elements.size())
getElementByClassNamesAndModel - получение элементов модели по именам IFC-классов
  • bim.getElementByClassNamesAndModel(UUID model, Set<String> elementClassNames) → Set<ElementExternal>

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

def model = bim.getProjectModels()[0]
def elements = bim.getElementByClassNamesAndModel(model.uuid, ["IfcDoor", "IfcWindow"] as Set)
getElementByParentAndElementClassName - получение элементов по идентификатору родителя и имени IFC-класса
  • bim.getElementByParentAndElementClassName(UUID parent, String elementClassName) → Set<ElementExternal>

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

def storey = bim.getElements('entity = "IfcBuildingStorey"').find { it.name == "Этаж 1" }
def walls = bim.getElementByParentAndElementClassName(storey.uuid, "IfcWall")
findAncestor - получение предка (родительского элемента) элемента с его атрибутами
  • bim.findAncestor(ElementExternal element) → ElementExternal - то же, что bim.getElement(element.parent)

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

def door = bim.getElements('entity = "IfcDoor"')[0]
def parent = bim.findAncestor(door)
console.info(parent?.elementClassName + " " + parent?.name)
findDescendants - получение наследников (атрибутов) элемента с его атрибутами
  • bim.findDescendants(ElementExternal element) → Set<ElementExternal>

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

def storey = bim.getElements('entity = "IfcBuildingStorey"')[0]
def descendants = bim.findDescendants(storey)
console.info(storey.name + ": " + descendants.size())
getSuspectElements - функция получения списка подозрительных элементов проекта с полной информацией (длинные, отдельно стоящие и т.п.)
  • bim.getSuspectElements() → Set<ElementExternal> - по всему проекту
  • bim.getSuspectElements(UUID modelUuid) → Set<ElementExternal>
Аргумент modelUuid игнорируется: обе перегрузки возвращают подозрительные элементы всего проекта. Для одной модели отфильтруйте результат по element.model.

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

def model = bim.getProjectModels()[0]
def suspects = bim.getSuspectElements().findAll { it.model == model.uuid }
return bim.showElements(new ArrayList(suspects))

Элементы с геометрией

getGeometryElements - функция получения списка элементов с полной информацией и дополнительно параметрами геометрии
  • bim.getGeometryElements(LogicGroup logicGroup) → Set<GeometryElement> - по условию поиска (в том числе сложному)
  • bim.getGeometryElements(String expression) → Set<GeometryElement> - по выражению IFCQL
  • bim.getGeometryElements(Collection<Object> elements) → Set<GeometryElement> - по списку UUID или строк-UUID
Перегрузка со списком принимает только идентификаторы (UUID или строки-UUID): IFC GlobalId и сами объекты элементов молча пропускаются. Передавайте elements*.uuid.

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

def conditionWall = bim.createCondition("class", "eq", "IfcWall")
def listWalls = bim.getGeometryElements(conditionWall)
for (GeometryElement geometryElement : listWalls) {
    def globalId = geometryElement.getGlobalId()
    // console.info(globalId) -> "INFO: 0Dtdg2chjBhhgnQ7zCqZkk"
    def volumeElement = geometryElement.getVolume()
    // console.info(volumeElement.toString()) -> "INFO: 0.1"
}
def windows = bim.getGeometryElements('entity = "IfcWindow"').findAll { it.area > 2 }
def doors = bim.getElements('entity = "IfcDoor"')
def listElements = bim.getGeometryElements(new ArrayList(doors*.uuid))
for (GeometryElement geometryElement : listElements) {
    console.info(geometryElement.getName() + ": " + geometryElement.getVolume())
}
getGeometryElement - функция получения полной информации об элементе и дополнительно параметров геометрии
  • bim.getGeometryElement(UUID elementUuid) → GeometryElement
  • bim.getGeometryElement(String elementStrUuid) → GeometryElement - для строки, не являющейся UUID, возвращает null

GeometryElement содержит все поля getElements и дополнительно:

ПолеТип данных поляОписание поляМетод взятия данных поля
areadoubleплощадь поверхности элементаgetArea()
volumedoubleобъем элементаgetVolume()
areaXdoubleплощадь элемента вдоль оси OXgetAreaX()
areaYdoubleплощадь элемента вдоль оси OYgetAreaY()
areaZdoubleплощадь элемента вдоль оси OZ (проекция на план)getAreaZ()
largeAreadoubleмаксимальная площадь элемента из осейgetLargeArea()
largeDirectStringнаправление максимальной поверхностиgetLargeDirect()
boundSizeXdoubleрасстояние границ вдоль оси OXgetBoundSizeX()
boundSizeYdoubleрасстояние границ вдоль оси OYgetBoundSizeY()
boundSizeZdoubleрасстояние границ вдоль оси OZgetBoundSizeZ()
obbX, obbY, obbZdoubleразмеры ориентированного бокса (OBB) по его осямgetObbX(), getObbY(), getObbZ()
obbMaxdoubleмаксимальный габарит элемента по OBBgetObbMax()
boundsBoundsструктура границgetBounds()

Структура границ Bounds:

ПолеТип данных поляОписание поляМетод взятия данных поля
minVector3fвектор координат x, y, z минимальной точки границыgetMin()
maxVector3fвектор координат x, y, z максимальной точки границыgetMax()
double[ ]центр границgetCenter()
double[ ]размеры границ по осямgetLength()
Единицы area, volume и габаритов задаёт модель (обычно м², м³, м). Какая из сторон OBB является «длиной» линейного элемента, не гарантируется — для длины используйте obbMax или атрибут длины из модели.
Каждый вызов — отдельный запрос к серверу. Для множества элементов используйте getGeometryElements.

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

def geometryElement = bim.getGeometryElement(UUID.fromString("e5a114d0-7de1-11ec-90d6-0242ac120003"))
def globalId = geometryElement.getGlobalId()
// console.info(globalId) -> "INFO: 0Dtdg2chjBhhgnQ7zCqZkk"
def volumeElement = geometryElement.getVolume()
// console.info(volumeElement.toString()) -> "INFO: 0.1"
getGeometryElementA - специфичная функция получения полной информации об элементе и дополнительно параметров геометрии для расчета коллизий (сторона А, если существует)
  • bim.getGeometryElementA() → GeometryElement - элемент, идентификатор которого передан в параметре elementa; если параметра нет, возвращает null

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

def geometryElement = bim.getGeometryElementA()
if (geometryElement != null) {
    def globalId = geometryElement.getGlobalId()
    // console.info(globalId) -> "INFO: 16BLvbdfv9tvbtZs9KMly$"
    def volumeElement = geometryElement.getVolume()
    // console.info(volumeElement.toString()) -> "INFO: 1.34"
}
getGeometryElementB - специфичная функция получения полной информации об элементе и дополнительно параметров геометрии для расчета коллизий (сторона B, если существует)
  • bim.getGeometryElementB() → GeometryElement - элемент, идентификатор которого передан в параметре elementb; если параметра нет, возвращает null

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

def geometryElement = bim.getGeometryElementB()
if (geometryElement != null) {
    def globalId = geometryElement.getGlobalId()
    // console.info(globalId) -> "INFO: 16BLvbdfv9tvbtZs9KMly$"
    def volumeElement = geometryElement.getVolume()
    // console.info(volumeElement.toString()) -> "INFO: 1.01"
}
getGeometryElementByClassNamesAndModel - получение элементов модели с геометрией по именам IFC-классов
  • bim.getGeometryElementByClassNamesAndModel(UUID model, Set<String> elementClassNames) → Set<GeometryElement>

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

def model = bim.getProjectModels()[0]
def slabs = bim.getGeometryElementByClassNamesAndModel(model.uuid, ["IfcSlab"] as Set)
getGeometryElementByParentAndElementClassName - получение элементов с геометрией по идентификатору родителя и имени IFC-класса
  • bim.getGeometryElementByParentAndElementClassName(UUID parent, String elementClassName) → Set<GeometryElement>

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

def storey = bim.getElements('entity = "IfcBuildingStorey"').find { it.name == "Этаж 1" }
def spaces = bim.getGeometryElementByParentAndElementClassName(storey.uuid, "IfcSpace")
getGeometryElementsByModelsAndClassNames - выбор элементов с геометрией по именам IFC-классов в заданном наборе моделей
  • bim.getGeometryElementsByModelsAndClassNames(Set<UUID> models, Set<String> ifcNames) → Set<GeometryElement>

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

def modelUuids = bim.getProjectModels().findAll { it.title in ["АР", "КР"] }*.uuid as Set
def walls = bim.getGeometryElementsByModelsAndClassNames(modelUuids, ["IfcWall", "IfcWallStandardCase"] as Set)
getGeometryElementsByModelAndFloors - список элементов с геометрией по модели и этажам
  • bim.getGeometryElementsByModelAndFloors(UUID model, Set<UUID> parentUuids) → Set<GeometryElement> - parentUuids — идентификаторы элементов этажей (IfcBuildingStorey), как в поле buildingStorey элемента

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

def spaces = bim.getGeometryElements('entity = "IfcSpace"')
def space = spaces[0]
def sameFloor = bim.getGeometryElementsByModelAndFloors(space.model, [space.buildingStorey] as Set)
getGeometryElementsByModelAndFloorsAndClassNames - список элементов с геометрией по модели, этажам и именам IFC-классов
  • bim.getGeometryElementsByModelAndFloorsAndClassNames(UUID model, Set<UUID> buildStoreys, Set<String> elementClassNames) → Set<GeometryElement> - buildStoreys — идентификаторы элементов этажей (IfcBuildingStorey)

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

def storeys = bim.getElements('entity = "IfcBuildingStorey"')
def model = bim.getProjectModels()[0]
def storeyUuids = storeys.findAll { it.model == model.uuid }*.uuid as Set
def doors = bim.getGeometryElementsByModelAndFloorsAndClassNames(model.uuid, storeyUuids, ["IfcDoor"] as Set)
getGeometryElementsByModelAndParentsAndClassNames - список элементов с геометрией по модели, родителям и именам IFC-классов
  • bim.getGeometryElementsByModelAndParentsAndClassNames(UUID model, Set<UUID> parentUuids, Set<String> elementClassNames) → Set<GeometryElement>

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

def wall = bim.getGeometryElements('entity = "IfcWall"')[0]
def openings = bim.getGeometryElementsByModelAndParentsAndClassNames(wall.model, [wall.uuid] as Set, ["IfcOpeningElement"] as Set)
getGeometryElementsByRevision - получение элементов с геометрией по идентификатору ревизии модели
  • bim.getGeometryElementsByRevision(UUID revisionUuid) → Set<GeometryElement>

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

def model = bim.getProjectModels()[0]
def lastRevision = bim.getModelRevisions(model.uuid).max { it.version }
def elements = bim.getGeometryElementsByRevision(lastRevision.uuid)

Точная геометрия (сетки треугольников)

Вся геометрия GeometryObject возвращается в миллиметрах, в отличие от полей GeometryElement, единицы которых задаёт модель.
getGeometryObject - функция получения координат элемента для формирования объёмной модели или отрисовки на экране
  • bim.getGeometryObject(UUID elementUuid) → GeometryObject - результат кэшируется на время запуска плагина
ПолеТип данных поляОписание поляМетод взятия данных поля
uuidUUIDидентификатор элементаgetUuid()
nameStringнаименование элементаgetName()
indicesint[ ]геометрические индексы, указывающие на позицию координат точки в массиве вершин (координаты вершин треугольника идут тройками: 1,2,3 вершина и т.д)getIndices()
verticesdouble[ ]массив координат вершин (координаты идут тройками подряд X,Y,Z,X,Y,Z,...)getVertices()
normalsfloat[ ]массив нормалей вершинgetNormals()
colorsQuantizedint[ ]индексы цветовой раскраски триангулированной геометрииgetColorsQuantized()
colorsfloat[ ]массив цветовgetColors()
koeffdoubleкоэффициент трансформации координат (м в мм)getKoeff()
boundsBoundsструктура границgetBounds()
intметод получения длины массива индексовgetLength()
longметод получения количества треугольников геометрииgetTrianglesCount()

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

def geometryObject = bim.getGeometryObject(UUID.fromString("e5a114d0-7de1-11ec-90d6-0242ac120003"))
console.info("Треугольников: " + geometryObject.getTrianglesCount())
getGeometryObjects - функция получения списка координат элементов для формирования объёмной модели или отрисовки на экране
  • bim.getGeometryObjects(LogicGroup logicGroup) → Set<GeometryObject> - по условию поиска (в том числе сложному)
  • bim.getGeometryObjects(String expression) → Set<GeometryObject> - по выражению IFCQL
  • bim.getGeometryObjects(Collection<Object> elements) → Set<GeometryObject> - по списку UUID или строк-UUID
  • bim.getGeometryObjects(LogicGroup logicGroup, boolean needCache) → Set<GeometryObject>
  • bim.getGeometryObjects(String expression, boolean needCache) → Set<GeometryObject>
  • bim.getGeometryObjects(Collection<Object> elements, boolean needCache) → Set<GeometryObject>

При needCache = true полученная геометрия сохраняется в кэш, и последующие вызовы getGeometryObject для этих элементов не обращаются к серверу.

Перегрузка со списком принимает только идентификаторы (UUID или строки-UUID), объекты элементов молча пропускаются — передавайте elements*.uuid.

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

def condition = bim.createCondition("class", "eq", "IfcWall")
def geometryObjects = bim.getGeometryObjects(condition)
def pipes = bim.getGeometryElements('entity like "IfcPipe"')
def meshes = bim.getGeometryObjects(new ArrayList(pipes*.uuid), true)
getGeometryObjectsMap - функция получения списка координат элементов в виде карты «UUID элемента → геометрия»
  • bim.getGeometryObjectsMap(Collection<Object> elements) → Map<UUID, GeometryObject> - по списку UUID или строк-UUID; один запрос вместо вызова getGeometryObject для каждого элемента

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

def pipes = bim.getGeometryElements('entity like "IfcPipe"')
def objMap = bim.getGeometryObjectsMap(new ArrayList(pipes*.uuid))
pipes.each { p ->
    def mesh = objMap[p.uuid]
    if (mesh == null) return      // у элемента нет геометрии
    console.info(p.name + ": " + mesh.getTrianglesCount())
}
getOrientedBoundingBoxes - получение списка ориентированных ограничивающих боксов (Oriented Bounding Boxes) элементов по условию
  • bim.getOrientedBoundingBoxes(String expression) → Set<GeometryObject> - по выражению IFCQL; каждый OBB возвращается как GeometryObject (мм)

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

def boxes = bim.getOrientedBoundingBoxes('entity = "IfcBeam"')
boxes.each { b -> console.info(b.uuid.toString() + ": " + b.getVertices().length / 3 + " вершин") }
getElementPolygonsCountByUuid - получение количества полигонов элемента по его идентификатору
  • bim.getElementPolygonsCountByUuid(UUID elementUuid) → Long

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

def count = bim.getElementPolygonsCountByUuid(UUID.fromString("e5a114d0-7de1-11ec-90d6-0242ac120003"))
console.info("Полигонов: " + count)

Атрибуты

getAttributeValueByElementsAndNames - получение значения атрибута элемента по набору, к которому принадлежит атрибут, и имени атрибута
  • bim.getAttributeValueByElementsAndNames(ElementExternal elementExternal, String pSetName, String attrName) → String - строковое значение атрибута pSetName/attrName; null, если набора или атрибута нет

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

def walls = bim.getElements('entity = "IfcWall"')
walls.each { w ->
    def fireRating = bim.getAttributeValueByElementsAndNames(w, "Pset_WallCommon", "FireRating")
    console.info(w.name + ": " + (fireRating ?: "не задано"))
}
getGeometryElementAttributeValue - получение значения атрибута элемента по имени атрибута
  • bim.getGeometryElementAttributeValue(GeometryElement geometryElement, String propName) → String - ищет атрибут по имени по всему дереву атрибутов (в ширину); пустые значения, а также NOTDEFINED, Unknown, отсутствует считаются отсутствующими — тогда возвращается null

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

def doors = bim.getGeometryElements('entity = "IfcDoor"')
doors.each { d -> console.info(d.name + ": " + bim.getGeometryElementAttributeValue(d, "OverallHeight")) }
getElementAttributeChildValue - получение значения атрибута элемента по имени атрибута
  • bim.getElementAttributeChildValue(ElementExternal elementExternal, String propName) → String - рекурсивный поиск атрибута по имени; пустые значения, NOTDEFINED, Unknown, отсутствует считаются отсутствующими — тогда возвращается null
Метод может завершиться ошибкой NullPointerException на атрибутах без дочерних элементов. Надёжнее использовать element.getAttribute("Набор/Свойство") или getGeometryElementAttributeValue.

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

def element = bim.getElement(UUID.fromString("e5a114d0-7de1-11ec-90d6-0242ac120003"))
def tag = bim.getElementAttributeChildValue(element, "Tag") ?: ""
getElementPSetValue - получение набора атрибутов (Pset) элемента по имени
  • bim.getElementPSetValue(ElementExternal elementExternal, String psetName) → ElementAttribute - набор атрибутов верхнего уровня с указанным именем или null

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

def element = bim.getElements('entity = "IfcWall"')[0]
def pset = bim.getElementPSetValue(element, "Pset_WallCommon")
pset?.children?.each { a -> console.info(a.name + " = " + a.stringValue) }
addAttribute - добавление атрибутов для списка элементов
  • bim.addAttribute(Collection<Object> elements, String groupName, String attributeName, Object value, String unit, String power) → boolean - elements — элементы, UUID, строки-UUID или IFC GlobalId; groupName — имя набора атрибутов; unit — имя из справочника UnitType, power — имя из справочника PowerType
Метод изменяет данные проекта (атрибуты в модели). Вызывайте его, только когда это действительно требуется.

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

def walls = bim.getElements('entity = "IfcWall"')
bim.addAttribute(new ArrayList(walls), "Проверки", "Проверено", "да", "USERDEFINED", "NULL")

Этажи

getFloors - возвращает все этажи проекта
  • bim.getFloors() → List<Floor>
ПолеТип данных поляОписание поляМетод взятия данных поля
floorUuidUUIDидентификатор этажаgetFloorUuid()
nameStringимя этажаgetName()
elevationdoubleотметка (высота) этажаgetElevation()
absElevationdoubleабсолютная отметка этажаgetAbsElevation()
elementsSet<UUID>идентификаторы элементов IfcBuildingStorey, входящих в этажgetElements()
Floor.elements — это не элементы этажа, а идентификаторы элементов IfcBuildingStorey (один этаж проекта объединяет одноимённые уровни разных моделей). Связь элемента с этажом — через поле элемента buildingStorey.

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

def floors = bim.getFloors()
for (def floor : floors) {
    console.info(floor.getName())
    console.info(floor.getElevation())
    console.info(floor.getAbsElevation())
}
def storeyToFloor = [:]
bim.getFloors().each { f -> f.elements?.each { storeyToFloor[it] = f } }
def doors = bim.getElements('entity = "IfcDoor"')
doors.each { d -> console.info(d.name + ": " + storeyToFloor[d.buildingStorey]?.name) }
getFloor - возвращает этаж конкретного элемента
  • bim.getFloor(UUID elementUuid) → Floor - по идентификатору элемента
  • bim.getFloor(ElementExternal element) → Floor - по самому элементу
Каждый вызов — отдельный запрос к серверу. Для большого числа элементов получите этажи один раз через getFloors и сопоставляйте по element.buildingStorey (или используйте getElementFloor).

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

def conditionModel = bim.createCondition("model", "eq", "АР")
def elements = bim.getGeometryElements(conditionModel)
for (def element : elements) {
    def floor = bim.getFloor(element)
    double offset = floor.getElevation() + 18.5
}
getBuildingStoreysFloors - получение этажей проекта по идентификаторам элементов IfcBuildingStorey
  • bim.getBuildingStoreysFloors(Set<UUID> buildingStoreyUuids) → Set<Floor>

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

def spaces = bim.getElements('entity = "IfcSpace"')
def floors = bim.getBuildingStoreysFloors(spaces*.buildingStorey.findAll { it != null } as Set)
floors.each { f -> console.info(f.name) }
getElementFloor - определение этажа элемента из заданного списка этажей
  • bim.getElementFloor(GeometryElement geometryElement, List<Floor> floors) → Floor - этаж, в elements которого входит buildingStorey элемента, или null; выполняется без запроса к серверу

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

def floors = bim.getFloors()
def spaces = bim.getGeometryElements('entity = "IfcSpace"')
spaces.each { s -> console.info(s.name + ": " + bim.getElementFloor(s, floors)?.name) }
testSameFloor - проверка, находятся ли два элемента на одном этаже
  • bim.testSameFloor(Floor floor, GeometryElement geometryElement1, GeometryElement geometryElement2) → boolean - true, если buildingStorey обоих элементов входит в указанный этаж

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

def floors = bim.getFloors()
def door = bim.getGeometryElements('entity = "IfcDoor"')[0]
def space = bim.getGeometryElements('entity = "IfcSpace"')[0]
def floor = bim.getElementFloor(door, floors)
if (floor != null && bim.testSameFloor(floor, door, space)) {
    console.info("Дверь и помещение на одном этаже: " + floor.name)
}
extractFloorNameNumber - извлечение номера этажа из его названия
  • bim.extractFloorNameNumber(String storeyName) → Integer - первое целое число в названии после удаления отметок с дробной частью (+3.300, -0,150); 0, если числа нет; -Integer.MAX_VALUE для пустого названия

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

bim.extractFloorNameNumber("Этаж 3 (+6.600)")   // 3
bim.extractFloorNameNumber("-1 этаж")           // -1
def sorted = bim.getFloors().sort { bim.extractFloorNameNumber(it.name) }

Отображение на модели

Методы этого раздела сами ничего не подсвечивают: в плагине «Выборка» на модели отображается то, что вернула функция start(), — результат bim.showElements(...) или bim.showGroupElements().
showElements - функция отображения на экране списка элементов (выбор/подсветка на модели)
  • bim.showElements(LogicGroup logicGroup) → Set<String> - по условию поиска (в том числе сложному)
  • bim.showElements(String expression) → Set<String> - по выражению IFCQL
  • bim.showElements(Collection<Object> elements) → Set<String> - по списку элементов (ElementExternal/GeometryElement), UUID, строк-UUID или IFC GlobalId; допускается Set
  • bim.showElements(ElementExternal... elements) → Set<String> - по одному или нескольким элементам, перечисленным через запятую
  • bim.showElement(ElementExternal element) → Set<String> - показ одного элемента

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

def conditionWall = bim.createCondition("class", "eq", "IfcWall")
def conditionDoor = bim.createCondition("class", "eq", "IfcDoor")
return bim.showElements(conditionWall | conditionDoor)
return bim.showElements('entity = "IfcDoor" and floor like "1"')
return bim.showElements(["dhb487dbcsndb", "salndhkjfnjkenkjsd", "sdfsdfadsdfsad"])
return bim.showElements([UUID.fromString("ac178efe-7e8d-11ec-90d6-0242ac120003"), UUID.fromString("e5a114d0-7de1-11ec-90d6-0242ac120003")])
def elementCondition = bim.createCondition("attribute", "width", "gt", "1000")
def elements = bim.getElements(elementCondition)
return bim.showElements(elements)
createGroupElements - создание (объединение) элементов в группы с указанием цвета в формате HEX
  • bim.createGroupElements(String color, LogicGroup logicGroup) - цвет, условие поиска
  • bim.createGroupElements(String color, List<ElementExternal> elements) - цвет, список элементов
  • bim.createGroupElements(String color, Set<String> elements) - цвет, набор идентификаторов элементов (строки)

Цвет задаётся в формате #RRGGBB. Созданные группы отображаются методом showGroupElements.

Набор (Set) элементов передавать нельзя — он попадёт в перегрузку с идентификаторами и вызовет ошибку. Элементы оборачивайте в список: new ArrayList(set). Список строк-идентификаторов, наоборот, передавайте набором: ids as Set.

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

def conditionDoor = bim.createCondition("class", "eq", "IfcDoor")
bim.createGroupElements("#FF9933", conditionDoor)
return bim.showGroupElements()
def conditionDoor = bim.createCondition("class", "eq", "IfcDoor")
def elements = bim.getElements(conditionDoor)
bim.createGroupElements("#FF9933", new ArrayList(elements))
return bim.showGroupElements()
bim.createGroupElements("#FF9933", ["dhb487dbcsndb", "salndhkjfnjkenkjsd", "sdfsdfadsdfsad"] as Set)
return bim.showGroupElements()
showGroupElements - функция отображения/подсветки на экране ранее созданных групп элементов
  • bim.showGroupElements() → List<GroupElements> - группы, созданные методом createGroupElements

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

def start() {
    bim.createGroupElements("#FF0000", bim.createCondition("class", "eq", "IfcDoor"))
    def big = bim.getGeometryElements('entity = "IfcWindow"').findAll { it.area > 2 }
    bim.createGroupElements("#00AA00", new ArrayList(big))
    return bim.showGroupElements()
}

3D-виды и чертежи

getDrawingOnModels - получение списка 3D-видов
  • bim.getDrawingOnModels() → List<DrawingOnModel> - основные поля: uuid, title, modelUuid, drawingPageUuid, parentUuid, isFolder, baseElevation

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

def views = bim.getDrawingOnModels()
views.findAll { !it.isFolder() }.each { v -> console.info(v.title) }
getDrawingOnModelTags - получение списка тегов 3D-видов
  • bim.getDrawingOnModelTags() → List<DrawingOnModelTag> - поля: drawingOnModelUuid, name, value, projectUuid

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

def showOnlyLayers = bim.getDrawingOnModelTags().findAll { it.name == "Этаж" }.size() > 0
getDrawingOnModelTagsByDrawingOnModelUuid - получение списка тегов конкретного 3D-вида
  • bim.getDrawingOnModelTagsByDrawingOnModelUuid(UUID drawingOnModelUuid) → List<DrawingOnModelTag>

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

def view = bim.getDrawingOnModels()[0]
def tags = bim.getDrawingOnModelTagsByDrawingOnModelUuid(view.uuid)
tags.each { t -> console.info(t.name + " = " + t.value) }
getDrawingNameAndPage - получение имени чертежа и номера листа по идентификатору листа
  • bim.getDrawingNameAndPage(UUID drawingPage) → String

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

def view = bim.getDrawingOnModels().find { it.drawingPageUuid != null }
if (view) {
    console.info(bim.getDrawingNameAndPage(view.drawingPageUuid))
}

Коллизии и правила проверки

getProjectCollisions - функция получения списка коллизий проекта
  • bim.getProjectCollisions() → List<Collision>
  • bim.getProjectCollisions(String key) → List<Collision> - с указанием нужного статуса коллизий
ПолеТип данных поляОписание поляМетод взятия данных поля
uuidUUIDидентификатор коллизииgetUuid()
statusCollisionStatus: NEW, WORK, SOLVED, ALLOWEDстатус коллизииgetStatus()
elementAUuidUUIDидентификатор элемента стороны 1, если естьgetElementAUuid()
elementBUuidUUIDидентификатор элемента стороны 2, если естьgetElementBUuid()
modelAUuidUUIDидентификатор модели стороны 1, если естьgetModelAUuid()
modelBUuidUUIDидентификатор модели стороны 2, если естьgetModelBUuid()
globalIdAStringглобальный идентификатор элемента стороны 1, если естьgetGlobalIdA()
globalIdBStringглобальный идентификатор элемента стороны 2, если естьgetGlobalIdB()
createDateInstantдата формирования коллизииgetCreateDate()
shortDescriptionStringкраткое описание коллизииgetShortDescription()
descriptionStringописание коллизииgetDescription()
finderStringидентификатор расчетного механизма, по которому получена коллизияgetFinder()
typeStringтип коллизииgetType()
valueStringзначение коллизииgetValue()
noteStringзаметка по коллизииgetNote()
lastUpdateDateInstantдата последнего изменения по коллизииgetLastUpdateDate()
isAcceptableBooleanфлаг приемлемости коллизииgetIsAcceptable()

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

def listCollisions = bim.getProjectCollisions()
for (def c : listCollisions) {
    def globalIdA = c.getGlobalIdA()
    // console.info(globalIdA) -> "INFO: 0Dtdg2chjBhhgnQ7zCqZkk"
    def globalIdB = c.getGlobalIdB()
    // console.info(globalIdB) -> "INFO: js89njhsihd9ffsd3kmll9hln0"
}
def listCollisions = bim.getProjectCollisions("NEW")
for (def c : listCollisions) {
    console.info(c.getGlobalIdA() + " / " + c.getGlobalIdB())
}
getModelCollisions - функция получения списка коллизий модели
  • bim.getModelCollisions(UUID modelUuid) → List<Collision> - по идентификатору модели
  • bim.getModelCollisions(UUID modelUuid, String key) → List<Collision> - по идентификатору модели и статусу коллизий

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

def listCollisions = bim.getModelCollisions(UUID.fromString("ac178efe-7e8d-11ec-90d6-0242ac120003"))
for (def c : listCollisions) {
    console.info(c.getGlobalIdA() + " / " + c.getGlobalIdB())
}
def listCollisions = bim.getModelCollisions(UUID.fromString("ac178efe-7e8d-11ec-90d6-0242ac120003"), "NEW")
for (def c : listCollisions) {
    console.info(c.getGlobalIdA() + " / " + c.getGlobalIdB())
}
getCollisionsForReport - функция получения списка коллизий для отчета
  • bim.getCollisionsForReport() → CollisionsReport - коллизии для отчёта текущего пользователя: collisions — список коллизий, tableSettings — настройки колонок таблицы. Результат передаётся в file.collisionsToPdf

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

def collisionList = bim.getCollisionsForReport()
def param = [:]
param.put("pageSize", "3")
param.put("fontSize", "12")
file.collisionsToPdf(template, collisionList, param)
getCollisionInfo - получение объекта CollisionInfo для выделенной коллизии (коллизии, назначенной к задаче)
  • bim.getCollisionInfo(UUID collisionUuid) → CollisionInfo - поля: uuid, collisionUuid, description

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

def attachments = bim.getTaskAttachments(task.uuid)
for (def attachment : attachments) {
    if (attachment.collision != null) {
        def collisionInfo = bim.getCollisionInfo(attachment.collision)
        console.info(collisionInfo.description)
    }
}
filterGeometryElementsToCheck - отбор элементов, подлежащих проверке по правилу, с учётом переданных опций и родительского правила (если оно существует)
  • bim.filterGeometryElementsToCheck(int parentOption, Set<Object> parentElemUUids, Set<GeometryElement> ruleElements) → Set<GeometryElement>

Используется в правилах проверки с цепочкой проверок: parentOption и список parentElements приходят в params. Если parentElemUUids пуст или null, возвращаются ruleElements. При parentOption = 1, 2 или 3 возвращаются элементы родительского правила, входящие в ruleElements; при 0 — ruleElements.

parentOption приходит числом либо строкой "-1" — разбирайте через строку: Integer.parseInt((params.get("parentOption") ?: "-1").toString()). Фильтруйте этим методом только проверяемый набор: вспомогательные выборки (мебель, окружающие стены) фильтровать не нужно.

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

int parentOption = Integer.parseInt((params.get("parentOption") ?: "-1").toString())
def parentRaw = params.get("parentElements")
Set parentElemUuids = (parentRaw instanceof Collection) ? (parentRaw as Set) : null
def ruleElements = bim.getGeometryElements(params.get("spaceCondition"))
def elements = bim.filterGeometryElementsToCheck(parentOption, parentElemUuids, ruleElements)
filterGeometryObjectToCheck - отбор геометрических объектов, подлежащих проверке по правилу, с учётом переданных опций и родительского правила (если оно существует)
  • bim.filterGeometryObjectToCheck(int parentOption, Set<Object> parentElemUUids, Set<GeometryObject> ruleElements) → Set<GeometryObject> - аналог filterGeometryElementsToCheck для GeometryObject

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

int parentOption = Integer.parseInt((params.get("parentOption") ?: "-1").toString())
def parentRaw = params.get("parentElements")
Set parentElemUuids = (parentRaw instanceof Collection) ? (parentRaw as Set) : null
def meshes = bim.getGeometryObjects('entity = "IfcSpace"')
def toCheck = bim.filterGeometryObjectToCheck(parentOption, parentElemUuids, meshes)
setRuleParam - заполнение данных в объект RuleParam
  • bim.setRuleParam(String condition, Map<String, Object> paramsMap) → RuleParam - condition записывается в mainCondition (если не null), paramsMap — в params (если не пуст)

Используется при подготовке параметров встроенного правила Element Wall Validation Rule: метод вызывается для каждой строки настроек, ключи в paramsMap — с индексом строки (startOption0, operator0 …), а результаты собираются в карту paramsMap правила.

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

def ruleParams = [:]                      // параметры встроенного правила
def paramsMap = [:] as LinkedHashMap
for (int i = 0; i < 12; i++) {
    if (!params.get("startOption" + i)) continue
    def map = [:] as LinkedHashMap
    map.put("startOption" + i, params.get("startOption" + i))
    map.put("endOption" + i, params.get("endOption" + i))
    map.put("directionOption" + i, params.get("directionOption" + i))
    map.put("operator" + i, params.get("operator" + i))
    map.put("distanceValue" + i, Double.parseDouble((params.get("distanceValue" + i) ?: "0").toString()))
    paramsMap.put("ruleParams" + i, bim.setRuleParam("Default_Condition", map))
}
ruleParams.put("paramsMap", paramsMap)

Задачи

getProjectTasks - получение списка всех задач проекта
  • bim.getProjectTasks() → List<Task> - каждая задача представляет из себя следующую структуру:
ПолеТип данных поляОписание поляМетод взятия данных поля
uuidUUIDидентификатор задачиgetUuid()
titleStringзаголовок задачиgetTitle()
nameStringнаименование задачиgetName()
descriptionStringописание задачиgetDescription()
responderUuidUUIDидентификатор пользователя, на которого назначена задачаgetResponderUuid()
creatorUuidUUIDидентификатор пользователя, создавшего задачуgetCreatorUuid()
priorityPriorityType: LOW, NORMAL, HIGHприоритет задачиgetPriority()
taskTypeTaskType: TASK, BUG, IMPROVEMENTтип задачиgetTaskType()
createDateInstantдата создания задачиgetCreateDate()
completeStatusCompleteStatusType: NEW, DISCUSS, PROGRESS, READY, CLOSEDстатус задачиgetCompleteStatus()
pluginStatusStringпользовательский статус задачиgetPluginStatus()
startDateInstantдата начала задачиgetStartDate()
stopDateInstantдата окончания задачиgetStopDate()
escalationDateInstantдата эскалацииgetEscalationDate()
worldXdoubleкоординаты метки, привязанной к задачеgetWorldX()
worldYdoubleкоординаты метки, привязанной к задачеgetWorldY()
worldZdoubleкоординаты метки, привязанной к задачеgetWorldZ()
entityIdStringидентификатор элемента, если естьgetEntityId()
responderProfileответственный за задачуgetResponder()
workersList<Profile>исполнителиgetWorkers()
groupResponderOrgGroupFullDTOответственная группаgetGroupResponder()
groupWorkersList<OrgGroupFullDTO>группы исполнителейgetGroupWorkers()
childrenList<Task>подзадачиgetChildren()

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

def listTasks = bim.getProjectTasks()
for (Task task : listTasks) {
    def taskUuid = task.getUuid()
    // console.info(taskUuid.toString()) -> "INFO: c73df7aa-7ddd-11ec-90d6-0242ac120003"
}
getTask - получение задачи по её идентификатору
  • bim.getTask(UUID taskUuid) → Task

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

def task = bim.getTask(mainTask.taskUuid)
getTasks - получение списка задач
  • bim.getTasks(List<UUID> taskUuids) → List<Task> - по списку идентификаторов
  • bim.getTasks(String startDate, String endDate) → List<Task> - все задачи за заданный период; даты принимаются в форматах dd.MM.yyyy, yyyy-MM-dd или ISO-8601 (2026-09-01T00:00:00Z)

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

def tasks = bim.getTasks(taskUuidsList)
def tasks = bim.getTasks("01.09.2026", "30.09.2026")
getTasksTree - получение дерева задач проекта, в котором выполняется плагин (только родители, подзадачи — в поле children)
  • bim.getTasksTree() → List<Task>

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

def tasksTree = bim.getTasksTree()
tasksTree.each { t -> console.info(t.title + ": подзадач " + (t.children?.size() ?: 0)) }
getWorkSpacesCurrentProject - получение идентификаторов рабочих пространств проекта, в котором выполняется плагин
  • bim.getWorkSpacesCurrentProject() → List<UUID>

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

def workSpaceUuids = bim.getWorkSpacesCurrentProject()
getTasksCurrentWorkSpace - получение плоского списка всех задач указанного рабочего пространства (родители и дети)
  • bim.getTasksCurrentWorkSpace(UUID workSpaceUuid) → List<Task>

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

def workSpaceUuid = bim.getWorkSpacesCurrentProject()[0]
def tasks = bim.getTasksCurrentWorkSpace(workSpaceUuid)
getTasksTreeCurrentWorkspace - получение дерева задач указанного рабочего пространства (только родители)
  • bim.getTasksTreeCurrentWorkspace(UUID workSpaceUuid) → List<Task>

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

def workSpaceUuid = bim.getWorkSpacesCurrentProject()[0]
def currentTasksTree = bim.getTasksTreeCurrentWorkspace(workSpaceUuid)
getLateTasks - получение списка всех просроченных задач, либо задач на эскалации
  • bim.getLateTasks() → List<Task>

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

def taskList = bim.getLateTasks()
getFirstEscalationTasks - получение списка просроченных задач (первая эскалация)
  • bim.getFirstEscalationTasks() → List<Task>

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

def firstEscalationTasks = bim.getFirstEscalationTasks()
getSecondEscalationTasks - получение списка задач второй эскалации
  • bim.getSecondEscalationTasks() → List<Task>

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

def secondEscalationTasks = bim.getSecondEscalationTasks()
saveTask - создание и/или сохранение задачи
  • bim.saveTask(Task task) → Task - создаёт новую задачу или изменяет существующую; дальше работайте с возвращённым объектом

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

def task = new Task()
task.title = "Проверить узел"
task.startDate = bim.getStartDate()
task.stopDate = bim.getEndDate()
task = bim.saveTask(task)
getLinkToTask - получение ссылки на проект с параметрами для открытия конкретной задачи
  • bim.getLinkToTask(UUID taskUuid) → String

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

def url = bim.getLinkToTask(task.uuid)
getTaskComments - получение списка всех комментариев задачи по её идентификатору
  • bim.getTaskComments(UUID taskUuid) → List<Comment>
ПолеТип данных поляОписание поляМетод взятия данных поля
uuidUUIDидентификатор комментарияgetUuid()
createDateInstantдата создания комментарияgetCreateDate()
textStringкомментарийgetText()
authorUuidUUIDавтор комментарияgetAuthorUuid()

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

def listComments = bim.getTaskComments(UUID.fromString("c73df7aa-7ddd-11ec-90d6-0242ac120003"))
for (Comment comment : listComments) {
    def authorUuid = comment.getAuthorUuid()
    console.info(authorUuid.toString() + ": " + comment.getText())
}
getTaskAttachments - получение списка всех вложений задачи по её идентификатору
  • bim.getTaskAttachments(UUID taskUuid) → List<Attachment>
ПолеТип данных поляОписание поляМетод взятия данных поля
uuidUUIDидентификатор вложенияgetUuid()
fileStringссылка на файл вложенияgetFile()
nameStringнаименование вложенияgetName()
sourceDataStringинформация о вложении (JSON)getSourceData()
sourceTypeSourceType: VIEW, FILE, DRAWINGCOMMENT, IMAGEтип вложенияgetSourceType()
createDateInstantдата создания вложенияgetCreateDate()
contentTypeStringтип контентаgetContentType()
creatorUuidUUIDидентификатор автора вложенияgetCreatorUuid()
collisionUUIDидентификатор коллизии, если вложение связано с коллизиейgetCollision()

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

def listAttachments = bim.getTaskAttachments(UUID.fromString("c73df7aa-7ddd-11ec-90d6-0242ac120003"))
for (Attachment attachment : listAttachments) {
    def createDate = attachment.getCreateDate()
    console.info(createDate.toString())
    // -> "INFO: 2022-01-21T10:01:12.567Z"
}
getCommentFromTaskAttachment - получение текста комментария из sourceData вложения
  • bim.getCommentFromTaskAttachment(String sourceData) → String - значение поля comment из JSON sourceData; пустая строка, если его нет или JSON некорректен

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

def info = bim.getCommentFromTaskAttachment(attachment.sourceData)
getTaskForm - получение списка данных формы задачи по идентификатору задачи
  • bim.getTaskForm(UUID taskUuid) → List<FormData> - основные поля: uuid, form, fields (значения полей формы), createdDate, modifiedDate

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

def taskForm = bim.getTaskForm(UUID.fromString("94e8e236-510b-4325-8b3a-15e317924bb2"))
getTaskWorkers - получение списка профилей исполнителей задачи по её идентификатору
  • bim.getTaskWorkers(UUID taskUuid) → List<Profile>

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

def taskWorkers = bim.getTaskWorkers(UUID.fromString("94e8e236-510b-4325-8b3a-15e317924bb2"))
taskWorkers.each { p -> console.info(p.name + " " + p.email) }
getFilesDownloadLinks - получение списка ссылок на скачивание файлов, которые вложены в задачи проекта
  • bim.getFilesDownloadLinks(List<UUID> attachmentsUuid) → List<String> - ссылки на скачивание файлов по идентификаторам вложений задач. Ссылка действительна в течение одного дня; изменить срок можно методом editTokenExpiredDate. Метод рекомендуется использовать при формировании отчетов
Каждая строка результата — не чистый URL, а начало HTML-ссылки: <p><a href=" + адрес. Чтобы получить адрес, уберите префикс: link.replace('<p><a href="', '').

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

def tasks = bim.getProjectTasks()
def uuids = []
for (def task : tasks) {
    for (def attachment : bim.getTaskAttachments(task.uuid)) {
        if (attachment != null)
            uuids.add(attachment.uuid)
    }
}
def downloadLinks = bim.getFilesDownloadLinks(uuids)
def urls = downloadLinks.collect { it.replace('<p><a href="', '') }
console.info(urls.toString())
editTokenExpiredDate - позволяет изменить количество дней, через сколько токен для скачивания файлов станет недействительным
  • bim.editTokenExpiredDate(UUID tokenUuid, int day) → UUID

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

UUID uuid = UUID.fromString("94e8e236-510b-4325-8b3a-15e317924bb2")
bim.editTokenExpiredDate(uuid, 2)

Пользовательские статусы и параметры задач

registerProcessStatuses - регистрация списка пользовательских статусов для задач
  • bim.registerProcessStatuses(List<PluginTaskStatus> statusList) → List<Object> - список статусов передаётся списком карт [name: …, title: …]: name — системное имя статуса, title — отображаемое название
name статуса после внедрения плагина не меняйте — на него ссылаются задачи; title можно менять свободно.

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

def start() {
    bim.registerProcessStatuses([
            [name: "new", title: "Открыта"],
            [name: "check", title: "На проверке"],
            [name: "complete", title: "Выполнена"]
    ])
    bim.initPluginTaskStatus()
}
initPluginTaskStatus - инициализация пользовательских статусов в проекте
  • bim.initPluginTaskStatus()

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

bim.initPluginTaskStatus()
getProcessStatuses - получение списка пользовательских статусов для активного рабочего пространства
  • bim.getProcessStatuses() → List<Object>

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

def listProcessStatuses = bim.getProcessStatuses()
setPluginStatusToTask - изменение пользовательского статуса задачи по идентификатору задачи и статусу
  • bim.setPluginStatusToTask(UUID taskUuid, String status) → Task - status — name зарегистрированного статуса

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

task = bim.setPluginStatusToTask(task.uuid, "check")
saveParamsToTask - сохранение списка пользовательских параметров к задаче
  • bim.saveParamsToTask(UUID taskUuid, Map<String, Object> params, boolean showInTask) → List<PluginTaskParam> - сохранение списка пользовательских параметров к задаче: идентификатор задачи, параметры, показ в карточке задачи
  • bim.saveParamsToTask(UUID taskUuid, String name, Object value, boolean showInTask) → List<PluginTaskParam> - сохранение одного пользовательского параметра: идентификатор задачи, имя параметра, значение, показ в карточке задачи

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

bim.saveParamsToTask(task.uuid, "isLate", true, true)
bim.saveParamsToTask(task.uuid, [checked: true, checkDate: bim.getRuDate(Instant.now())], false)
getParamsToTask - получение списка параметров задачи по её идентификатору
  • bim.getParamsToTask(UUID taskUuid) → List<PluginTaskParam> - поля параметра: uuid, taskUuid, name, value, showInTask

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

def taskParams = bim.getParamsToTask(task.uuid)
def isLate = taskParams.find { it.name == "isLate" }?.value
getTaskParams - получение списка параметров для всех задач рабочего пространства
  • bim.getTaskParams() → List<PluginTaskParam>

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

def taskParams = bim.getTaskParams()
editParam - редактирование параметра задачи по идентификатору параметра, имени параметра и значению
  • bim.editParam(UUID paramUuid, String name, Object param) → PluginTaskParam

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

def param = bim.getParamsToTask(task.uuid).find { it.name == "isLate" }
bim.editParam(param.uuid, "isLate", false)
deleteParam - удаление параметра задачи по идентификатору параметра
  • bim.deleteParam(UUID paramUuid)

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

bim.deleteParam(paramUuid)
deleteParams - удаление параметров
  • bim.deleteParams(UUID taskUuid) - удаление всех параметров задачи по идентификатору задачи
  • bim.deleteParams(List<PluginTaskParam> params) - удаление списка параметров

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

bim.deleteParams(task.uuid)
def params = bim.getParamsToTask(task.uuid).findAll { it.name.startsWith("tmp") }
bim.deleteParams(params)

Пользователи и группы организации

getProfile - получение данных о пользователе по его идентификатору UUID
  • bim.getProfile(UUID profileUuid) → Profile - основные поля: uuid, name, email, phone, archive

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

def profile = bim.getProfile(UUID.fromString("ef952aa8-7ddc-11ec-90d6-0242ac120003"))
def profileUuid = profile.getUuid()
// console.info(profileUuid.toString()) -> "INFO: ef952aa8-7ddc-11ec-90d6-0242ac120003"
getProfiles - получение данных о пользователях по их идентификаторам UUID
  • bim.getProfiles(List<UUID> profilesUuid) → List<Profile>

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

def listProfilesData = bim.getProfiles(profilesUuid)
getOrgGroups - получение списка групп организации
  • bim.getOrgGroups() → List<OrgGroupFullDTO> - все группы организации
  • bim.getOrgGroups(List<UUID> orgGroups) → List<OrgGroupFullDTO> - группы по идентификаторам
  • bim.getOrgGroups(String groupName) → List<OrgGroupFullDTO> - группы с одинаковым или схожим названием

Поля группы: uuid, title, organization, profiles (идентификаторы пользователей группы).

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

def groups = bim.getOrgGroups("Дежурная смена")
getOrgGroup - получение группы организации
  • bim.getOrgGroup(UUID orgGroup) → OrgGroupFullDTO - получение группы организации по её идентификатору
  • bim.getOrgGroup(String groupName) → OrgGroupFullDTO - получение группы организации по её названию

Если группа не найдена, возвращается null.

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

def headEngineer = bim.getOrgGroup("Главный инженер")
if (headEngineer != null) {
    console.info("Пользователей в группе: " + headEngineer.profiles.size())
}
setGroupResponderToTask - назначение группы организации ответственным за задачу по идентификатору задачи и имени группы
  • bim.setGroupResponderToTask(UUID taskUuid, String groupName) → Task

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

task = bim.setGroupResponderToTask(task.uuid, "Главный инженер")
setGroupWorkersToTask - назначение групп организации исполнителями задачи по идентификатору задачи и списку названий групп
  • bim.setGroupWorkersToTask(UUID taskUuid, List<String> titles) → Task

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

task = bim.setGroupWorkersToTask(task.uuid, [bim.calculateDuty()])
deleteDutyShift - удаление назначенной к задаче группы, название которой содержит указанную строку
  • bim.deleteDutyShift(Task task, String groupName) → Task

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

def task = bim.getTask(mainTask.taskUuid)
task = bim.deleteDutyShift(task, "Дежурная смена")

Техническое обслуживание (ТО)

getProjectMaintenanceTasks - получение списка всех задач ТО проекта
  • bim.getProjectMaintenanceTasks() → List<MaintenanceTask> - поля: uuid, title, maintenanceDate, maintenanceDoneDate, equipment, status, taskUuid, dutyNum

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

def mTasks = bim.getProjectMaintenanceTasks()
getMaintenanceTasks - получение списка задач ТО по списку идентификаторов
  • bim.getMaintenanceTasks(List<UUID> taskUuids) → List<MaintenanceTask>

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

def taskList = bim.getMaintenanceTasks(taskUuids)
getOrCreateTaskFromMaintenance - создание или получение задачи на запланированное ТО по идентификатору задачи ТО
  • bim.getOrCreateTaskFromMaintenance(UUID maintenanceTask) → Task

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

def onStartMaintenanceTask(def mTasks) {
    mTasks.each { mTask ->
        def task = bim.getOrCreateTaskFromMaintenance(mTask.uuid)
    }
}
calculateDuty - получение номера дежурной группы
  • bim.calculateDuty() → String - номер дежурной группы на следующий день («Дежурная смена N»)
  • bim.calculateDuty(String groupName) → String - номер группы на следующий день по имени группы («groupName N»)
  • bim.calculateDuty(MaintenanceTask mTask) → String - номер дежурной группы на дату проведения ТО по задаче обслуживания
  • bim.calculateDuty(String groupName, MaintenanceTask mTask) → String - номер группы на дату проведения ТО по имени группы и задаче обслуживания

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

def numberGroup = bim.calculateDuty("Дежурная смена", mTask)
// -> "Дежурная смена 2"

Даты и вспомогательные методы

Методы дат возвращают Instant (момент времени в UTC). «Следующий день» и «через N дней» отсчитываются по дате UTC.
getStartDate - получение даты на начало следующего дня
  • bim.getStartDate() → Instant

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

task.startDate = bim.getStartDate()
getEndDate - получение даты на конец следующего дня
  • bim.getEndDate() → Instant

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

task.stopDate = bim.getEndDate()
getAmountDate - получение даты (начало дня) через указанное количество дней
  • bim.getAmountDate(int day) → Instant

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

task.escalationDate = bim.getAmountDate(2)
getDate - получение даты из строки
  • bim.getDate(String dateStr) → Instant - получение даты из строки формата dd.MM.yyyy
  • bim.getDate(String dateStr, String formatStr) → Instant - получение даты из строки по заданному формату

Если строку не удалось разобрать, возвращается null.

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

def date = bim.getDate("31.12.2026")
def isoDate = bim.getDate("2026-12-31", "yyyy-MM-dd")
getDateTime - получение даты и времени из строки
  • bim.getDateTime(String dateStr) → Instant - строка формата dd.MM.yyyy HH:mm; null, если строку не удалось разобрать

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

def date = bim.getDateTime("31.12.2026 18:00")
getRuDate - получение даты в RU-формате
  • bim.getRuDate(Instant date) → String - дата в формате dd.MM.yyyy HH:mm по московскому времени; для null — текущие дата и время

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

console.info("Задача создана " + bim.getRuDate(task.createDate))
parseOptionValueToList - преобразование значения параметра опции в список
  • bim.parseOptionValueToList(String optionValue) → List<String> - извлекает все значения в двойных кавычках; для null или пустой строки возвращает пустой список
Значение полей мультивыбора формы (form.addSelectModel, addSelectFloor, addSelectSystem, addSelectMaterial) приходит в params не списком, а строкой вида ["АР","КР"] — декодируйте её этим методом.

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

List modelNames = bim.parseOptionValueToList((params.get("models") ?: "").toString())
// "[\"АР\",\"КР\"]" -> ["АР", "КР"]
convertStringUuidToUUID - конвертация строковых идентификаторов в тип данных UUID
  • bim.convertStringUuidToUUID(Collection<String> stringUuidElements) → Set<UUID> - строка, не являющаяся UUID, вызывает исключение

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

def uuids = bim.convertStringUuidToUUID(["e5a114d0-7de1-11ec-90d6-0242ac120003", "ac178efe-7e8d-11ec-90d6-0242ac120003"])
def elements = bim.getAllElementsByListUuidAndProjectUuid(uuids)

Справочники

Операторы сравнения

Используются в createCondition. Регистр не важен; неизвестный оператор молча заменяется на eq. Символьные обозначения применяются в том числе в сокращённой форме createCondition(axis, "ИмяОператорЗначение").

ОператорСимволОписание
eq=Равно
noteq!=Не равно
cont@Содержит
notcont!@Не содержит
gt>Больше
gteq>=Больше или равно
lt<Меньше
lteq<=Меньше или равно
ex%Имеет значение
notex!%Не имеет значения
in#Элемент из набора

Параметры поиска

Первый аргумент createCondition. Регистр не важен; любая другая строка молча превращается в class.

ПараметрОписание
modelпоиск по названию модели в структуре проекта
floorпоиск по названию этажа
classпоиск по названию ifc класса (ifc тип)
zoneпоиск по названию зоны, объединяющей элементы
layerпоиск по названию слоя, объединяющего элементы
groupпоиск по группировке
classificatorпоиск по классификатору
attributeпоиск по значению атрибута
userpropпоиск по пользовательским свойствам
maskпоиск по маске
idpropпоиск по идентификации
geometryпоиск по значению рассчитанной геометрии: площадь (ключ атрибута area) и объем (ключ атрибута volume)

Для attribute, userprop и mask используются формы с именем атрибута (4 или 5 аргументов), для model, floor, zone, layer, group, classificator, class — форма «параметр, оператор, значение».

Статусы коллизий

Значения CollisionStatus для getProjectCollisions и getModelCollisions.

СтатусОписание
NEWновые коллизии
WORKколлизии в работе
SOLVEDрешенные коллизии
ALLOWEDдопустимые (разрешённые) коллизии

PowerType

Множитель (приставка) единицы измерения для параметра power метода addAttribute.

ИмяМножитель
NULL1 (без приставки)
EXA1.0e18
PETA1.0e15
TERA1.0e12
GIGA1.0e9
MEGA1.0e6
KILO1.0e3
HECTO1.0e2
DECA1.0e1
DECI1.0e-1
CENTI1.0e-2
MILLI1.0e-3
MICRO1.0e-6
NANO1.0e-9
PICO1.0e-12
FEMTO1.0e-15
ATTO1.0e-18

UnitType

Тип единицы измерения для параметра unit метода addAttribute.

Передавайте имя константы из первого столбца, например "THERMODYNAMICTEMPERATUREUNIT_K". Сервер ищет единицу по имени константы, поэтому "THERMODYNAMICTEMPERATUREUNIT" — это градусы Цельсия, а не Кельвины. Пустая строка или null дают NULLUNIT, а строка "NULL" приводит к ошибке. Для power пустое значение даёт NULL.
ИмяЕдиница
NULLUNITбез единицы
ABSORBEDDOSEUNITgray
AMOUNTOFSUBSTANCEUNITmole
AREAUNITsquare_metre
DOSEEQUIVALENTUNITsievert
ELECTRICCAPACITANCEUNITfarad
ELECTRICCHARGEUNITcoulomb
ELECTRICCONDUCTANCEUNITsiemens
ELECTRICCURRENTUNITampere
ELECTRICRESISTANCEUNITohm
ELECTRICVOLTAGEUNITvolt
ENERGYUNITjoule
FORCEUNITnewton
FREQUENCYUNIThertz
ILLUMINANCEUNITlux
INDUCTANCEUNIThenry
LENGTHUNITmetre
LUMINOUSFLUXUNITlumen
LUMINOUSINTENSITYUNITcandela
MAGNETICFLUXDENSITYUNITtesla
MAGNETICFLUXUNITweber
MASSUNITgram
PLANEANGLEUNITradian
POWERUNITwatt
PRESSUREUNITpascal
RADIOACTIVITYUNITbecquerel
SOLIDANGLEUNITsteradian
THERMODYNAMICTEMPERATUREUNITdegree_celsius
THERMODYNAMICTEMPERATUREUNIT_Kkelvin
TIMEUNITsecond
VOLUMEUNITcubic_metre
USERDEFINEDuserdefined
Copyright © 2026