Автоматизация проверок в Navisworks с помощью Python + визуализация в Power BI
Введение
В данной статье представляю свое видение процесса автоматического формирования проверок на коллизии в Navisworks для проекта с большим количеством моделей. Данный метод основан на работе с xml файлами с помощью Python. Способ не новый, меня на него вдохновила статья Проверки в Navisworks по матрице коллизий с помощью Dynamo / Хабр (habr.com). Бонусом прикладываю файл Power BI, в который можно подгрузить отчет по созданным проверкам.
Ссылка на GitHub с исходным кодом, шаблоном excel и power bi: https://github.com/i‑savelev/CollisionCheckNavisworks
Установка
Попытался сделать максимально простые для использования скрипты, но все равно придется кое‑что установить).
Установить Python с официально сайта: Download Python | Python.org
Установить Visual Studio Code или Pycharm для комфортной работы с файлами кода. (Необязательный пункт. Файлы Python можно запускать и без установки редактора кода — двойным нажатием на файл, а название Excel таблицы указать с помощью блокнота)
Скачать архив с github, распаковать. В этот архив поместить подготовленный Excel файл, либо редактировать вложенный
Загрузка файлов
При первом запуске любого скрипта произойдет установка библиотеки openpyxl — она нужна для работы с Excel таблицами.
Исходные данные
В качестве исходных данных понадобится список моделей и матрица коллизий в формате xlsx (Excel). Шаблон модели есть по ссылке на GitHub.
На вкладке «Модели» записывается список моделей с категорией группировки. Наименования моделей лучше давать краткие, без учета шифра и т. д., но достаточное, чтобы по нему найти конкретный элемент в Navisworks. В названиях запрещено использовать дефис »‑».
На вкладке «Матрица» вставляется симметричная матрица с элементами, которые сгруппированы по категориям. На пересечениях матрицы записывается допуск.
Преимущество данного метода в том, что в исходной матрице не нужно учитывать все модели.
Листы с исходными данными
Данную таблицу необходимо разместить в одной папке с скриптами Python. Перед запуском каждого скрипта файл Excel необходимо закрыть.
В коде скриптов необходимо указать название файла Excel в переменно book.
Наименование Excel файла
Работа скрипта
Работа скрипта разделена на два шага.
Первый шаг — формирование списка элементов по моделям. После запуска CollisionCheck_step1.py в Excel файле появится лист «Модели_Элементы» с списком элементов по каждой модели. На этом шаге можно удалить из списка строки с ненужными элементами. Например, для моделей канализации удалить воздуховоды, лотки и т. д. После редактирования списка файл необходимо сохранить и закрыть.
Редактирование списка элементов моделей
Чтобы уменьшить объем ручной корректировки на данном шаге, можно задать более детальную группировку при создании матрицы коллизий и списка моделей.
Второй шаг — запуск CollisionCheck_step2.py и формирование матрицы коллизий и xml файлов с проверками и поисковыми наборами. На этом шаге данные берутся из ранее созданного листа «Модели_Элементы».
В результате выполнения скрипта создаются листы «Матрица_Заполнение», «Списки_Заполнение».
На листе «Матрица_Заполнение» появляется расширенная матрица коллизий с проверками для каждой модели. Пересечения данной матрицы заполнены наименованиями проверок и допусками. На этом листе можно визуально проверить корректность заполнения данных.
Наименования проверок формируются по следующему принципу:
[Категория 1 vs Категория 2]‑[Модель 1 vs Модель 2][Элемент 1 vs элемент 2]
Пример: AR vs KR‑AI_1.1 vs ST_1-Перекрытия vs Стены
Данное наименование позволяет в дальнейшем использовать отчеты для формирования дашборда в Power BI.
Расширенная матрица коллизий
На листе «Списки_Заполнение» представлен тот же самый список проверок, только в виде простой таблицы. Тут можно убедиться в том, что в матрице и в списке одинаковое число проверок. Количество проверок может различаться, если изначальная матрица не симметрична.
Список проверок
В директории проекта создаются два xml файла «Поисковые наборы.xml» и «Проверки.xml».
Созданные файлы xml
Данный файлы содержат в себе поисковые наборы и проверки, которые нужно импортировать в Navisworks.
Тут поподробнее остановлюсь на структуре файлов xml.
Структура xml файла проверок
Структура xml файла поисковых наборов
Скрипт Python забирает данные из Excel преобразует и подставляет в шаблоны элементов xml.
Импорт в Navisworks
Сначала нужно импортировать поисковые наборы, затем проверки.
Импорт в Navisworks
После импорта наборов появится папочная структура с поисковыми наборами. Все наборы отсортированы по папкам с названием моделей. Каждый набор по умолчанию содержит два условия:
Файл источника содержит название модели, которое указывали на листе «Модели» таблицы Excel.
Категория объекта содержит необходимую категорию элементов которую указывали на вкладке «Матрица» таблицы Excel.
Структура поисковых наборов в Navisworks
После импорта проверки автоматически ссылаются на существующие поисковые наборы
Проверки Navisworks
Для того, чтобы довести проверку до ума, необходимо вручную отредактировать некоторые поисковые наборы. К сожалению, полностью автоматизировать данный процесс не получилось, т.к. поиск нужных элементов в модели не линейная задача. Но даже в таком виде данная автоматизация может значительно ускорить процесс создания проверок.
Еще раз краткий алгоритм действий.
Подготовка Excel документа по шаблону: заполнение листов «Модели» и «Матрица»
Запуск CollisionCheck_step1.py
Удаление ненужных строк с элементами из листа «Модели_Элементы»
Запуск CollisionCheck_step2.py
Импорт xml файлов в Navisworks
Загрузка отчетов в Power BI
На GitHub приложен шаблон дашборда для Power BI: Отчет по коллизиям.pbix. Этот отчет можно размещать в любом месте.
Для загрузки отчетов в Power BI необходимо записать отчет из Navisworks со следующими параметрами:
параметры отчета Navisworks
Сохранить этот отчет в отдельную папку и в наименовании указать дату через дефис »‑».
Пример: Отчет-2024.08.02.xml
В файле Power BI обновить путь до папки с отчетом: Преобразование данных → Настройка источника данных → Изменить источник → Выбрать папку.
При изменении источника данных матрицы могут отображаться некорректно — нужно переключить даты в срезах, чтобы информация обновилась.
В дальнейшем в эту же папку можно загружать отчеты за другие даты. После добавления нового отчета в папку, необходимо обновить данные. После этого в дашборде автоматически появятся новые даты в срезах.
Дашборд содержит три страницы:
Отчет — тут можно посмотреть отчёт за выбранную дату
Динамика отчетов — тут можно посмотреть разность количества коллизий между выбранными датами.
График — тут отображается количество коллизий по датам.