Введение
В данной статье представляю свое видение процесса автоматического формирования проверок на коллизии в 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.

Работа скрипта
Работа скрипта разделена на два шага.
Первый шаг — формирование списка элементов по моделям. После запуска 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».

Данный файлы содержат в себе поисковые наборы и проверки, которые нужно импортировать в Navisworks.
Тут поподробнее остановлюсь на структуре файлов xml.


Скрипт Python забирает данные из Excel преобразует и подставляет в шаблоны элементов xml.
Импорт в Navisworks
Сначала нужно импортировать поисковые наборы, затем проверки.

После импорта наборов появится папочная структура с поисковыми наборами. Все наборы отсортированы по папкам с названием моделей. Каждый набор по умолчанию содержит два условия:
-
Файл источника содержит название модели, которое указывали на листе «Модели» таблицы Excel.
-
Категория объекта содержит необходимую категорию элементов которую указывали на вкладке «Матрица» таблицы Excel.

После импорта проверки автоматически ссылаются на существующие поисковые наборы

Для того, чтобы довести проверку до ума, необходимо вручную отредактировать некоторые поисковые наборы. К сожалению, полностью автоматизировать данный процесс не получилось, т.к. поиск нужных элементов в модели не линейная задача. Но даже в таком виде данная автоматизация может значительно ускорить процесс создания проверок.
Еще раз краткий алгоритм действий.
-
Подготовка Excel документа по шаблону: заполнение листов «Модели» и «Матрица»
-
Запуск CollisionCheck_step1.py
-
Удаление ненужных строк с элементами из листа «Модели_Элементы»
-
Запуск CollisionCheck_step2.py
-
Импорт xml файлов в Navisworks
Загрузка отчетов в Power BI
На GitHub приложен шаблон дашборда для Power BI: Отчет по коллизиям.pbix. Этот отчет можно размещать в любом месте.
Для загрузки отчетов в Power BI необходимо записать отчет из Navisworks со следующими параметрами:

Сохранить этот отчет в отдельную папку и в наименовании указать дату через дефис «‑».
Пример: Отчет-2024.08.02.xml
В файле Power BI обновить путь до папки с отчетом: Преобразование данных → Настройка источника данных → Изменить источник → Выбрать папку.
При изменении источника данных матрицы могут отображаться некорректно — нужно переключить даты в срезах, чтобы информация обновилась.

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

Дашборд содержит три страницы:
-
Отчет — тут можно посмотреть отчёт за выбранную дату

-
Динамика отчетов — тут можно посмотреть разность количества коллизий между выбранными датами.

-
График — тут отображается количество коллизий по датам.

Автор: i-savelev