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

form

Это интерфейс построения формы параметров плагина. Форма описывается в методе def form(): перед запуском система вызывает его и показывает форму пользователю, а введенные значения передаются в params под ключом, равным первому аргументу метода (modelValue). Тот же набор методов есть у интерфейса widget в плагинах типа «Виджет». В нем доступны следующие функции:

  • addCheckbox - добавление "флажка" на форму
  • addChoiceAttribute - добавление выбора атрибута на форму
  • addChoiceClassificationNode - добавление выбора классификатора на форму
  • addChoiceCondition - добавление condition на форму
  • addChoiceFloor - добавление выбора этажа на форму
  • addChoiceIfcClass - добавление выбора IFC-типа на форму
  • addChoiceMaterial - добавление выбора материала на форму
  • addChoiceModel - добавление выбора модели на форму
  • addChoiceRevision - добавление выбора ревизии на форму
  • addChoiceSystem - добавление выбора системы на форму
  • addCombobox - добавление выпадающего списка на форму
  • addDate - добавление выбора даты на форму
  • addFile - добавление поля загрузки файла на форму
  • addImage - добавление изображения на форму
  • addInput - добавление поля ввода на форму
  • addModelRevisionSelection - добавление поля выбора ревизии для каждой отдельной модели
  • addRadio - добавление радиокнопки на форму
  • addSelect - добавление выпадающего списка на форму
  • addSelectAttribute - добавление выбора атрибута на форму
  • addSelectClassificationNode - добавление выбора классификатора на форму
  • addSelectCondition - добавление condition на форму
  • addSelectFloor - добавление выбора этажа на форму
  • addSelectIfcClass - добавление выбора IFC-типа на форму
  • addSelectMaterial - добавление выбора материала на форму
  • addSelectModel - добавление выбора модели на форму
  • addSelectRevision - добавление выбора ревизии на форму
  • addSelectSystem - добавление выбора системы на форму
  • addTable - добавление таблицы на форму
  • addText - добавление текстовой строки на форму
  • addTextarea - добавление поля ввода текста на форму
  • addTreeview - добавление дерева на форму
  • Методы элементов формы (PluginTag) - добавление пунктов списка, свойств и действий к элементу формы

Общий пример:

def form() {
    form.addText("Параметры отчёта")
    form.addSelectModel("models")
    form.addSelectIfcClass("ifcClass")
    form.addInput("minHeight", [value: "1500"])
    form.addSelect("format", [label: "Формат", value: "XLSX", items: [XLSX: "Excel", DOCX: "Word"]])
    form.addCheckbox("onlyLoadBearing", [label: "Только несущие"])
}

def start() {
    String ifcClass = params.get("ifcClass") ?: "IfcWall"
    double minHeight = ((params.get("minHeight") ?: "0") as String).replace(",", ".") as double
    boolean onlyLoadBearing = params.get("onlyLoadBearing") ? true : false
    List modelNames = bim.parseOptionValueToList((params.get("models") ?: "").toString())
    // ...
}
  • Каждый метод имеет формы add*(String modelValue) и add*(String modelValue, Map attributes) и возвращает элемент формы PluginTag (у addTable() — PluginTable). modelValue — ключ значения в params: латиница без пробелов, уникальный в пределах формы.
  • В атрибутах (Map) передаются свойства поля, но учитываются они не везде:
    • addSelect, addCombobox, addCheckbox, addDate, addFile, addTreeview — все атрибуты (label, items, style и т.п.);
    • addInput, addTextarea — только начальное значение value / defaultValue; подпись label не выводится, используйте form.addText(...) перед полем;
    • addRadio — только items;
    • addSelectCondition, addSelectClassificationNode, addSelectAttribute, addSelectIfcClass, addSelectRevision — только value / defaultValue;
    • addSelectModel, addSelectFloor, addSelectSystem, addSelectMaterial — атрибуты не используются.
  • Пары методов addSelectX / addChoiceX — синонимы.
  • Любое значение в params может отсутствовать (null) — в start() всегда задавайте запасное значение: params.get("key") ?: "...".
  • Внутри form() доступны только form, params, bim, ifcql, bimutils, console. Внутри start() переменная form равна null (кроме плагинов типов «Коллизии» и «Виджет»).
