Введение
В данной статье представляю свое видение процесса автоматического формирования проверок на коллизии в 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 файл, либо редактировать вложенный
![Загрузка файлов Загрузка файлов](https://habrastorage.org/getpro/habr/upload_files/d0a/4dc/42a/d0a4dc42a4cf2ab9f0b0e192f842d2c2.png)
При первом запуске любого скрипта произойдет установка библиотеки openpyxl — она нужна для работы с Excel таблицами.
Исходные данные
В качестве исходных данных понадобится список моделей и матрица коллизий в формате xlsx (Excel). Шаблон модели есть по ссылке на GitHub.
На вкладке «Модели» записывается список моделей с категорией группировки. Наименования моделей лучше давать краткие, без учета шифра и т. д., но достаточное, чтобы по нему найти конкретный элемент в Navisworks. В названиях запрещено использовать дефис «‑».
На вкладке «Матрица» вставляется симметричная матрица с элементами, которые сгруппированы по категориям. На пересечениях матрицы записывается допуск.
Преимущество данного метода в том, что в исходной матрице не нужно учитывать все модели.
![Листы с исходными данными Листы с исходными данными](https://habrastorage.org/getpro/habr/upload_files/cde/197/775/cde1977752a3613566685afbc755e7e0.png)
Данную таблицу необходимо разместить в одной папке с скриптами Python. Перед запуском каждого скрипта файл Excel необходимо закрыть.
В коде скриптов необходимо указать название файла Excel в переменно book.
![Наименование Excel файла Наименование Excel файла](https://habrastorage.org/getpro/habr/upload_files/877/88d/d66/87788dd66ca3525a1aa56c71d941d425.png)
Работа скрипта
Работа скрипта разделена на два шага.
Первый шаг — формирование списка элементов по моделям. После запуска CollisionCheck_step1.py в Excel файле появится лист «Модели_Элементы» с списком элементов по каждой модели. На этом шаге можно удалить из списка строки с ненужными элементами. Например, для моделей канализации удалить воздуховоды, лотки и т. д. После редактирования списка файл необходимо сохранить и закрыть.
![Редактирование списка элементов моделей Редактирование списка элементов моделей](https://habrastorage.org/getpro/habr/upload_files/f9f/74d/39d/f9f74d39de190ee5266c98882ff3b197.png)
Чтобы уменьшить объем ручной корректировки на данном шаге, можно задать более детальную группировку при создании матрицы коллизий и списка моделей.
Второй шаг — запуск 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.
![Расширенная матрица коллизий Расширенная матрица коллизий](https://habrastorage.org/getpro/habr/upload_files/fd6/dfd/0ca/fd6dfd0ca418e1f5c728318051c96138.png)
На листе «Списки_Заполнение» представлен тот же самый список проверок, только в виде простой таблицы. Тут можно убедиться в том, что в матрице и в списке одинаковое число проверок. Количество проверок может различаться, если изначальная матрица не симметрична.
![Список проверок Список проверок](https://habrastorage.org/getpro/habr/upload_files/352/837/6d6/3528376d681c1b80244f8f681e052d61.png)
В директории проекта создаются два xml файла «Поисковые наборы.xml» и «Проверки.xml».
![Созданные файлы xml Созданные файлы xml](https://habrastorage.org/getpro/habr/upload_files/52f/5cf/287/52f5cf287361295469c8cd9cf0e10521.png)
Данный файлы содержат в себе поисковые наборы и проверки, которые нужно импортировать в Navisworks.
Тут поподробнее остановлюсь на структуре файлов xml.
![Структура xml файла проверок Структура xml файла проверок](https://habrastorage.org/getpro/habr/upload_files/10b/9f3/cea/10b9f3cea35e058834d58f7413e2eff0.png)
![Структура xml файла поисковых наборов Структура xml файла поисковых наборов](https://habrastorage.org/getpro/habr/upload_files/5a7/63a/4c7/5a763a4c7823dead6f6fe6daf07c5585.png)
Скрипт Python забирает данные из Excel преобразует и подставляет в шаблоны элементов xml.
Импорт в Navisworks
Сначала нужно импортировать поисковые наборы, затем проверки.
![Импорт в Navisworks Импорт в Navisworks](https://habrastorage.org/getpro/habr/upload_files/04b/9a3/997/04b9a399727fc0eaf75f541c127b4eca.png)
После импорта наборов появится папочная структура с поисковыми наборами. Все наборы отсортированы по папкам с названием моделей. Каждый набор по умолчанию содержит два условия:
Файл источника содержит название модели, которое указывали на листе «Модели» таблицы Excel.
Категория объекта содержит необходимую категорию элементов которую указывали на вкладке «Матрица» таблицы Excel.
![Структура поисковых наборов в Navisworks Структура поисковых наборов в Navisworks](https://habrastorage.org/getpro/habr/upload_files/f3e/8da/a9d/f3e8daa9d1da7f2e35dad889b5b15d9d.png)
После импорта проверки автоматически ссылаются на существующие поисковые наборы
![Проверки Navisworks Проверки Navisworks](https://habrastorage.org/getpro/habr/upload_files/d0e/778/71d/d0e77871d4ccf322d724344c57d922f9.png)
Для того, чтобы довести проверку до ума, необходимо вручную отредактировать некоторые поисковые наборы. К сожалению, полностью автоматизировать данный процесс не получилось, т.к. поиск нужных элементов в модели не линейная задача. Но даже в таком виде данная автоматизация может значительно ускорить процесс создания проверок.
Еще раз краткий алгоритм действий.
Подготовка Excel документа по шаблону: заполнение листов «Модели» и «Матрица»
Запуск CollisionCheck_step1.py
Удаление ненужных строк с элементами из листа «Модели_Элементы»
Запуск CollisionCheck_step2.py
Импорт xml файлов в Navisworks
Загрузка отчетов в Power BI
На GitHub приложен шаблон дашборда для Power BI: Отчет по коллизиям.pbix. Этот отчет можно размещать в любом месте.
Для загрузки отчетов в Power BI необходимо записать отчет из Navisworks со следующими параметрами:
![параметры отчета Navisworks параметры отчета Navisworks](https://habrastorage.org/getpro/habr/upload_files/a74/59b/591/a7459b591f51e9123dafd70c2c987a7b.png)
Сохранить этот отчет в отдельную папку и в наименовании указать дату через дефис «‑».
Пример: Отчет-2024.08.02.xml
В файле Power BI обновить путь до папки с отчетом: Преобразование данных → Настройка источника данных → Изменить источник → Выбрать папку.
При изменении источника данных матрицы могут отображаться некорректно — нужно переключить даты в срезах, чтобы информация обновилась.
![](https://habrastorage.org/getpro/habr/upload_files/907/e03/ea4/907e03ea46363aa7896315c3417fc520.png)
В дальнейшем в эту же папку можно загружать отчеты за другие даты. После добавления нового отчета в папку, необходимо обновить данные. После этого в дашборде автоматически появятся новые даты в срезах.
![](https://habrastorage.org/getpro/habr/upload_files/a6f/d24/f5b/a6fd24f5b43ed3b5756777ad02bbaf5a.png)
Дашборд содержит три страницы:
Отчет — тут можно посмотреть отчёт за выбранную дату
![](https://habrastorage.org/getpro/habr/upload_files/07d/931/e48/07d931e48c88993f33deda22ab5b73b2.png)
Динамика отчетов — тут можно посмотреть разность количества коллизий между выбранными датами.
![](https://habrastorage.org/getpro/habr/upload_files/772/17a/f63/77217af633714b986b8b4ed7382b6024.png)
График — тут отображается количество коллизий по датам.
![Структура поисковых наборов в Navisworks Структура поисковых наборов в Navisworks](https://habrastorage.org/getpro/habr/upload_files/c22/191/c73/c22191c7332b04976479825f6c8bbaca.png)