ITEMIKA BIM стандарт
Войти

Техзадание на разработку плагина Перегруппировка

Обновлено 15 минут назад·500 слов
1. Описание#

Назначение - разгруппирование всех групп проекта, и группирование обратно.

2. Постановка бизнес задачи# Входные данные#
  • Группы модели в проекте, имеющие экземпляры (для формирования дерева групп в проекте)

  • Список выбранных пользователем групп в дереве

  • Списки элементов модели по группам

  • Значения параметров экземпляра элементов не зависящих от экземпляра группы

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

Плагин должен запоминать состояние групп и элементов для восстановления группирования после разгруппирования.

Выходные данные#

После выполнения разгруппирования модель не должна содержать группы.
После выполнения группирования модель должна возвращаться к первоначальной схеме группирования элементов.

Что должен делать плагин#

Плагин должен:

  • разгруппировывать все группы в проекте

  • позволять вносить изменения в модель (загрузка и обновление семейств, запись значений параметров, и прочее)

  • сгруппировать элементы так, как они были сгруппированы

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

Алгоритм разгруппирования:

  1. Получение списка групп в проекте.

  2. Формирование в UI дерева групп, где уровни определяет вложенность экземпляров групп в другие группы.

  3. Выбор пользователем из дерева (галочками) тех групп, для которых необходимо выполнить работу.

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

  5. Запись списка групп первого (следующего) уровня.

  6. Запись списков элементов из экземпляров групп первого уровня.

  7. Запись списков исключенных элементов из экземпляров групп первого уровня.

  8. Сохранение позиций Начала группы (точки вставки группы)

  9. Для всех последующих уровней групп выполнить шаги 5-8.

  10. Определение всех параметров экземпляра, которые могу изменяться по экземплярам групп для всех элементов, которые находились в группах.

Алгоритм группирования:

  1. Запись значений параметров определенных в шаге 7 для всех элементов из обработанных групп.

  2. Создание группы с новым именем для всех экземпляров групп последнего уровня.

  3. Изменения позиций Начала группы на то которое было в оригинальной группе.

  4. Замена типа созданных групп на оригинальный тип.

  5. Удаление созданных в шаге 2 типов групп.

  6. Для всех уровней групп начиная с последнего до первого выполнить шаги 2 - 5.

  7. Перезаписать значения параметров полученных в шаге 1 для всех элементов в группах.

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

3. Требования к UI#

UI должен содержать:

  • Предупреждение, что нельзя между разгруппирование и повторным группирование нельзя удалять и перемещать элементы, входившие в группы.

  • Сформированное дерево экземпляров групп (по вложенности) в проекте с возможность выбора.

  • Кнопку для разгруппирования - "Разгруппировать выбранные группы"

  • Кнопку для группирования - "Сгруппировать обратно"

  • Кнопку "OK", которая закрывает плагин с сохранением текущего состояния. Если обратное группирование не выполнялось показывать предупреждение об этом - "Элементы не были сгруппированы обратно. Принять изменения в проекте."

  • Кнопку "Отмена", которая закрывает плагин с откатом выполненных до разгруппирования транзакций, включительно.

Содержание