addCheckbox - добавление "флажка" на форму
  • form.addCheckbox(String modelValue, Map<String, Object> attributes) → PluginTag
  • form.addCheckbox(String modelValue) → PluginTag

В params приходит Boolean (по умолчанию false).

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

form.addCheckbox("checkBToBottom", [label: "Проверять до низа"])

// флажок в ячейке таблицы-вёрстки (см. addTable)
def t = form.addTable()
def row1 = t.addRow()
row1.addCell().addText("Проверять до низа")
row1.addCell().addCheckbox("checkBToBottom")
addChoiceAttribute - добавление выбора атрибута на форму
  • form.addChoiceAttribute(String modelValue, Map<String, Object> attributes) → PluginTag
  • form.addChoiceAttribute(String modelValue) → PluginTag

Синоним addSelectAttribute. В params приходит путь к атрибуту вида "Набор/Свойство"; начальное значение задается атрибутом value или defaultValue.

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

form.addChoiceAttribute("myattr")
addChoiceClassificationNode - добавление выбора классификатора на форму
  • form.addChoiceClassificationNode(String modelValue, Map<String, Object> attributes) → PluginTag
  • form.addChoiceClassificationNode(String modelValue) → PluginTag

Синоним addSelectClassificationNode. В params приходит строка.

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

form.addChoiceClassificationNode("clazz")
addChoiceCondition - добавление condition на форму
  • form.addChoiceCondition(String modelValue, Map<String, Object> attributes) → PluginTag
  • form.addChoiceCondition(String modelValue) → PluginTag

Синоним addSelectCondition. В params приходит строка условия IFCQL.

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

form.addChoiceCondition("mycondition")
addChoiceFloor - добавление выбора этажа на форму
  • form.addChoiceFloor(String modelValue, Map<String, Object> attributes) → PluginTag
  • form.addChoiceFloor(String modelValue) → PluginTag

Синоним addSelectFloor: мультивыбор, значение приходит строкой вида ["Этаж 1","Этаж 2"].

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

form.addChoiceFloor("floor")
addChoiceIfcClass - добавление выбора IFC-типа на форму
  • form.addChoiceIfcClass(String modelValue, Map<String, Object> attributes) → PluginTag
  • form.addChoiceIfcClass(String modelValue) → PluginTag

Синоним addSelectIfcClass. В params приходит имя IFC-класса (например, "IfcWall").

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

form.addChoiceIfcClass("ifctypename")
addChoiceMaterial - добавление выбора материала на форму
  • form.addChoiceMaterial(String modelValue, Map<String, Object> attributes) → PluginTag
  • form.addChoiceMaterial(String modelValue) → PluginTag

Синоним addSelectMaterial: мультивыбор, значение приходит строкой со списком.

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

form.addChoiceMaterial("material")
addChoiceModel - добавление выбора модели на форму
  • form.addChoiceModel(String modelValue, Map<String, Object> attributes) → PluginTag
  • form.addChoiceModel(String modelValue) → PluginTag

Синоним addSelectModel: мультивыбор, значение приходит строкой вида ["АР","КР"].

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

form.addChoiceModel("model3")
addChoiceRevision - добавление выбора ревизии на форму
  • form.addChoiceRevision(String modelValue, Map<String, Object> attributes) → PluginTag
  • form.addChoiceRevision(String modelValue) → PluginTag

Синоним addSelectRevision.

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

form.addChoiceRevision("revision1")
addChoiceSystem - добавление выбора системы на форму
  • form.addChoiceSystem(String modelValue, Map<String, Object> attributes) → PluginTag
  • form.addChoiceSystem(String modelValue) → PluginTag

Синоним addSelectSystem: мультивыбор, значение приходит строкой со списком.

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

form.addChoiceSystem("systems")
addCombobox - добавление выпадающего списка на форму
  • form.addCombobox(String modelValue, Map<String, Object> attributes) → PluginTag
  • form.addCombobox(String modelValue) → PluginTag

Работает так же, как addSelect.

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

form.addCombobox("select1", [ items: [ model1: "Объект 1", model2: "Объект 2" ], label: "Объект" ])
addDate - добавление выбора даты на форму
  • form.addDate(String modelValue, Map<String, Object> attributes) → PluginTag
  • form.addDate(String modelValue) → PluginTag

В params приходит строка с датой — разбирайте ее с проверкой на null.

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

def startDate = form.addDate("startDate")
addFile - добавление поля загрузки файла на форму
  • form.addFile(String modelValue, Map<String, Object> attributes) → PluginTag
  • form.addFile(String modelValue) → PluginTag

Атрибут formats ограничивает допустимые расширения. В params приходит содержимое файла строкой в формате base64 (data-URL).

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

form.addFile("xml", ["formats": [".xml"]])
addImage - добавление изображения на форму
  • form.addImage(Map<String, Object> attributes) → PluginTag - атрибуты передаются тегу img (src, style, width, alt и т.д.)
  • form.addImage() → PluginTag - пустая картинка; src и другие атрибуты можно задать через addProperty

В src можно передать:

  • путь к картинке из общей коллекции, как в table.addImage, например "collections/images/Arm/О_(23).png"; адрес сервера подставляется автоматически
  • абсолютную ссылку http://... или https://...
  • картинку строкой в формате base64 (data:image/png;base64,...)

Поддерживаются форматы png, jpg (jpeg), svg и webp. По умолчанию ширина картинки 100 пикселей, другой размер задается через style.

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

// картинка из общей коллекции
form.addImage([src: "collections/images/Arm/О_(23).png", style: "width: 300px;"])

// SVG из общей коллекции
form.addImage([src: "collections/images/Arm/scheme.svg", style: "width: 200px;"])

// внешняя ссылка
form.addImage([src: "https://example.com/scheme.png", style: "width: 300px;"])

// атрибуты через addProperty
form.addImage().addProperty("src", "collections/images/Arm/О_(23).png").addProperty("style", "width: 150px;")

Картинку можно поставить и в ячейку таблицы формы, например, схему рядом с параметром:

def t = form.addTable()
def r = t.addRow()
r.addCell().addImage([src: "collections/images/Arm/О_(23).png", style: "width: 120px;"])
r.addCell().addInput("gap", [value: "50"])
addInput - добавление поля ввода на форму
  • form.addInput(String modelValue, Map<String, Object> attributes) → PluginTag
  • form.addInput(String modelValue) → PluginTag

В params приходит строка (числа нужно разбирать самостоятельно); начальное значение задается атрибутом value или defaultValue.

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

form.addInput("myinput2", [value: "1000"])

// в start()
int limit = ((params.get("myinput2") ?: "1000") as String).trim() as int
addModelRevisionSelection - добавление поля выбора ревизии для каждой отдельной модели
  • form.addModelRevisionSelection(String modelValue) → PluginTag

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

form.addModelRevisionSelection("modelRevisions")
addRadio - добавление радиокнопки на форму
  • form.addRadio(String modelValue, Map<String, Object> attributes) → PluginTag
  • form.addRadio(String modelValue) → PluginTag

Варианты задаются атрибутом items или методами addOption. В params приходит значение выбранного варианта, по умолчанию — первый вариант.

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

def group = form.addRadio("fileSource")
group.addOption("model", "Из модели")
group.addOption("file", "Из файла")
addSelect - добавление выпадающего списка на форму
  • form.addSelect(String modelValue, Map<String, Object> attributes) → PluginTag
  • form.addSelect(String modelValue) → PluginTag

Пункты задаются атрибутом items: картой [значение: "Подпись"] или списком строк (значение совпадает с подписью). В params приходит значение выбранного пункта (String) или null, если ничего не выбрано.

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

form.addSelect("select1", [ items: [ model1: "Объект 1", model2: "Объект 2" ], label: "Объект" ])
form.addSelect("select2", [ items: ["Текст 1", "Текст 2"] ])
addSelectAttribute - добавление выбора атрибута на форму
  • form.addSelectAttribute(String modelValue, Map<String, Object> attributes) → PluginTag
  • form.addSelectAttribute(String modelValue) → PluginTag

В params приходит путь к атрибуту вида "Набор/Свойство"; начальное значение задается атрибутом value или defaultValue.

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

form.addSelectAttribute("myattr")

// в start()
String attrPath = params.get("myattr") ?: ""
def value = element.getAttribute(attrPath)
addSelectClassificationNode - добавление выбора классификатора на форму
  • form.addSelectClassificationNode(String modelValue, Map<String, Object> attributes) → PluginTag
  • form.addSelectClassificationNode(String modelValue) → PluginTag

В params приходит строка.

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

form.addSelectClassificationNode("clazz")
addSelectCondition - добавление condition на форму
  • form.addSelectCondition(String modelValue, Map<String, Object> attributes) → PluginTag
  • form.addSelectCondition(String modelValue) → PluginTag

В params приходит строка условия IFCQL, которую можно передать в bim.getElements(String); начальное значение задается атрибутом value или defaultValue.

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

form.addSelectCondition("mycondition", [defaultValue: 'entity = "IfcDoor"'])

// в start()
def elements = bim.getElements(params.get("mycondition") ?: 'entity = "IfcDoor"')
addSelectFloor - добавление выбора этажа на форму
  • form.addSelectFloor(String modelValue, Map<String, Object> attributes) → PluginTag
  • form.addSelectFloor(String modelValue) → PluginTag

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

form.addSelectFloor("floor")

// в start()
List floorNames = bim.parseOptionValueToList((params.get("floor") ?: "").toString())
Значение мультивыбора (addSelectModel, addSelectFloor, addSelectSystem, addSelectMaterial и их синонимы addChoice*) приходит в paramsстрокой вида ["Этаж 1","Этаж 2"], а не списком. Декодируйте его методом bim.parseOptionValueToList(...). Атрибуты (в том числе label) у этих полей не используются — подпись выводите отдельной строкой form.addText(...).
addSelectIfcClass - добавление выбора IFC-типа на форму
  • form.addSelectIfcClass(String modelValue, Map<String, Object> attributes) → PluginTag
  • form.addSelectIfcClass(String modelValue) → PluginTag

В params приходит имя IFC-класса (например, "IfcWall"); начальное значение задается атрибутом value или defaultValue.

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

form.addSelectIfcClass("ifctypename")

// в start()
def elements = bim.getElements(bim.createCondition("class", "eq", params.get("ifctypename") ?: "IfcWall"))
addSelectMaterial - добавление выбора материала на форму
  • form.addSelectMaterial(String modelValue, Map<String, Object> attributes) → PluginTag
  • form.addSelectMaterial(String modelValue) → PluginTag

Мультивыбор: значение приходит строкой со списком, декодируйте через bim.parseOptionValueToList(...).

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

form.addSelectMaterial("material")
addSelectModel - добавление выбора модели на форму
  • form.addSelectModel(String modelValue, Map<String, Object> attributes) → PluginTag
  • form.addSelectModel(String modelValue) → PluginTag

Мультивыбор: значение приходит строкой вида ["АР","КР"] с названиями моделей, декодируйте через bim.parseOptionValueToList(...).

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

form.addText("Модели")
form.addSelectModel("model3")

// в start()
List modelNames = bim.parseOptionValueToList((params.get("model3") ?: "").toString())
addSelectRevision - добавление выбора ревизии на форму
  • form.addSelectRevision(String modelValue, Map<String, Object> attributes) → PluginTag
  • form.addSelectRevision(String modelValue) → PluginTag

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

form.addSelectRevision("revision1")
addSelectSystem - добавление выбора системы на форму
  • form.addSelectSystem(String modelValue, Map<String, Object> attributes) → PluginTag
  • form.addSelectSystem(String modelValue) → PluginTag

Мультивыбор: значение приходит строкой со списком, декодируйте через bim.parseOptionValueToList(...).

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

form.addSelectSystem("systems")
addTable - добавление таблицы на форму
  • form.addTable() → PluginTable - таблица для вёрстки формы

Методы таблицы:

  • table.addHeader() → PluginRow - добавить строку заголовка
  • table.addRow() → PluginRow - добавить строку
  • row.addCell() → PluginCell - добавить ячейку в строку; в ячейку можно добавлять любые поля формы теми же методами (addText, addInput, addCheckbox…)

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

def t = form.addTable()
def h = t.addHeader()
h.addCell().addText("Параметр")
h.addCell().addText("Значение")
def r = t.addRow()
r.addCell().addText("Зазор, мм")
r.addCell().addInput("gap", [value: "50"])
addText - добавление текстовой строки на форму
  • form.addText(String text, Map<String, Object> attributes) → PluginTag
  • form.addText(String text) → PluginTag

Надпись, не поле ввода — значения в params не передает.

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

form.addText("Я текст")
form.addText("Заголовок").addProperty("style", "font-weight: bold; font-size: 18px;")
addTextarea - добавление поля ввода текста на форму
  • form.addTextarea(String modelValue, Map<String, Object> attributes) → PluginTag
  • form.addTextarea(String modelValue) → PluginTag

В params приходит строка; начальное значение задается атрибутом value или defaultValue.

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

form.addTextarea("comment", [value: "Комментарий к отчёту"])
addTreeview - добавление дерева на форму
  • form.addTreeview(String modelValue, Map<String, Object> attributes) → PluginTag

Узлы дерева задаются атрибутом items: список карт [key: …, value: …, children: [...]] (value — подпись узла), выбранные узлы — атрибутом selected. В params приходит карта с полями selected (выбранные узлы), items и active.

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

def treeItems = [
    [key: "corp1", value: "Корпус 1", children: [
        [key: "s1", value: "Секция 1"],
        [key: "s2", value: "Секция 2"]
    ]]
]
form.addTreeview("tree", [items: treeItems, selected: []])

// в start()
def selected = params.get("tree")?.selected ?: []

Методы элементов формы (PluginTag)

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

  • tag.addProperty(String key, Object value) → PluginTag - добавить атрибут элементу
  • tag.addProperty(Map<String, Object> attributes) → PluginTag - добавить несколько атрибутов
  • tag.addOption(String value, String title) / tag.addItem(String value, String title) → PluginTag - добавить пункт списка со значением и подписью
  • tag.addOption(String title) / tag.addItem(String title) → PluginTag - добавить пункт, значение которого совпадает с подписью
  • tag.addOptions(Map<String, Object> items) / tag.addItems(Map<String, Object> items) → PluginTag - добавить пункты из карты [значение: "Подпись"]
  • tag.addOptions(String... items) / tag.addItems(String... items) → PluginTag - добавить пункты из строк; строка "значение:подпись" делится по :
  • tag.addAction(String name, Object params) → PluginTag - добавить действие при изменении значения (используется в виджетах, например addAction("refresh", ""))

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

def s3 = form.addSelect("s3")
s3.addOption("opt1", "Вариант 1")
s3.addOption("opt2", "Вариант 2")

form.addSelect("s4").addOptions([a: "A", b: "B"]).addProperty("label", "Селект 4")
form.addInput("n").addProperty("value", "10")
Пункты, добавленные через addOption(value, title) / addOptions(Map), хранятся без гарантированного порядка. Если порядок важен — передавайте items литералом в атрибутах ([items: [m1: "Объект 1", m2: "Объект 2"]]) или списком строк. Не смешивайте в одном списке пункты «значение + подпись» и «только подпись».
Copyright © 2026