-
- 3.1. Что должно быть готово до начала
- 3.2. Подготовка репозитория и установка openpyxl
- 3.3. Краткая проверка установки pyRevit
- 3.4. Минимальная настройка
_settings/settings.ini - 3.5. Подготовка конфигов IFC на основе примера
- 3.6. Подготовка
admin_dataиmanage.xlsx - 3.7. Проверка требований к моделям Revit
- 3.8. Первый ручной запуск
- 3.9. Подключение к запуску по расписанию (в общих чертах)
-
5. Структура проекта и назначение папок
- 5.1. Общий вид репозитория
- 5.2. Папки с кодом:
core/,revit/,config/,utils/ - 5.3. Служебные настройки и bat-скрипты:
_settings/ - 5.4. Рабочие данные:
admin_data/ - 5.5. Примеры и документация по IFC:
_examples/ - 5.6. Дополнительные служебные папки:
_for_python/,_git_images/,_docs/ - 5.7. Итог по структуре
-
6. Настройка
_settings/settings.ini- 6.1. Общие принципы редактирования
- 6.2.
[Paths]: пути к папкам - 6.3.
[Files]: файловые настройки - 6.4.
[Settings]: общие флаги и режимы - 6.5.
[Revit]: версии Revit и 3D-вид - 6.6.
[Excel]: листыmanage.xlsxиhistory.xlsx - 6.7.
[Mapping]: структура папок конфигов IFC - 6.8. Дополнительные параметры и эволюция
settings.ini - 6.9. Пример минимальной конфигурации
_settings/settings.ini - 6.10. Типичные ошибки и как они проявляются
-
- 7.1. Корень
dir_export_config - 7.2. Папка
00_Common: общие JSON-конфиги - 7.3. Папка
01_Export_Layers: маппинг категорий/слоёв - 7.4. Папки проектов с IFC-настройками (колонка C в
manage.xlsx) - 7.5. Как всё вместе связано с
manage.xlsxи_settings/settings.ini - 7.6. Практический сценарий: новый проект
- 7.7. Что важно запомнить про конфиги IFC
- 7.1. Корень
-
8. Папка
admin_data,manage.xlsx,history.xlsxи текстовые логи- 8.1. Назначение папки
admin_data - 8.2.
manage.xlsx: общая идея - 8.3. Лист
Path: колонки A-F - 8.4. Лист
IgnoreList: какие модели пропускать - 8.5.
history/history.xlsx: как хранится история - 8.6. Как вместе работают
manage.xlsx,IgnoreList,historyи IFC-файлы - 8.7. Как принудительно заставить модели перевыгрузиться
- 8.8. Папка
_logsи типы текстовых логов
- 8.1. Назначение папки
-
- 9.1. Типы файлов и версии Revit
- 9.2. Центральные, локальные и отсоединённые модели
- 9.3. Связи, рабочие наборы и опции проекта
- 9.4. 3D-вид для экспорта IFC
- 9.5. Параметры модели и маппинг в IFC
- 9.6. «Здоровье» модели и блокирующие диалоги
- 9.7. Краткий чек-лист по модели перед подключением к ExportIFC
-
11. Диагностика и устранение неполадок
- 11.1. Куда смотреть в первую очередь
- 11.2. Проблема: bat-файл не запускается или мгновенно закрывается
- 11.3. Проблема: Python/pyRevit не найден или падает на старте
- 11.4. Проблема: IFC-файлы не появляются или не обновляются
- 11.5. Проблема: конкретные модели не попадают в выгрузку
- 11.6. Проблема: Revit зависает или выдаёт диалоги при автоматическом запуске
- 11.7. Что можно править руками, а чего лучше не трогать
- 11.8. Использование dry-run для диагностики
ExportIFC — это связка обычного CPython-скрипта и pyRevit, которая:
- по списку моделей, указанному в файле
admin_data/<MANAGE_NAME>.xlsx(по умолчаниюmanage.xlsx, имя задаётся вconfig/constants.py), - для каждой модели выбирает нужную версию Revit,
- запускает Revit через pyRevit и выполняет экспорт IFC, в том числе с учётом IFC-конфигов (JSON) и маппингом категорий (TXT), либо без маппинга (если включена опция
enable_unmapped_export), - складывает IFC-файлы в нужные папки,
- ведёт историю запусков и логирует все шаги.
Основные настройки живут в:
_settings/settings.ini— общие пути, версии Revit и флаги работы;- конфигурациях IFC (в примере конфигов
_examples/IFC_Export_Config_example— общие папки00_Common,01_Export_Layersи проектные подпапки вроде02_Project_example; реальные папки проектов подdir_export_configмогут называться по-своему); admin_data/manage.xlsxиadmin_data/history/history.xlsx.
Этот файл (ExportIFC_manual.md) — подробный технический мануал по настройке и эксплуатации ExportIFC. Краткое описание и «быстрый старт» вынесены в основной (README репозитория); здесь — расширенная версия с деталями.
Этот мануал рассчитан на людей, которые отвечают за инфраструктуру и автоматизацию, а не просто «умеют открыть Revit».
Основные роли:
-
BIM-координатор / BIM-менеджер:
- понимает структуру моделей Revit в проекте;
- готов настраивать IFC-конфиги (или хотя бы передавать их специалисту);
- может проверять корректность выгрузки IFC.
-
Технический специалист / администратор:
- устанавливает и обновляет Python;
- настраивает pyRevit и привязку скрипта
ExportIFC.py; - редактирует
_settings/settings.ini; - отвечает за Планировщик задач Windows и права доступа к сетевым папкам.
Кому этот документ не нужен:
- Рядовым проектировщикам.
В идеальном мире им достаточно:- знать, что выгрузка IFC происходит автоматически,
- уметь при необходимости запустить готовый
.bat-файл вручную (и то не всегда).
Для проектировщиков может существовать отдельная короткая инструкция/Word-файл «что делать, если IFC не обновился». Здесь мы сознательно не опускаем уровень подробностей ради удобства админов и координаторов.
В документе принята следующая логика:
-
Раздел 2. Обзор архитектуры — что вообще происходит «под капотом»:
- как взаимодействуют CPython-часть (
main.py) и pyRevit-скрипт (ExportIFC.py); - какую роль играют
settings.ini,admin_dataи конфиги IFC.
- как взаимодействуют CPython-часть (
-
Раздел 3. Быстрый старт — пошаговый сценарий «настроить всё с нуля».
Если вы впервые ставите ExportIFC на машине/в компании — начинайте отсюда. -
Разделы 4–9 — справочная часть:
- требования к окружению и минимальные версии софта (Раздел 4),
- структура проекта и ролей папок (Раздел 5),
- настройка
_settings/settings.ini(Раздел 6), - структура конфигов IFC (Раздел 7),
- структура
admin_dataи логика работыmanage.xlsxиhistory.xlsx(Раздел 8), - требования к самим Revit-моделям (Раздел 9).
-
Раздел 10. Запуск и сценарии эксплуатации:
- ручной запуск через
_settings/bat/run_export_ifc.bat, запуск по расписанию; - сценарий настройки нового проекта;
- перенос готовой настройки на другую машину.
- ручной запуск через
-
Раздел 11. Диагностика и устранение неполадок:
- как читать логи;
- как пользоваться
history.xlsx; - типовые проблемы и пути их решения.
-
Раздел 12. Рекомендации и связанные документы:
- советы по структуре папок и путей;
- ссылки на другие
.mdи примеры внутри репозитория; - ссылка на Word-версию мануала (если она используется в компании).
Рекомендуемая последовательность чтения и действий:
- Раздел 2 — понять общую архитектуру (что за что отвечает).
- Раздел 3 — пройти по чек-листу «Быстрый старт».
- По ходу выполнения шагов из Быстрого старта, при необходимости:
- заглядывать в Раздел 4 (требования и софт),
- Раздел 6 (настройка
settings.ini), - Раздел 7 (конфиги IFC),
- Раздел 8 (настройка
admin_data), - Раздел 9 (требования к моделям).
- Завершить на Разделе 10 (варианты запуска и запуск по расписанию).
- Сначала смотрим Раздел 11:
- по уровням логов и сообщениям в
_logsобычно видно, в какой части цепочки проблема.
- по уровням логов и сообщениям в
- В зависимости от симптомов:
- если не запускается вообще — сверяемся с Разделом 4 (окружение) и Разделом 10 (способ запуска);
- если не находится/не выгружается конкретная модель — Раздел 8 и Раздел 9;
- если IFC выгружается «не так» — Раздел 7 (конфиги IFC).
Этот мануал описывает поведение системы и контракты на уровне модулей и данных.
Он не является подробной API-документацией: внутренняя реализация отдельных функций и классов в core, revit, config и utils здесь не разбирается.
Рекомендуемая стратегия:
- использовать этот документ как описание «как должно работать»;
- при изменении поведения:
- сначала менять код и автотесты (если есть),
- затем актуализировать соответствующие разделы мануала (чаще всего 2, 6, 7, 8, 10, 11);
- не забывать сверять краткий README репозитория и
ExportIFC_manual.md, чтобы они не противоречили друг другу.
Высокоуровнево цепочка выглядит так:
-
Запуск оркестратора (CPython)
Вы запускаете оркестратор через bat-файл_settings/bat/run_export_ifc.bat
(под капотом он вызываетmain.pyс нужными флагами).
main.py:- настраивает логирование;
- находит корень проекта и читает
_settings/settings.ini; - создаёт и запускает фасад
ExportOrchestrator.
-
Загрузка настроек и списка моделей
ВнутриExportOrchestrator:- через
configзагружаются пути и параметры изsettings.ini; - из
admin_data/manage.xlsxчитается список моделей и настроек по ним; - из
admin_data/history/history.xlsx— история прошлых выгрузок.
- через
-
Проверка актуальности IFC и формирование задач
Оркестратор:- для каждой модели:
- определяет, нужна ли выгрузка (по истории и реальным IFC-файлам на диске);
- лениво определяет версию Revit по самому файлу
.rvt;
- группирует модели по версиям Revit;
- формирует для каждой версии:
Task<версия>.txt(например,Task2024.txt) — список путей к моделям для pyRevit;- временный CSV
<TMP_NAME>.csv(по умолчаниюtmp.csv, имя задаётся константойTMP_NAMEвconfig/constants.py) с полным набором параметров экспорта.
- для каждой модели:
-
Запуск pyRevit по версиям Revit
Для каждой версии, где есть задания:- запускается pyRevit CLI командой вида
pyrevit run ExportIFC.py --models=Task<версия>.txt --revit=<версия> [--debug]; - в переменной окружения
EXPORTIFC_ROOTв дочерний процесс пробрасывается путь к скриптам ExportIFC,
чтобы внутри Revit тот жеsettings.iniи та же структура путей были доступны.
- запускается pyRevit CLI командой вида
-
Работа pyRevit-скрипта внутри Revit
СкриптExportIFC.py, выполняющийся внутри запущенного Revit:- читает
admin_data/<TMP_NAME>.csv; - по каждой строке:
- открывает соответствующую модель (если она ещё не открыта);
- ищет 3D-вид для экспорта по имени из
settings.ini; - готовит
IFCExportOptions(по JSON-конфигу и файлу маппинга); - выполняет экспорт с маппингом и/или без;
- логирует ошибки и предупреждения (отдельные текстовые логи).
Все знания о Revit API, 3D-видах, IFCExportOptions живут именно тут.
- читает
-
Обновление истории и финальные логи
После завершения всех версий оркестратор:- обновляет
history.xlsx(факт последней «проверки/экспорта» по каждой модели) всегда — даже при dry-run (run_pyrevit=False) или если отдельные версии Revit завершились с ошибкой; - считает запуск успешным только если сохранился
history.xlsxи pyRevit-выгрузка для всех версий не вернула ошибок (в режимах без запуска pyRevit — dry-run или отсутствие задач — успех определяется только сохранениемhistory.xlsx); - записывает сводки по версиям и проблемным моделям;
- добавляет разделители только в те текстовые логи pyRevit, которые реально менялись в этом запуске (чтобы в
_logsбыло видно блоками по запускам без лишних пустых строк).
- обновляет
При следующем запуске именно эта связка «history + реальные IFC-файлы на диске» позволяет понимать, какие модели можно пропустить, а какие нужно выгружать заново.
Схематично эта цепочка показана на диаграмме ниже.
main.py — минималистичная оболочка для запуска оркестратора:
- настраивает корневой логгер (
export_ifc), консольный вывод и файлы логов; - создаёт
ExportOrchestrator(debug=..., run_pyrevit=...); - вызывает
orchestrator.run()и возвращает код возврата процесса:0, еслиorchestrator.run()вернул успех (pyRevit отработал без ошибок или не запускался в dry-run, и удалось записатьhistory.xlsx);1— во всех остальных случаях.
Поведение запуска управляется двумя флагами в начале файла:
-
DEBUG: boolFalse— обычный режим;True— к команде запуска pyRevit добавляется--debug, pyRevit больше пишет в консоль/логи.
Когда использовать: при отладке проблем с запуском pyRevit или экспортом, чтобы видеть дополнительную диагностику.
-
RUN_PYREVIT: boolTrue— полный сценарий: формирование Task/CSV, обновлениеhistory.xlsx, запуск pyRevit-скрипта;False— dry-run: формируются Task/CSV и обновляется история, но pyRevit не вызывается.
Когда использовать:- при первичной настройке
manage.xlsxи путей, чтобы проверить, какие модели попадут в задачи, не поднимая Revit; - при отладке логики отбора моделей и истории.
Важно: при импорте main.py ничего не запускается — он безопасен для автотестов и внешних инструментов.
Запуск происходит только в блоке if __name__ == "__main__":.
Пакет core содержит весь «бизнес-процесс» экспорта IFC на стороне CPython:
-
core/exporter.py→ExportOrchestrator
Фасад, который:- загружает список моделей и ignore-list из
manage.xlsx; - загружает историю из
history.xlsx; - с помощью
IFCCheckerпроверяет актуальность IFC-файлов на диске; - через
ExportTaskManagerрешает, какие модели требуют выгрузки и в какие версии Revit их отправить; - вызывает
PyRevitRunnerдля каждой версии Revit; - сохраняет историю и пишет сводку логов;
- возвращает успех, только если pyRevit не сообщил об ошибках и файл истории удалось записать.
- загружает список моделей и ignore-list из
-
core/manage.py
Загрузка<MANAGE_NAME>.xlsx(по умолчаниюmanage.xlsx, имя задаётся вconfig/constants.py):- список моделей
RevitModel; - множество игнорируемых путей;
- предупреждения по подозрительным датам (
mtime).
Если сам файл
<MANAGE_NAME>.xlsxотсутствует, загрузчик сразу выбрасываетFileNotFoundError, и оркестратор прекращает работу до появления файла на месте.При чтении
manage.xlsxи подготовке задач учитываются:- имена листов (
SHEET_PATH,SHEET_IGNORE) и индексы колонок изconfig.excel; - проверка существования JSON-конфига и файла маппинга на диске (если нужные файлы не найдены, выбрасывается
FileNotFoundError; вmain.pyэто перехватывается как фатальная ошибка файловой валидации с коротким CRITICAL-сообщением, а полная трассировка выводится только приDEBUG = True; после исправления путей в manage.xlsx запуск нужно повторить); - автоматическое создание выходных папок для IFC: для путей из колонок B и (при включённой nomap-выгрузке) E вызывается
_prepare_output_dirs(), которая черезensure_dir(...)создаёт директории при отсутствии и ничего не делает, если они уже есть.
- список моделей
-
core/models.py→RevitModel
Описывает одну модель Revit:- путь к
.rvt, - директории для выгрузки IFC (mapped/nomap),
- файлы JSON-конфигов и маппинга,
- лениво определяемую версию Revit и номер сборки,
- методы
needs_export(...)иexpected_ifc_path_*().
- путь к
-
core/history.py→HistoryManager
Работа с<HISTORY_NAME>.xlsx(по умолчаниюhistory.xlsx, имя задаётся вconfig/constants.py):- хранение [путь к .rvt → дата последней выгрузки/проверки];
- чтение/запись в формате Excel, с округлением дат до минут;
- полная перезапись листа при сохранении.
-
core/ifc_checker.py→IFCChecker
Сравнение mtime IFC-файлов с mtime.rvt:- умеет проверять отдельно сценарий с маппингом (mapped) и без (nomap);
- учитывает только актуальные файлы (по времени «не старее модели»);
- использует внутренний кэш, чтобы не перечитывать содержимое каталогов на каждом шаге.
-
core/tasks.py→ExportTaskManager- распределяет модели по поддерживаемым версиям Revit;
- формирует
Task<версия>.txtдля pyRevit (список путей к моделям); - создаёт временный CSV
<TMP_NAME>.csv(по умолчаниюtmp.csv, имя задаётся вconfig/constants.py) с колонками:
path;output_dir_mapping;mapping_json;family_mapping_file;output_dir_nomap;nomap_json(подробности см. Разделы 8.3–8.4); - собирает «корзину логов» по проблемным моделям (не определилась версия, версия слишком новая и т.п.).
-
core/pyRevit_runner.py→PyRevitRunner- запускает pyRevit CLI для конкретной версии:
pyrevit run <SCRIPT_EXPORT_IFC> --models=Task<версия>.txt --revit=<версия> [--debug];
- устанавливает переменную среды
EXPORTIFC_ROOT=DIR_SCRIPTS; - возвращает код возврата процесса, чтобы оркестратор понимал, был ли запуск успешным.
- запускает pyRevit CLI для конкретной версии:
-
core/console_output.py,core/__init__.pyВспомогательные вещи:
- оформление консольного вывода (красивые теги уровней логов, цвета);
- документация назначения пакета
coreкак «ядра» экспорта.
Пакет config отвечает за настройки, пути и константы:
-
config/settings.py→Settings(Singleton)- ищет корень проекта (
main_dir) по следующему приоритету:EXPORTIFC_ROOT(если в нём естьconfig/иutils/);- расположение самого пакета
config; sys.argv[0];
- находит и читает
_settings/settings.ini; - предоставляет доступ к параметрам через свойства (с приводом типов).
Для администратора: в 99% случаев изменять нужно именно
_settings/settings.ini, а не сам модульconfig.settings. - ищет корень проекта (
-
config/paths.py- формирует абсолютные пути:
DIR_SCRIPTS(где лежатmain.pyиExportIFC.py);DIR_EXPORT_CONFIG(папка с конфигами IFC);DIR_ADMIN_DATA(папка сmanage.xlsx,history,_logs);DIR_HISTORY,DIR_LOGSи т.п.;
- проверяет существование ключевых папок при импорте (ошибка конфигурации — сразу исключение).
- формирует абсолютные пути:
-
config/files.py- даёт удобные функции:
MANAGE_PATH,HISTORY_PATH;build_task_path(version)→admin_data/Task<версия>.txt;build_csv_path(...)→ путь к<TMP_NAME>.csv(по умолчанию вadmin_data);SCRIPT_EXPORT_IFC→ путь кExportIFC.pyрядом сmain.py.
- даёт удобные функции:
-
config/excel.py- описывает, какие листы и какие индексы столбцов используются в
manage.xlsxиhistory.xlsx; - фиксирует «контракты» Excel-таблиц, чтобы их можно было менять централизованно.
- описывает, какие листы и какие индексы столбцов используются в
-
config/constants.py- глобальные константы проекта:
- базовые имена (
TMP_NAME,MANAGE_NAME,HISTORY_NAME); - имя логгера (
LOGGER_NAME); - формат даты/времени;
- имена файлов логов (
LOGFILE_OPENING_ERRORS,LOGFILE_MISSING_VIEW_TEMPLATE,LOGFILE_VERSION_NOT_FOUNDи т.п.), причёмLOGFILE_MISSING_VIEW_TEMPLATE— это шаблон для лога моделей без нужного 3D-вида; подстрока$$$заменяется на текущее значениеexport_view3d_nameизsettings.iniпри формировании имени файла, поэтому фактическое имя лога включает 3D-вид (например,2_not_view_Export); - путь к DLL IFC Exporter:
_settings/ApiIFCExporter/Autodesk.IFC.Export.UI.dll.
- базовые имена (
Для администратора:
- глобальные константы проекта:
-
здесь можно теоретически переопределить имена служебных файлов (
MANAGE_NAME,HISTORY_NAME,TMP_NAME) и логов,
но делать это стоит только при полном понимании последствий: придётся синхронно править имена файлов вadmin_data,
примерах из_examplesи документации. В обычной эксплуатации эти значения лучше не трогать. -
config/__init__.py- собирает всё нужное в единый фасад
config(через__all__), чтобы остальной код мог писать простоfrom config import ...и не заботиться о конкретных модулях.
- собирает всё нужное в единый фасад
Пакет utils содержит «инфраструктурные» куски, не привязанные к бизнес-логике:
-
utils/compat.py- функции совместимости для разных версий Python/Windows; безопасное создание директорий (
ensure_dir_compat), корректная обработка параллельных попыток создать одну и ту же папку (EEXISTи т.п.).
- функции совместимости для разных версий Python/Windows; безопасное создание директорий (
-
utils/log_buckets.py- «корзины» логов для оркестратора и pyRevit-части (структуры, которые аккумулируют строки сообщений/ошибок перед записью в текстовые
.txt-логи).
- «корзины» логов для оркестратора и pyRevit-части (структуры, которые аккумулируют строки сообщений/ошибок перед записью в текстовые
-
utils/logs.py- функции записи логов в каталог
_logs: создание/дополнение файлов, добавление заголовков и разделителей, сохранение содержимого «корзин» в физические лог-файлы.
- функции записи логов в каталог
-
utils/fs.py- низкоуровневая работа с файловой системой поверх
compat: безопасное создание директорий (ensure_dir), проверка существования путей, получение/сравнениеmtime(file_mtime,file_mtime_minute).
- низкоуровневая работа с файловой системой поверх
-
utils/files.py- хелперы для имён файлов: гарантированное добавление расширений (
ensure_ext), проверка «чистоты».rvtбез дополнительных суффиксов (is_pure_rvt), формирование базовых имён логов с подстановкой имени 3D-вида (format_log_name_with_view).
- хелперы для имён файлов: гарантированное добавление расширений (
-
utils/cli.py- запуск внешних процессов с построчным чтением вывода (
run_cmd_streaming), получение коротких путей Windows (get_short_path), безопасное экранирование путей и аргументов для командной строки (safe_path).
- запуск внешних процессов с построчным чтением вывода (
-
utils/xlsx_helpers.py- вспомогательные функции для работы с Excel через
openpyxl: загрузка/создание книг, безопасное сохранение, базовые операции с листами/ячейками (чтение, запись, очистка служебных артефактов).
- вспомогательные функции для работы с Excel через
Все, что касается непосредственной работы внутри Revit, сосредоточено в:
- скрипте
ExportIFC.py(лежит рядом сmain.py); - пакете
revit/, который исполняется под IronPython 3.4 в контексте pyRevit.
Основные задачи:
- запуститься из pyRevit в нужной версии Revit;
- прочитать
admin_data/<TMP_NAME>.csvи превратить строки вExportJob; - для каждой строки:
- открыть модель (если она ещё не открыта);
- найти 3D-вид для экспорта;
- подготовить
IFCExportOptionsна основе JSON-конфигов и маппинга; - выполнить экспорт IFC (в одном или двух вариантах: с маппингом и без него);
- выполнить экспорт внутри транзакции Revit и всегда откатить её методом
RollBack, чтобы не вносить изменений в модель; - записать информацию о проблемах (не открылась модель, не найден вид, ошибка экспорта) в текстовые логи.
При этом ExportIFC.py:
- использует тот же
_settings/settings.ini, что и CPython-часть (черезEXPORTIFC_ROOTиSettings); - не определяет версию Revit для файла
.rvt— эту работу заранее делает CPython-оркестратор.
Важная точка настройки для продвинутых админов/разработчиков:
-
Метод
_build_open_options()внутри класса исполнителя экспорта:- создаёт и настраивает
DB.OpenOptionsдля пакетного открытия моделей; - по умолчанию:
- отсоединяет модель от центральной с сохранением рабочих наборов;
- открывает все рабочие наборы;
- разрешает открытие локального файла «не тем» пользователем;
- игнорирует конфликты схем Extensible Storage;
- разрешает открытие иностранных элементов.
Когда и зачем его трогать:
- если политика компании требует иного поведения при открытии моделей
(например, не отсоединять от центральной, не открывать все рабочие наборы и т.п.); - изменение этого метода влияет только на поведение экспорта,
но не меняет формат CSV/Excel и остальную архитектуру.
Если вы не уверены, что делаете — лучше оставить
_build_open_options()как есть: текущие настройки оптимизированы под безопасную пакетную выгрузку. - создаёт и настраивает
Ключевые модули:
-
revit/task_reader.py- читает
admin_data/<TMP_NAME>.csv; - создаёт список
ExportJobс полями:- путь к
.rvt, - каталоги выгрузки (mapped/nomap),
- пути к JSON-конфигам и файлу маппинга.
- путь к
- читает
-
revit/jobs.py→ExportJob- контейнер параметров экспорта для одной модели:
- используется
ExportIFC.pyдля выполнения экспорта.
- используется
- контейнер параметров экспорта для одной модели:
-
revit/views.py- поиск 3D-вида
View3Dпо имени изsettings.ini(export_view3d_name); - исключает шаблонные виды;
- возвращает
None, если подходящий вид не найден (такие случаи логируются отдельно).
- поиск 3D-вида
-
revit/ifc_options.py- загрузка JSON-конфигов IFC;
- подготовка и настройка
IFCExportOptionsиIFCExportConfigurationчерезAutodesk.IFC.Export.UI.dll; - приведение типов и спец-полей (даты, ActivePhaseId и т.п.).
-
revit/versions.py- утилита для определения версии Revit и build из бинарного
.rvt(по строковым маркерамFormat:,Build:и т.п.).
Используется на стороне CPython (черезRevitModel.load_version()), чтобы не запускать Revit только ради определения версии.
- утилита для определения версии Revit и build из бинарного
-
revit/_api.py- тонкая прослойка над Revit API (DB, UI, коллекции элементов), чтобы упростить импорт и сократить явную «болванку» кода.
С точки зрения пользователя есть несколько ключевых сущностей:
-
Конфигурация и настройки:
_settings/settings.ini— глобальные пути, версии Revit, имена листов Excel, имена подпапок маппинга и т.п. (подробно в Разделе 6);- конфиги IFC (общие, слоёв, проектные папки — см. Раздел 7 и Описание структуры конфигов IFC).
-
Управляющие Excel-файлы:
admin_data/manage.xlsx— список моделей и их настроек (Раздел 8);admin_data/history/history.xlsx— история экспортов по моделям (Раздел 8 и 11).
-
Служебные файлы задач:
admin_data/Task<версия>.txt(например,Task2024.txt) — список путей к моделям для pyRevitadmin_data/<TMP_NAME>.csv(по умолчаниюtmp.csv) — временный CSV с полным набором параметров экспорта для текущей версии Revit.
-
Результаты и логи:
- целевые IFC-файлы — складываются в каталоги, которые оркестратор рассчитывает на основе путей из
manage.xlsx(с учётом того, используем ли мы выгрузку с маппингом и без него); - текстовые логи в
admin_data/_logs/:- часть пишет оркестратор (версии не найдены, версии слишком новые, проблемы с датами и т.п.);
- часть — pyRevit-скрипт (ошибки открытия файлов, отсутствие 3D-вида, ошибки экспорта).
- целевые IFC-файлы — складываются в каталоги, которые оркестратор рассчитывает на основе путей из
-
Выбор версии Revit и решение «что вообще экспортировать» — всегда делает CPython-часть.
pyRevit-скрипт работает уже внутри нужной версии Revit и просто выполняет экспорт по заранее подготовленным задачам. -
Обе части используют один и тот же
settings.iniи одну и ту же структуру проекта.
За счётEXPORTIFC_ROOTи общей логикиSettingsможно запускать оркестратор и pyRevit из разных контекстов, но с едиными настройками. -
Реальное состояние IFC берётся с диска, а
history.xlsx— это кеш для ускорения принятия решения.
При любых сомнениях экспортер смотрит и на историю, и на реальные файлы, а не полагается слепо только на Excel. -
У администратора есть несколько контролируемых «крутилок», но большинство настроек живёт в
settings.iniи Excel.
ФлагиDEBUGиRUN_PYREVITвmain.py, метод_build_open_options()вExportIFC.pyи константы вconfig/constants.py— это уже уровень «тонкой настройки», который нужно трогать осознанно.
Дальше в Разделе 3 мы разложим эту архитектуру в виде конкретного «Быстрого старта» — что именно нужно установить, куда положить конфиги и как сделать первый успешный прогон.
Этот раздел — короткий чек-лист, как с нуля получить первый успешный экспорт IFC.
Подробности по каждому шагу разобраны дальше в разделах 4–10.
Перед тем как лезть в настройки ExportIFC, убедитесь, что:
- Revit нужных версий уже установлен.
- IFC Exporter не требует установки отдельного инсталлятора.
Используется модуль, который идёт с Revit, но его DLL один раз нужно вручную скопировать из каталога установленного Revit в папку_settings/ApiIFCExporter(подробно — в Разделе 4). - Python 3.12+ уже установлен в системе (минимальная версия — 3.12).
Если вы ещё не ставили Python или не уверены в версии, сначала выполните шаги из Раздела 4 и проверьте установку, а затем вернитесь к этому чек-листу. - pyRevit установлен и базово работает в Revit,
его движок переключён на нужную версию IronPython 3.4 (например, 3.4.2), совместимую с используемой версией pyRevit; привязка делается bat-скриптами из_settings/bat/attach_pyrevit_engine_all_revit.bat
(подробности — см. Раздел 3.3, Раздел 4, README репозитория
и README для bat-скриптов). - У вас есть права читать/писать:
- в папку с моделями Revit;
- в папку
admin_data; - в папки, куда будут складываться IFC.
Если какой-то пункт не выполняется — имеет смысл сначала дочитать Раздел 4
и основной README репозитория, а потом возвращаться к этому чек-листу.
-
Скачайте или клонируйте репозиторий
ExportIFCfromRevit.-
Через браузер на GitHub: используйте кнопку
Code → Download ZIP.
За примером можно посмотреть раздел «Установка и первый запуск (Quick start)»
в основном README репозитория, там приведён скриншот кнопки и пояснения. -
(Опционально) Через Git, если он установлен:
выполните в терминале командуgit clone https://github.com/PaukPySharp/ExportIFCFromRevit-Python.git
-
После скачивания/клонирования переместите (или сразу клонируйте) репозиторий в удобное место,
например:
D:\BIM\ExportIFCfromRevit
-
-
Проверьте запуск Python из корня репозитория (в терминале):
Выполните команду:
py -3 --version
Данная команда предполагает, что в системе установлен Python Launcher и Python версии не ниже 3.12 (рекомендуется 3.12+).
Если команда не находится или версия ниже требуемой — вернитесь к установке Python
(см. Раздел 4 и README репозитория). -
Установите библиотеку
openpyxlчерез готовый bat-скрипт.Перейдите в папку
_settings/bat/внутри репозитория и запустите:install_openpyxl_pip_or_whl.bat— основной вариант.
Скрипт сам:- проверит, установлен ли
openpyxlдля используемого Python; - попробует установить его через интернет;
- при необходимости поставит пакет из локальных
.whl
в папке_for_python/openpyxl.
- проверит, установлен ли
Если интернета нет вообще и вариант с
install_openpyxl_pip_or_whl.batне сработал, используйте:openpyxl_offline_install/install_openpyxl_zip.bat— полностью офлайн-вариант.
Подробности и альтернативы описаны в README для bat-скриптов
и README для offline-bat.
Для работы ExportIFC pyRevit должен быть:
- установлен для нужных версий Revit;
- привязан к движку IronPython 3.4 (например, 3.4.2), совместимый с используемой версией pyRevit;
- доступен через команду
pyrevitв консоли (для запуска через CLI).
Минимальная проверка:
-
Проверьте наличие вкладки pyRevit в Revit.
Откройте любую поддерживаемую версию Revit и убедитесь, что в интерфейсе есть вкладкаpyRevit.
Если её нет — сначала установите pyRevit (см. Раздел 4 и документацию pyRevit). -
Привяжите нужный движок IronPython ко всем версиям Revit.
Запустите файл:
_settings/bat/attach_pyrevit_engine_all_revit.bat.Скрипт:
- использует утилиту
pyrevit(или полный путь к ней — см. комментарии внутри bat-файла); - настраивает указанный clone pyRevit (по умолчанию
master); - подключает выбранный движок (например, 342 для IronPython 3.4.2) ко всем установленным версиям Revit.
- использует утилиту
-
Проверьте, что pyRevit CLI доступен.
В командной строке выполните, например, командуpyrevit --help
Если команда не находится:
- проверьте, установлен ли pyRevit;
- убедитесь, что путь к
pyrevit.exeдобавлен вPATH,
либо пропишите его напрямую в_settings/bat/attach_pyrevit_engine_all_revit.bat
(переменнаяPYREVIT_CLI); - при необходимости загляните в README репозитория
и README для bat-скриптов.
Этого уровня проверки достаточно для «Быстрого старта».
Все детальные нюансы работы pyRevit, версий движка и т.п. раскрываются в Разделе 4.
Файл _settings/settings.ini — главный конфигурационный файл ExportIFC.
Для первого запуска достаточно настроить минимальный набор ключей
(точные имена/типы будут в Разделе 6):
-
Путь к папке с IFC-конфигами. Секция
[Paths]Пример значения:
dir_export_config = D:\BIM\IFC_ConfigsЭта папка будет содержать ваши
00_Common,01_Export_Layersи набор подпапок с конфигами проектов (в примере используются имена вида02_Project_*, но реальные имена папок могут быть любыми).
На старте можно просто скопировать туда пример
_examples/IFC_Export_Config_example(см. Разделы 3.5, 5 и 7). -
Путь к
admin_data. Секция[Paths]Примеры значений:
dir_admin_data = D:\BIM\admin_data
dir_admin_data = \\SERVER\BIM\admin_dataЗдесь будут лежать
manage.xlsx, папкаhistory(сhistory.xlsx)
и папка_logsсо служебными логами. -
Список поддерживаемых версий Revit. Секция
[Revit]Пример значения:
revit_versions = 2021,2022,2023,2024Укажите только те версии, которые реально установлены на машине выгрузки
и используются в ваших проектах. -
Имя 3D-вида для экспорта. Секция
[Revit]Пример значения:
export_view3d_name = NavisworksЭто имя удобно использовать, потому что Navisworks по умолчанию тоже
использует видNavisworksдля импорта — можно «убить двух зайцев» одним видом.В каждой модели Revit должен существовать не шаблонный 3D-вид с таким именем
(см. Раздел 3.7 и Раздел 9).
Остальные параметры файла _settings/settings.ini на первом этапе можно оставить по умолчанию.
Подробное описание всех настроек приведено в Разделе 6.
Для первого запуска проще всего взять готовый пример конфигурации IFC:
-
В репозитории найдите папку с примером:
../_examples/IFC_Export_Config_example -
Скопируйте её содержимое в папку, указанную в
dir_export_config, например:D:\BIM\IFC_Configs -
Для теста можно использовать пример как есть:
- не менять
00_Commonи01_Export_Layers; - оставить
02_Project_exampleкак демонстрационный проект.
- не менять
-
Позже, когда вы получите первый успешный экспорт, можно:
- создать свою папку с конфигами проекта (чаще всего внутри
dir_export_config, например02_<Название_проекта>; фактический путь до этой папки потом целиком попадает в колонку Cmanage.xlsxкак абсолютный путь); - скопировать туда содержимое
02_Project_example; - адаптировать
Export_Settings.json/Export_Settings_NotAttributes.jsonиProperty_Mapping.txtпод свой проект.
- создать свою папку с конфигами проекта (чаще всего внутри
Подробная структура конфигов IFC описана в Разделе 5 и 7
и в отдельном документе
Описание структуры конфигов IFC.
-
Выберите, где будет находиться
admin_data.В репозитории уже есть готовая папка-шаблон:
...\ExportIFCfromRevit\admin_data\Варианта использования два:
-
Локальный тест / одиночная машина (тестовый режим).
В файле_settings/settings.iniоставьте
is_prod_mode = False.
В этом режимеdir_admin_dataигнорируется, и скрипт автоматически использует папкуadmin_data, лежащую рядом со скриптами ExportIFCfromRevit.
Ничего копировать и настраивать дополнительно не нужно. -
Работа по сети / общий диск (production-режим).
Установитеis_prod_mode = True, скопируйте папкуadmin_dataцеликом
(со всеми файлами и подпапками) в нужное место, например:
D:\BIM\admin_dataили\\SERVER\BIM\admin_data.
В этом случае в_settings/settings.iniукажите полный путь к этой папке
в параметреdir_admin_data, например:
dir_admin_data = D:\BIM\admin_dataВ prod-режиме приложение использует именно этот каталог, и внутри указанной папки уже должны лежать
manage.xlsx, папкаhistoryи папка_logs.
Важно: не создавайте пустую
admin_dataс нуля — всегда берите готовый шаблон из репозитория. -
-
Проверьте содержимое
admin_data.В выбранной рабочей папке
admin_dataдолжны быть (это уже есть в шаблоне):- файл
manage.xlsx— основная таблица со списком задач и папок с моделями; - папка
history— создаётся автоматически при необходимости;- файл
history.xlsxпоявится при первом сохранении истории, поэтому можно оставить пустую папку из шаблона или просто указать путь в настройках; - текстовый README из шаблона можно сохранить для напоминания;
- файл
- папка
_logs— также создаётся автоматически при запуске, но можно оставить подготовленную папку из шаблона.
При переносе
admin_dataна другой диск или сервер просто убедитесь, что вся эта структура переехала целиком. - файл
-
Минимально заполните
admin_data/manage.xlsx(лист с путями).Каждая непустая строка на этом листе задаёт одну настройку экспорта:
«взять все файлы.rvtиз папки в колонке A и выгрузить их в IFC
согласно параметрам из колонок B–F».Для первого запуска достаточно:
- в колонке A указать папку, где лежат модели
.rvt, которые нужно выгружать
(скрипт берёт файлы только из этой папки, без рекурсии по подпапкам); - в колонке B указать папку, куда будут складываться IFC с маппингом;
- для основной выгрузки IFC с маппингом обязательно заполните:
- в колонке C — абсолютный путь к папке проекта с настройками IFC.
Типовой случай — подпапка внутриdir_export_config(в примере используется формат02_Project_*),
но при желании конфиги можно хранить и в другом месте (локальный диск или сетевой ресурс) —
важно, чтобы путь в колонке C в точности совпадал с фактическим расположением файлов
Export_Settings.jsonиProperty_Mapping.txt; - в колонке D — имя файла маппинга категорий без расширения
- в колонке C — абсолютный путь к папке проекта с настройками IFC.
- при необходимости дополнительной выгрузки без маппинга:
- в колонке E указать папку для «чистых» IFC;
- в колонке F указать имя JSON-файла без расширения
(например,Export_Settings_NotAttributesдля файлаExport_Settings_NotAttributes.jsonв00_Common).
Если выгрузка без маппинга не нужна — достаточно колонок A–D,
а дополнительную выгрузку проще отключить флагомenable_unmapped_exportв_settings/settings.ini.Подробная расшифровка всех колонок и листов
manage.xlsxприведена в Разделе 8. - в колонке A указать папку, где лежат модели
-
При необходимости заполните лист IgnoreList.
На этом листе перечисляются абсолютные пути к файлам (полные пути к
.rvt),
которые нужно исключить из обработки, даже если эти файлы лежат в папках
из колонки A. Одна строка — один путь.
Перед первым реальным запуском стоит проверить:
-
Пути в
manage.xlsxреальны:- все
.rvtсуществуют по указанным путям; - у пользователя есть права чтения.
- все
-
В каждой модели есть нужный 3D-вид:
- имя вида совпадает с
export_view3d_nameиз_settings/settings.ini; - этот вид не является шаблонным (Template = False);
- вид не удалён и не переименован локально.
- имя вида совпадает с
-
Проверьте конфиги IFC и маппинг:
- JSON-конфиги и файл
Property_Mapping.txtсуществуют по путям, которые ожидает скрипт; - структура папок конфигов соответствует ожидаемой
(есть общие папки00_Commonи01_Export_Layersили их эквиваленты из секции[Mapping]в_settings/settings.ini,
а проектные папки с конфигами реально существуют по тем абсолютным путям, которые указаны в колонке Cmanage.xlsx
— чаще всего это подпапки подdir_export_config; префикс02_из примера не обязателен, но помогает сортировать проекты).
- JSON-конфиги и файл
Все формальные требования к моделям и видам будут подробно разобраны в Разделе 9.
Здесь задача — минимально убедиться, что «модель вообще готова к выгрузке».
Когда настройки и manage.xlsx готовы, можно делать первый пробный запуск.
-
(Опционально) Проверка в режиме dry-run.
В файле
main.pyможно временно выставить:DEBUG = True
RUN_PYREVIT = FalseВ этом режиме:
- будут сформированы
Task<версия>.txtиtmp.csvдля всех версий Revit, где нашлись модели; - обновится
history.xlsx(модели, попавшие в задачи, будут считаться «проверенными» по дате модификации); - pyRevit и Revit не будут запускаться — вы увидите только подготовку задач и диагностику, а
tmp.csvостанется вdir_admin_data, и его можно просмотреть вручную.
Запускать в этом режиме нужно тем же батником
_settings/bat/run_export_ifc.bat— он просто вызоветmain.pyс текущими флагами.Это полезно, чтобы проверить:
- правильно ли читается
manage.xlsx; - корректно ли находятся версии Revit;
- не падает ли код на этапах до запуска Revit.
- будут сформированы
-
Обычный запуск (с pyRevit).
Верните
RUN_PYREVIT = True(значениеDEBUGпо желанию):DEBUG = False(илиTrue, если нужна подробная диагностика)
RUN_PYREVIT = TrueЗапустите основной bat-файл:
_settings/bat/run_export_ifc.batЗапускать можно:
- двойным щелчком по файлу
run_export_ifc.batв проводнике; - либо из консоли командой
_settings\bat\run_export_ifc.bat
(bat-файл определяет корень репозитория по своему расположению,
поэтому его нужно вызывать только из текущей папки).При желании можно сделать ярлык на
run_export_ifc.batна рабочем столе
или в общей «служебной» папке. Перемещать сам файл из_settings/batне нужно (он использует относительные пути внутри проекта).В начале bat-файла есть блок «
НАСТРОЙКИ СКРИПТА» — при необходимости там можно указать конкретную версию Python (PYTHON_VERSION) или команду запуска (PY_CMD), но для типовой установки эти значения трогать не требуется.
Подробности — в README для bat-скриптов. - двойным щелчком по файлу
-
Проверьте результат:
- IFC-файлы появились в папках, указанных в
manage.xlsx; - в
admin_data/history/history.xlsxпоявились записи о проверенных/выгруженных моделях; - в
admin_data/_logsпоявились логи запуска.
- IFC-файлы появились в папках, указанных в
Если что-то пошло не так — загляните в Раздел 11 и в логи.
После того как ручной запуск стабильно отрабатывает, можно переходить к настройке автоматического запуска.
После успешного ручного прогона:
-
В Планировщике задач Windows создайте задание, которое:
- запускает
_settings/bat/run_export_ifc.batот имени нужного пользователя; - выполняется по расписанию (например, раз в ночь или каждый час).
- запускает
-
Убедитесь, что:
- у задачи есть доступ к тем же путям, что и при ручном запуске;
- при выполнении задачи обновляются IFC-файлы и
history.xlsx.
Подробная пошаговая настройка Планировщика, типичные проблемы и рекомендации — в Разделе 10.
Этот раздел дополняет краткий перечень из основного README репозитория и Раздел 3 «Быстрый старт». Здесь — более подробные требования к ОС, Revit, Python, pyRevit и отдельным служебным компонентам.
Минимальные условия, при которых ExportIFC вообще имеет смысл настраивать:
- ОС: Windows 10 / 11 (64-бит).
- Права пользователя:
- запуск Revit и pyRevit без прав администратора (обычный инженер/координатор);
- чтение/запись в:
- папки с моделями Revit;
- папку
admin_data(локальную или сетевую); - папку с конфигами IFC (
dir_export_config); - временные каталоги, которые использует Python и Revit.
- Сетевое окружение (если используется):
- стабильное подключение к файловому серверу;
- отсутствие агрессивных антивирусов/сканеров, блокирующих запуск
.bat,.py,pyrevit.exe.
Если что-то из этого регулярно ломается (периодически пропадают сетевые диски,
Revit запрещён политиками и т.п.) — автоматизация выгрузки будет работать нестабильно.
ExportIFC умеет работать с несколькими версиями Revit одновременно.
Основные моменты:
- В
revit_versionsв_settings/settings.iniперечисляются версии,
с которыми должен работать оркестратор, например:
revit_versions = 2021,2022,2023,2024. - Для каждой версии из списка Revit должен быть установлен на этой машине.
- Файлы моделей
.rvtмогут быть разной версии — оркестратор сам определит версию файла
и отправит его в соответствующую версию Revit. - Если версия файла новее, чем все версии из
revit_versions— модель попадёт в лог4_not_supported_versions(см. Раздел 11).
Рекомендуется:
- держать Revit на актуальных официальных апдейтах (Service Pack/Update);
- периодически пересматривать список
revit_versionsпри обновлении парка Revit в компании.
Отдельный установщик IFC Exporter не требуется: используется модуль, который идёт
в составе установленного Revit.
Для работы ExportIFC важен DLL-файл:
Autodesk.IFC.Export.UI.dll
В проекте принята следующая схема работы с этим DLL-файлом:
- В папке
_settings/ApiIFCExporter/лежит копия этого DLL. - Путь к нему зашит в коде (см.
config/constants.py) и не меняется пользователями.
Кто и что делает:
-
Администратор один раз копирует файл
Autodesk.IFC.Export.UI.dll
из директории Revit, например:C:\Program Files\Autodesk\Revit 2024\AddIns\IFCExporterUI\Autodesk.IFC.Export.UI.dll
в папку:
...\ExportIFCfromRevit\_settings\ApiIFCExporter\
-
После копирования DLL не переименовывается, папка
ApiIFCExporter
тоже не переименовывается.
Если в будущем на машину поставят более новую версию Revit и более свежий IFC Exporter, администратор может (по необходимости) заменить DLL в _settings/ApiIFCExporter на версию из новой Revit.
При автоматическом открытии моделей Revit может показывать диалоги:
- про отсутствующие/обновлённые сторонние плагины;
- про несовместимые надстройки;
- про обновление схем Extensible Storage и т.п.
Такие диалоги блокируют автоматический экспорт.
Рекомендации:
- На машине, где крутится ExportIFC, должны быть установлены
те плагины, от которых зависят ваши модели (по крайней мере в режиме «тихой» загрузки). - При появлении новых диалогов при ручном открытии моделей:
- сначала устранить причину (установить/обновить нужный плагин, поправить модель),
- только потом запускать ExportIFC в автоматическом режиме.
- Скрипт внутри Revit использует «безопасные» параметры открытия (см. метод
_build_open_options()вExportIFC.py), но полностью от всех диалогов это не защищает — если Revit считает, что нужно показать критическое предупреждение, он его покажет.
ExportIFC:
- рассчитан на CPython 3.12+;
- запускается через
py -3(Windows Python Launcher) по умолчанию
из bat-скриптов_settings/bat.
Рекомендации:
- ставить именно официальный CPython с сайта
python.org; - использовать 64-битную версию (Windows x86-64);
- одна конкретная версия (например, 3.12.x) должна быть «основной»,
чтобы
py -3указывал именно на неё.
Базовый сценарий:
-
Загрузите установщик CPython 3.12.x или новее
с официального сайта: -
В установщике:
- включите опцию
Add python.exe to PATH(на первом экране мастера); - при необходимости установите Python «для всех пользователей»
либо осознанно выберите путь установки.
- включите опцию
-
После установки в новой консоли выполните команду:
py -3 --version
Должна отобразиться версия вида
Python 3.12.x(пример). -
Если нужен более подробный разбор установки на Windows,
можно прочитать отдельную инструкцию, например:
Если команду py -3 перехватывает другая версия Python (например, 3.11 или 3.13),
в которой у вас не установлен openpyxl или которая не должна быть «рабочей» для ExportIFC, администратор может:
- либо поправить конфигурацию Python Launcher (
py.ini); - либо жёстко указать нужный Python в bat-файлах (параметры
PY_CMD/PYTHON_VERSION
в_settings/bat/run_export_ifc.bat— см. README для bat-скриптов).
Единственная внешняя библиотека, которая нужна ExportIFC — openpyxl.
Рекомендуется всегда ставить её через bat-скрипты из _settings/bat
(см. Раздел 3.2 и README для bat-скриптов):
install_openpyxl_pip_or_whl.bat— основной сценарий;_settings/bat/openpyxl_offline_install/install_openpyxl_zip.bat— полностью офлайн-вариант.
Ручная установка через pip install openpyxl допустима,
но в этом случае ответственность за соответствие версии/окружения берёт на себя администратор.
Краткий обзор (подробные шаги — в Разделе 3.3 и документации pyRevit):
- Установите актуальную версию pyRevit с официального репозитория:
pyRevit — релизы. - Используется pyRevit с поддержкой движка Python 3+
(в типовой конфигурации — движок342, соответствующий IronPython 3.4.2;
при необходимости можно использовать другой поддерживаемый движок Python 3). - pyRevit должен быть:
- установлен для всех версий Revit, которые вы указали в
revit_versions; - корректно подключён (вкладка
pyRevitвидна в интерфейсе Revit); - доступен через команду
pyrevitв консоли.
- установлен для всех версий Revit, которые вы указали в
Минимальная проверка из консоли:
pyrevit -hЕсли команда не находится:
- проверьте, установлен ли pyRevit;
- убедитесь, что путь к
pyrevit.exeдобавлен вPATH
или явно указан в bat-скриптах (переменнаяPYREVIT_CLIв_settings/bat/attach_pyrevit_engine_all_revit.bat); - при необходимости загляните в README репозитория
и документацию pyRevit.
Настройка движка и привязка ко всем установленным версиям Revit выполняются через скрипт:
_settings/bat/attach_pyrevit_engine_all_revit.bat
Этот скрипт:
- вызывает
pyrevitс нужными параметрами; - подключает clone (по умолчанию
master) к установленным версиям Revit; - переключает engine на нужный (обычно
342).
После крупных обновлений pyRevit или установки новой версии Revit
скрипт attach_pyrevit_engine_all_revit.bat имеет смысл запустить повторно.
Подробности по bat-скриптам — в README для bat-скриптов.
Основные рекомендации при обновлении окружения:
-
Обновление Revit.
-
Добавили новую версию Revit?
- Установите её как обычно.
- Добавьте номер версии в
revit_versionsв_settings/settings.ini. - При необходимости обновите DLL IFC Exporter в
_settings/ApiIFCExporter. - Перезапустите
attach_pyrevit_engine_all_revit.bat.
-
Удалили старую версию Revit?
- Уберите её из
revit_versions. - При желании можно удалить её из pyRevit (но это не обязательно).
- Уберите её из
-
-
Обновление Python.
-
Ставите новую минорную версию (например, 3.12.5 вместо 3.12.1):
- убедитесь, что
py -3 --versionпоказывает новую версию; - при необходимости обновите
openpyxlчерезinstall_openpyxl_pip_or_whl.bat.
- убедитесь, что
-
Смена мажорной версии (3.12 → 3.13):
- проверьте, что ExportIFC действительно работает с новой версией (на тестовом стенде);
- при проблемах можно жёстко зафиксировать «рабочую» версию Python в bat-скриптах и/или через настройки Python Launcher.
-
-
Обновление pyRevit.
- После крупных обновлений pyRevit:
- перепривяжите движок через
attach_pyrevit_engine_all_revit.bat; - проверьте, что команда
pyrevitпо-прежнему доступна в консоли; - выполните пробный запуск ExportIFC на тестовом проекте.
- перепривяжите движок через
- После крупных обновлений pyRevit:
Чтобы ExportIFC работал предсказуемо, достаточно запомнить несколько вещей:
- Revit: все нужные версии установлены и видны pyRevit.
- IFC Exporter: DLL
Autodesk.IFC.Export.UI.dllодин раз скопирован в_settings/ApiIFCExporter. - Python: есть рабочий CPython 3.12+, который запускается через
py -3. - openpyxl: установлен через
install_openpyxl_pip_or_whl.batили офлайн-скрипт. - pyRevit: установлен, движок привязан, команда
pyrevitдоступна в консоли.
Если хотя бы один пункт из списка выше не выполнен, ExportIFC либо не стартует вообще, либо будет работать непредсказуемо. Сначала доводим окружение до «зелёного» состояния, и только потом разбираемся с конфигами и Excel.
Все остальные детали — это уже настройка путей и конфигов, о которой речь пойдёт в следующих разделах.
Не обязательно, но сильно упрощает жизнь при настройке и поддержке ExportIFC:
-
Visual Studio Code
Удобно править Python-скрипты,settings.ini, просматривать логи вadmin_data/_logs
и работать с Git-репозиторием. -
Notepad++
Лёгкий редактор для быстрых правок текстовых файлов (.log,.txt,.bat,.ini).
При желании сюда же можно добавить ваши корпоративные инструменты
(просмотрщики логов, менеджеры сторонних плагинов к Revit и т.п.).
Этот раздел дополняет краткое описание из «Структура репозитория»
в README репозитория. Здесь — более детальный разбор того,
что где лежит и к чему нельзя относиться как к «просто папке».
Типичная структура корня репозитория ExportIFCfromRevit:
ExportIFCfromRevit/
main.py
ExportIFC.py
README.md
core/
revit/
config/
utils/
admin_data/
_settings/
_examples/
_for_python/
_git_images/
_docs/
Коротко:
main.py— CPython-оркестратор, точка входа для экспорта (см. Разделы 2 и 3.8).ExportIFC.py— скрипт, который выполняется внутри Revit/pyRevit и делает фактический экспорт IFC.README.md— основной обзор проекта, «витрина» репозитория.
Остальные папки разберём по группам.
Эти четыре пакета — «мозг» ExportIFC.
Они уже подробно описаны в Разделе 2, здесь — только роль на уровне структуры.
Содержит высокоуровневую логику экспорта на стороне CPython:
exporter.py—ExportOrchestrator: главный фасад, который:- читает настройки и список моделей;
- решает, что нужно выгружать;
- формирует задачи/CSV;
- запускает pyRevit и обновляет историю.
manage.py— загрузкаmanage.xlsxи ignore-листа.models.py— описание одной модели Revit (RevitModel) и связанных структур данных, которые используют оркестратор, проверки IFC и история.history.py— работа сhistory.xlsx.ifc_checker.py— проверка актуальности IFC-файлов на диске.tasks.py— формированиеTask<версия>.txt(например,Task2024.txt) и<TMP_NAME>.csv(по умолчаниюtmp.csv, имя задаётся константойTMP_NAMEвconfig/constants.py).pyRevit_runner.py— запуск pyRevit CLI по версиям Revit.console_output.py— оформление консольного вывода (цвета, префиксы уровней).__init__.py— объединяет всё в пакетcore.
Важно: код внутри core задаёт «контракт» работы с manage.xlsx, history.xlsx,
файлами задач и pyRevit. Менять стоит только при осознанной доработке системы,
а не при обычной настройке проекта.
Содержит всё, что работает внутри Revit/pyRevit:
task_reader.py— чтениеtmp.csvи сборExportJob.jobs.py— описание одной задачи экспорта (контейнер параметров).views.py— поиск 3D-вида по имени (export_view3d_name).ifc_options.py— настройкаIFCExportOptions, работа с JSON-конфигами и маппингом.versions.py— утилита для определения версии.rvtпо бинарному содержимому._api.py— тонкая обёртка над Revit API (DB, UI и т.п.).__init__.py— пакетrevit.
Важно для админа: обычно сюда не нужно лезть — поведение регулируется через settings.ini,
конфиги IFC, manage.xlsx и history.xlsx. Вмешательство в код revit/ — это уже уровень разработчика.
Пакет, который превращает settings.ini в удобные объекты и пути:
settings.py—Settings(singleton):- ищет корень проекта;
- читает
_settings/settings.ini; - предоставляет настройки как свойства.
paths.py— вычисляет ключевые директории:- папку скриптов;
dir_export_config;dir_admin_data;- каталоги логов и истории.
files.py— готовые пути к файлам:MANAGE_PATH,HISTORY_PATH;- функции построения путей к
Task<версия>.txt,<TMP_NAME>.csv(по умолчаниюtmp.csv, имя задаётся константойTMP_NAMEвconfig/constants.py),ExportIFC.pyи т.п.
excel.py— структура листов и индексы колонок вmanage.xlsxиhistory.xlsx.constants.py— глобальные константы проекта:- имена служебных файлов (
MANAGE_NAME,HISTORY_NAME,TMP_NAMEи др.); - имя логгера;
- путь к DLL IFC Exporter в
_settings/ApiIFCExporter.
- имена служебных файлов (
__init__.py— фасад для удобного импорта (from config import ...).
Для настройки: 99 % изменений делаются через _settings/settings.ini и Excel-файлы.
config/*.py трогать не нужно, если вы не дорабатываете сам скрипт.
Инфраструктурные функции, не привязанные к бизнес-логике:
cli.py— запуск внешних процессов (pyRevit CLI), экранирование путей.fs.py— работа с файловой системой (создание папок, чтениеmtimeи т.п.).files.py— дополнительные удобства по путям (не путать сconfig/files.py).logs.pyиlog_buckets.py— запись логов и «корзины» сообщений.xlsx_helpers.py— утилиты для работы с Excel черезopenpyxl.compat.py— функции совместимости (например, особенности разных версий Python/Windows).__init__.py— пакетutils.
Папка _settings — это конфигурация и вспомогательные инструменты, но не рабочие данные проекта.
Структура:
_settings/
settings.ini
bat/
ApiIFCExporter/
Содержимое:
-
settings.ini— основной конфигурационный файл:- пути
dir_export_configиdir_admin_data; - список версий Revit (
revit_versions); - имя 3D-вида (
export_view3d_name); - флаги вроде
is_prod_mode,enable_unmapped_exportи т.д.
(подробно — Раздел 6).
- пути
-
bat/— bat-скрипты для установкиopenpyxl, настройки pyRevit и запуска экспорта:run_export_ifc.bat— основной способ запуска экспорта (вручную и по расписанию);install_openpyxl_pip_or_whl.bat— установка/обновлениеopenpyxl;openpyxl_offline_install/— полностью офлайн-установкаopenpyxl;attach_pyrevit_engine_all_revit.bat— привязка движка pyRevit ко всем установленным Revit.
Подробности — в README для bat-скриптов.
-
ApiIFCExporter/:Autodesk.IFC.Export.UI.dll— DLL IFC экспортера, скопированная из каталога Revit.
Путь и имя файла менять нельзя (см. Раздел 4.2.2).
Важно: _settings/settings.ini и bat-скрипты относятся к инфраструктуре конкретной машины/стенда.
Шаблон может храниться в Git, но содержимое (пути, версии) обычно адаптируется под окружение.
Папка admin_data — это рабочая директория с задачами, историей и логами.
В репозитории она присутствует как шаблон, который:
- используется напрямую в тестовом режиме (
is_prod_mode = False); - копируется на сетевой диск или в общую рабочую папку при использовании в production-режиме (
is_prod_mode = True).
Структура шаблона:
admin_data/
manage.xlsx
history/
history.xlsx
<текстовый файл-напоминание>
_logs/
Назначение:
manage.xlsx— список папок с моделями и настроек экспорта (см. Разделы 3.6 и 8).history/history.xlsx— история выгрузок (дата/время последней выгрузки/проверки для каждой модели).- текстовый файл в
history/— напоминание:- файл
history.xlsxрегулярно перезаписывается скриптом; - его нельзя надолго держать открытым в Excel, иначе история не сохранится.
- файл
_logs/— текстовые логи по запускам и моделям (см. Раздел 11).
В продакшене:
- используйте копию этой папки в месте, указанном в
dir_admin_data; - не удаляйте
history/и_logs/— их чистка должна происходить по правилам
(см. Разделы 8 и 11), а не через «удалить всё».
Папка _examples содержит готовые примеры и документацию по конфигам IFC.
Структура:
_examples/
IFC_Export_Config_example/
00_Common/
Export_Settings_NotAttributes.json
01_Export_Layers/
Layer_Mapping.txt
02_Project_example/
Export_Settings.json
Property_Mapping.txt
IFC_Export_Config_structure.md
IFC_Export_Config_structure_notes_ru.docx
Основное:
_examples/IFC_Export_Config_example/— пример структуры конфигов IFC:00_Common/Export_Settings_NotAttributes.json— пример альтернативного JSON-конфига общих настроек экспорта IFC
(упрощённый вариант с урезанным набором атрибутов; можно использовать как основу для «лёгких» пресетов; файлы такого типа в боевой конфигурации ожидаются в папкеdir_common, см. Разделы 7 и 8.3).01_Export_Layers/Layer_Mapping.txt— пример TXT-файла маппинга категорий/слоёв Revit к IFC-классам/типам
(в рабочей конфигурации такие файлы ожидаются в папкеdir_layers, см. Разделы 7 и 8.3).02_Project_example/Export_Settings.json— пример проектного JSON-конфига IFC, показывающий, как переопределять общие настройки под конкретный проект.02_Project_example/Property_Mapping.txt— пример файла маппинга свойств/Property Sets для конкретного проекта.
_examples/IFC_Export_Config_structure.md— отдельная инструкция по структуре конфигов IFC
(рекомендуется читать вместе с Разделом 7)._examples/IFC_Export_Config_structure_notes_ru.docx— сопроводительная записка в формате Word с теми же идеями и расширенными комментариями.
Связь с реальной конфигурацией:
- рабочие конфиги IFC лежат в папке, указанной в
dir_export_config
(см. Разделы 3.5, 6.2 и 7); - чаще всего администратор:
- копирует каталог
IFC_Export_Config_exampleвdir_export_config; - создаёт или переименовывает папки с конфигами проектов внутри
dir_export_config
(имена папок могут быть любыми; префиксы вроде02_используются только для удобной сортировки и не являются обязательными); - на основе примеров
Export_Settings_NotAttributes.json,Export_Settings.json,Property_Mapping.txtиLayer_Mapping.txtсоздаёт свои JSON- и TXT-файлы под требования конкретного проекта.
- копирует каталог
Папка _for_python — хранилище локальных пакетов для Python, которые используются скриптами установки зависимостей без выхода в интернет.
_for_python/
openpyxl/
<.whl файлы и вспомогательные материалы>
openpyxl.zip
Эта папка используется bat-скриптами:
_settings/bat/install_openpyxl_pip_or_whl.bat;_settings/bat/openpyxl_offline_install/install_openpyxl_zip.bat;
для установки/обновления openpyxl:
- либо через
pip(если есть доступ в интернет); - либо из локальных файлов
.whlи архиваopenpyxl.zipв_for_python(офлайн-сценарий или жёстко ограниченный интернет).
Обычно администратору не нужно менять содержимое _for_python вручную:
при необходимости достаточно заменить/добавить актуальные .whl или обновлённый архив openpyxl.zip, сохранив ожидаемую структуру и имена файлов.
Папка _git_images — исключительно для картинок, используемых в документации проекта:
- логотипы и схемы (
hero_logo_pipeline.png,diagram_revit_python_ifc.png); - скриншот скачивания репозитория (
download_repo.png); - баннер для GitHub Social Preview (
social_preview_exportifcfromrevit.png).
На работу скриптов эта папка не влияет.
Папка _docs — основное место для документации по ExportIFC в репозитории.
Текущее целевое содержимое:
ExportIFC_manual.md— основной технический мануал по ExportIFC (этот файл).ExportIFC_manual_ru.docx— компактная Word-версия мануала: те же основные шаги,
но с упором на скриншоты и пояснения в сложных местах (удобно для печати и «быстрого чтения»).- Пример расписания запусков — пример содержимого текстового файла с графиком запуска ExportIFC;
по нему можно оформить «production».txt(например,Run_schedule.txt) рядом сadmin_data.
При необходимости сюда можно добавлять и другие .md/.docx:
- подробные инструкции по настройке Планировщика задач Windows;
- регламенты обновления конфигов IFC;
- внутренние памятки по эксплуатации.
Рекомендуется:
- хранить все официальные инструкции по ExportIFC в папке
_docs,
чтобы README и структура репозитория были согласованы; - из основного
README.mdдавать ссылки наExportIFC_manual.md
и другие ключевые документы в этой папке.
Кратко можно запомнить так:
-
Код и логика работы
живут вcore/,revit/,config/,utils/и файлахmain.py,ExportIFC.py.
Это то, что меняют только разработчики. -
Инфраструктурные настройки конкретной машины
лежат в_settings/:_settings/settings.ini— пути, версии Revit, флаги режимов;_settings/bat/— bat-скрипты запуска и установки зависимостей;_settings/ApiIFCExporter/— DLL IFC Exporter.
-
Рабочие данные проекта (задачи, история, логи)
находятся в папкеadmin_data:- в тестовом режиме — в
admin_dataрядом с репозиторием; - в production-режиме (
is_prod_mode = True) — в папке, заданнойdir_admin_data
(обычно на сетевом или общем диске).
- в тестовом режиме — в
-
Конфиги IFC
живут в папке, указанной параметромdir_export_config
(для примера используется шаблон_examples/IFC_Export_Config_example). -
Документация и примеры:
- основной обзор —
README.mdв корне репозитория; - технический мануал —
_docs/ExportIFC_manual.md; - Файл пример расписания запусков;
- дополнительные материалы по IFC-конфигам и др.;
- иллюстрации для документации — в
_git_images/.
- основной обзор —
Дальше, в Разделе 6, мы подробно разберём содержимое _settings/settings.ini —
какие параметры там есть и как они влияют на всё описанное выше.
_settings/settings.ini — главный конфигурационный файл ExportIFC.
Именно здесь задаются пути, режимы работы, список версий Revit и имена листов Excel.
Редактировать settings.ini лучше текстовым редактором (VS Code, Notepad++).
Общий смысл такой: вы не трогаете код, а настраиваете только этот файл,
IFC-конфиги и Excel-файлы — остальное оркестратор делает сам.
Файл разбит на секции:
[Paths]— пути к папкам.[Files]— базовые имена файлов конфигов.[Settings]— общие флаги и режимы.[Revit]— список версий Revit и имя 3D-вида.[Excel]— имена листов вmanage.xlsxиhistory.xlsx.[Mapping]— имена подпапок внутриdir_export_config.
Ниже разберём каждую секцию по пунктам.
- Формат файла — обычный INI (
ключ = значение+ комментарии). - Редактировать удобно через:
- Visual Studio Code;
- Notepad++;
- любой текстовый редактор без «умного» форматирования.
- Комментарии начинаются с
;или#— их можно смело править, смысл не ломается.
Рекомендуется:
- не удалять существующие комментарии и шаблонные ключи;
- если какой-то параметр пока не нужен — оставить его как есть, а не удалять строку;
- при эксперименте над значением рядом делать короткую пометку в комментарии,
чтобы через полгода было понятно, зачем это сделано.
Секция [Paths] задаёт две базовые директории:
-
dir_export_config
Корень структуры конфигов IFC.Типовые значения:
dir_export_config = D:\BIM\IFC_Configsdir_export_config = \\SERVER\BIM\IFC_Configs
Обычно сюда копируют пример из репозитория:
_examples/IFC_Export_Config_example→D:\BIM\IFC_Configs
Внутри этой папки обычно используется такая структура:
00_Common— общие JSON-конфиги экспорта (имя по умолчанию задаётся ключомdir_commonв секции[Mapping]);01_Export_Layers— файлы маппинга категорий/слоёв (имя по умолчанию задаётся ключомdir_layersв секции[Mapping]);- подпапки с конфигами конкретных проектов — имена этих папок вы выбираете сами (в примере используются папки вида
02_Project_*сExport_Settings.json,Property_Mapping.txtи т.п.).
Именно относительно
dir_export_configстроятся пути к общим файлам маппинга и JSON-конфигам
(значения колонок D и F вmanage.xlsx),
а в колонке C указывается полный путь к папке с конфигами проекта
(см. Разделы 3.5, 3.6 и 7). -
dir_admin_data
Рабочая папкаadmin_data.Типовые значения:
dir_admin_data = D:\BIM\admin_datadir_admin_data = \\SERVER\BIM\admin_data
В этой папке должны быть:
manage.xlsx;history/history.xlsxи служебный.txtс напоминанием;_logs/с текстовыми логами.
Связка с флагом
is_prod_mode(см. 6.4):- при
is_prod_mode = Trueиспользуется именно этот путь; - при
is_prod_mode = Falseзначениеdir_admin_dataигнорируется,
и берётся локальная папкаadmin_dataрядом с репозиторием (см. Раздел 3.6).
Секция [Files] сейчас содержит один ключ:
-
config_json
Базовое имя JSON-файлов настроек экспорта IFC.Пример по умолчанию:
config_json = Export_Settings
Это значит, что в проектных папках (например,
02_Project_*) ожидаются файлы вида:Export_Settings.json— основной JSON-конфиг для выгрузки с маппингом.
В колонке C
manage.xlsxвы указываете путь к папке проекта (02_Project_*),
а имя файла берётся изconfig_json— без лишних ручных повторений.Дополнительные JSON-конфиги (например,
Export_Settings_NotAttributes.json
для варианта без атрибутов) указываются по имени без расширения в колонке Fmanage.xlsx
и не зависят напрямую отconfig_json(см. Разделы 3.6 и 7).
Секция [Settings] управляет базовым поведением оркестратора.
-
is_prod_mode— переключатель режима работы сadmin_data.Логика:
-
False— локальный тестовый режим:- скрипт игнорирует
dir_admin_data; - использует папку
admin_data, лежащую рядом с репозиторием
(...\ExportIFCfromRevit\admin_dataиз шаблона); - удобно для отладки на одной машине или личном ноутбуке.
- скрипт игнорирует
-
True— production-режим:admin_dataберётся по пути изdir_admin_data;- обычно это общая папка на сервере, например
D:\BIM\admin_dataили\\SERVER\BIM\admin_data; - сюда смотрят и оркестратор, и все рабочие станции.
Типичный сценарий:
- Сначала настроить всё в тестовом режиме (
is_prod_mode = False), убедиться, что выгрузка работает стабильно на локальнойadmin_data. - Затем:
- скопировать
admin_dataв «production» место (сетевой/общий диск); - выставить
is_prod_mode = True; - прописать
dir_admin_dataна этот путь; - повторно проверить запуск уже в production-режиме.
- скопировать
-
-
enable_unmapped_export— включать ли дополнительную выгрузку без маппинга свойств.Поведение:
-
False— выполняется только основная выгрузка с маппингом:- для каждой строки в
manage.xlsxиспользуются колонки A–D; - достаточно корректно настроить пути и конфиги для mapped-экспорта;
- колонки E/F можно оставить пустыми.
- для каждой строки в
-
True— оркестратор пытается делать две выгрузки по каждой строке:- основную — с маппингом
(колонки A–D: папка с моделями и настройки mapped-выгрузки —
папка вывода, папка проекта02_Project_*, файл маппинга категорий); - дополнительную — без маппинга («nomap»)
(колонки E и F: отдельная папка вывода и JSON-конфиг для чистого экспорта).
- основную — с маппингом
Важные нюансы:
- если
enable_unmapped_export = True, но для конкретной строки колонки E и/или F заполнены
не полностью (пустая одна из них), строка при разбореmanage.xlsxпропускается целиком:
модель не попадает в список задач на экспорт ни с маппингом, ни без маппинга; - наличие самого маппинга в основной выгрузке определяется конфигами IFC
(JSON +Property_Mapping.txtв проектной папке), а не этим флагом —
enable_unmapped_exportуправляет только появлением второй, nomap-выгрузки.
Практический смысл:
- один IFC можно делать «толстым» — с полным маппингом и набором свойств «для заказчика»;
- второй — облегчённым, без маппинга, «для координации/проверок».
Рекомендуемая схема:
- сначала запускать систему с
enable_unmapped_export = False,
чтобы отладить базовый экспорт по колонкам A–D; - после стабилизации — включить
enable_unmapped_export = True
и аккуратно заполнить колонки E и F (см. Раздел 3.6 и Раздел 8),
если действительно нужна вторая, «чистая» выгрузка.
-
Секция [Revit] определяет, с какими версиями Revit работает оркестратор
и какой 3D-вид используется для выгрузки.
-
revit_versions
Список поддерживаемых версий Revit через запятую.Пример:
revit_versions = 2021,2022,2023,2024
Важно:
- эти версии должны быть реально установлены на машине выгрузки;
- оркестратор для каждого
.rvtлениво определяет версию файла
и отправляет модель в соответствующий Revit; - если версия файла новее всех указанных — модель попадёт в лог
«версия не поддерживается» (см. Раздел 11).
Рекомендуется периодически актуализировать список при обновлении парка Revit
(см. Разделы 4.2 и 4.6). -
export_view3d_name
Имя 3D-вида, из которого выполняется экспорт IFC.Пример по умолчанию:
export_view3d_name = Navisworks
Почему так удобно:
- вид
Navisworksчасто уже используется в связке с Navisworks; - один и тот же 3D-вид можно использовать и для Navisworks, и для IFC — меньше дублирования.
Требования к виду в каждой модели, участвующей в выгрузке (см. Разделы 3.7 и 9):
- это должен быть 3D-вид, не шаблонный (
Template = False); - вид не должен быть локально переименован относительно значения
export_view3d_name; - именно на этом виде настраивается видимость элементов, которые должны / не должны попадать в IFC.
Поведение при ошибках:
- если подходящего вида нет или он шаблонный — модель попадает в отдельный лог
«нет подходящего вида для экспорта» (см. Раздел 11), и экспорт для неё не выполняется.
Кастомные варианты:
- если в компании принято другое имя (например,
IFC_Export_3D), его можно указать вexport_view3d_name; - в этом случае нужно обеспечить, чтобы в каждой модели, которая должна выгружаться, существовал такой 3D-вид с точным совпадением имени.
Секция [Excel] задаёт имена листов, с которыми работает скрипт в Excel-файлах:
-
sheet_path
Имя листа вmanage.xlsxс основной таблицей задач.Значение по умолчанию:
sheet_path = Path
На этом листе:
- каждая заполненная строка задаёт одну задачу экспорта
(папка с моделями, папки выгрузки, конфиги IFC и т.д.); - используются колонки A–F (подробно — Разделы 3.6 и 8).
-
sheet_ignore
Имя листа вmanage.xlsxс ignore-листом.По умолчанию:
sheet_ignore = IgnoreList
Здесь перечисляются абсолютные пути к файлам
.rvt, которые нужно игнорировать,
даже если они попадают в папки из колонки A (см. Разделы 3.6 и 8). -
sheet_history
Имя листа вhistory/history.xlsx, где хранится история выгрузок.По умолчанию:
sheet_history = History
Этот лист полностью ведёт ExportIFC:
- при каждом запуске он перезаписывается;
- хранит дату/время последней проверки/выгрузки по каждому пути
.rvt; - используется оркестратором при решении «нужно ли выгружать заново»
(см. Разделы 2.4, 3.3 и 8).
Имена листов менять можно, но тогда обязательно:
- переименовать сами листы в соответствующих Excel-файлах;
- синхронно обновить значения в
settings.ini.
Секция [Mapping] определяет имена подпапок внутри dir_export_config.
Эти имена используются кодом при поиске файлов маппинга и общих настроек.
-
dir_common— папка с общими настройками экспорта IFC.Пример значения по умолчанию:
dir_common = 00_Common
В этой папке обычно лежат:
- общие JSON-конфиги экспорта, например
Export_Settings_NotAttributes.json; - другие файлы настроек, которые используются несколькими проектами.
-
dir_layers— папка с файлами маппинга категорий Revit → классов IFC.Пример значения по умолчанию:
dir_layers = 01_Export_Layers
Здесь ожидаются файлы вида:
Layer_Mapping.txtи другие варианты маппинга категорий/слоёв.
Связка с manage.xlsx:
-
колонка C — абсолютный путь к папке проекта с IFC-настройками.
Типовой случай — подпапка внутриdir_export_config(в примере используется формат02_Project_*),
но при необходимости конфиги проекта можно держать и в других местах (локальный диск, сетевой путь) —
главное, чтобы этот путь совпадал с фактическим расположением файловExport_Settings.jsonиProperty_Mapping.txt; -
колонка D — имя файла маппинга без расширения
(например,Layer_Mapping);
фактический файл ищется по пути:dir_export_config / dir_layers / <значение_колонки_D>.txt -
колонка F — при включённой выгрузке без маппинга (
enable_unmapped_export = True)
хранит имя JSON-файла без расширения;
файл ищется строго в общей папке настроекdir_common(обычно00_Common) по схеме:dir_export_config / dir_common / <значение_колонки_F>.jsonПо сути это тот же принцип, что и для
Layer_Mappingв колонке D:
имя берётся без расширения, к нему добавляется.json, и файл ищется вdir_common.
При этом конкретные проектные папки подdir_export_configне зашиты вsettings.ini: их имена определяет администратор, а ссылки на них приходят из колонки Cmanage.xlsx. Префикс02_— лишь соглашение из примера, а не обязательное требование.
В текущей версии ExportIFC все ключи _settings/settings.ini укладываются в несколько логичных групп:
-
[Paths]— пути к базовым папкамdir_export_config— корневая папка конфигов IFC
(где лежат00_Common,01_Export_Layers,02_Project_*и т.п.).dir_admin_data— рабочая папкаadmin_data
(либо шаблон из репозитория, либо production-копия на сервере).
-
[Files]— настройки имён файловconfig_json— базовое имя JSON-файлов настроек экспорта IFC.
Итоговые файлы имеют вид<имя>.json, напримерExport_Settings.json.
-
[Settings]— общие флаги поведенияis_prod_mode— режим работы сadmin_data(локальный тест / production).enable_unmapped_export— включать ли дополнительную выгрузку без маппинга.- сюда же могут добавляться другие флаги, связанные с общими сценариями экспорта.
-
[Revit]— параметры, связанные с Revitrevit_versions— список поддерживаемых версий Revit.export_view3d_name— имя 3D-вида для экспорта IFC.
-
[Excel]— структура листов Excelsheet_path— имя листа вmanage.xlsxсо списком задач.sheet_ignore— лист ignore-списка вmanage.xlsx.sheet_history— лист истории экспортов вhistory.xlsx.
-
[Mapping]— структура папок конфигов IFCdir_common— папка с общими JSON-настройками экспорта (00_Common).dir_layers— папка с файлами маппинга категорий/слоёв (01_Export_Layers).
По мере развития проекта могут появляться дополнительные ключи и (при необходимости) новые секции
— например, для более тонкой настройки логирования или расширенной истории. Общий принцип такой:
-
если ключ явно упомянут в этом мануале — его можно менять,
придерживаясь описанных здесь рекомендаций; -
если ключ нигде в документации не фигурирует и виден только в комментариях
внутри самогоsettings.ini, лучше сначала внимательно прочитать комментарий,
понять влияние настройки и при сомнениях оставить значение по умолчанию.Так
settings.iniостаётся понятной «панелью управления» для администраторов
и не превращается в мешанину случайных переключателей «просто потому что так сложилось».
Ниже — условный пример минимальной рабочей конфигурации.
Он повторяет структуру секций типичного _settings/settings.ini,
но значения путей даны как заглушки — их нужно заменить под своё окружение.
[Paths]
; Папка с конфигурацией экспорта IFC
; (обычно копия "IFC_Export_Config_example" из "_examples")
; Примеры:
; \\SERVER\BIM\IFC_Configs
; D:\BIM\IFC_Configs
dir_export_config = <путь до папки с конфигами IFC>
; Папка с файлами управления выгрузкой (admin_data на сервере или локально)
; Примеры:
; \\Server\BIM\ExportIFC\admin_data
; D:\BIM\admin_data
dir_admin_data = <путь до папки admin_data>
[Files]
; Базовое имя JSON-файлов настроек экспорта IFC.
; Итоговые файлы имеют вид <имя>.json, например: Export_Settings.json
config_json = Export_Settings
[Settings]
; Режим работы скрипта:
; True — рабочий режим: папка admin_data берётся по пути из dir_admin_data
; False — тестовый/локальный режим: папка admin_data берётся из локальной папки admin_data
; рядом со скриптами проекта (см. логику в config.paths)
is_prod_mode = False
; Включать ли дополнительную выгрузку IFC без маппинга свойств:
; True — делать две выгрузки (с маппингом и без)
; False — выгружать только вариант с маппингом
enable_unmapped_export = False
[Revit]
; Список поддерживаемых версий Revit (через запятую)
; Должен совпадать с установленными версиями на машине выгрузки
revit_versions = 2021,2022,2023,2024
; Имя 3D-вида, который используется для экспорта IFC
; Название должно совпадать во всех моделях
export_view3d_name = Navisworks
[Excel]
; Имя листа в manage.xlsx с путями и настройками по проектам
sheet_path = Path
; Имя листа в manage.xlsx с игнорируемыми путями
sheet_ignore = IgnoreList
; Имя листа в history.xlsx с историей выгрузок
sheet_history = History
[Mapping]
; Имя папки с общими настройками экспорта IFC внутри dir_export_config
; (где лежит Export_Settings_NotAttributes.json и др.)
dir_common = 00_Common
; Имя папки с файлами маппинга категорий Revit → классов IFC внутри dir_export_config
; (Layer_Mapping.txt и другие варианты маппинга)
dir_layers = 01_Export_Layers
С таким примером конфигурации (если подставить реальные пути):
-
Пути:
- конфиги IFC ищутся в папке
dir_export_config; - рабочая
admin_dataформально задана вdir_admin_data, но в тестовом режиме (is_prod_mode = False) фактически используется локальная папкаadmin_dataрядом с репозиторием.
- конфиги IFC ищутся в папке
-
Режим работы:
- текущие значения подходят для первичной настройки и тестов на одной машине;
- переход в production режим сводится к тому, чтобы:
- скопировать
admin_dataна сервер / общий диск; - прописать реальный путь в
dir_admin_data; - переключить
is_prod_mode = True.
- скопировать
-
Revit и вид:
- оркестратор работает с перечисленными в
revit_versionsверсиями Revit; - в каждой выгружаемой модели должен быть не шаблонный 3D-вид
с именем
export_view3d_name(по умолчаниюNavisworks).
- оркестратор работает с перечисленными в
-
Excel:
- основной лист с задачами —
sheet_path(обычноPath); - ignore-лист —
sheet_ignore(обычноIgnoreList); - история выгрузок —
sheet_history(обычноHistory).
- основной лист с задачами —
-
Экспорт:
- включена только основная выгрузка с маппингом;
- дополнительная «чистая» выгрузка без маппинга выключена
(
enable_unmapped_export = False), колонки E/F вmanage.xlsxможно не заполнять.
Такого набора настроек достаточно, чтобы:
- Запустить ExportIFC в тестовом режиме на одной машине.
- Проверить, что:
- корректно читаются пути и листы в
manage.xlsxиhistory.xlsx; - правильно подбираются версии Revit;
- экспорт по базовому сценарию (с маппингом) проходит без ошибок.
- корректно читаются пути и листы в
- После этого можно:
- вынести
admin_dataна сервер, - перевести
is_prod_modeвTrue, - при необходимости включить вторую выгрузку без маппинга.
- вынести
Ниже — несколько частых ошибок в settings.ini и то, как они выглядят «снаружи».
-
Неверный
dir_export_configили сломанная структура папок IFC-конфигов.- В
dir_export_configуказан путь, которого не существует, или внутри нет папокdir_common/dir_layers(по умолчанию00_Commonи01_Export_Layers), или в проектной папке нетExport_Settings.json. - Как проявляется:
- при старте выводится короткое сообщение об отсутствующем пути/файле (без «простыни» трассировки); подробная трассировка появляется только при
DEBUG = True; - при чтении
manage.xlsxв консоли и общем лог-файле запуска появляются предупреждения вида «не найден JSON-конфиг» или «не найден файл маппинга категорий» для конкретных строк; - соответствующие модели не попадают в
tmp.csvи не выгружаются.
- при старте выводится короткое сообщение об отсутствующем пути/файле (без «простыни» трассировки); подробная трассировка появляется только при
- В
-
Неверный
dir_admin_data.- Путь указывает на папку, в которой нет
manage.xlsxи/или папкиhistoryсhistory.xlsx. - Как проявляется:
- при запуске ExportIFC сразу в консоли и общем логе появляется короткое CRITICAL-сообщение о том, что не найден
manage.xlsxилиhistory.xlsx; развёрнутая трассировка выводится только в режимеDEBUG; - программа не доходит до этапа формирования задач и запуска Revit;
- папка
_logsдля этогоdir_admin_dataможет так и не появиться или остаться пустой за текущий запуск (новых лог-файлов с датой запуска не будет).
- при запуске ExportIFC сразу в консоли и общем логе появляется короткое CRITICAL-сообщение о том, что не найден
- Путь указывает на папку, в которой нет
-
Несогласованность
revit_versionsс реальными версиями файлов.rvt.- В
revit_versionsне добавлена новая версия Revit, а на диск уже прилетели модели более новой версии. - Как проявляется:
- модели этой версии оказываются в файле
_logs/4_not_supported_versions_YYYY.MM.DD.txt; - по ним не формируются задачи экспорта;
- остальные модели (поддерживаемых версий) продолжают выгружаться нормально.
- модели этой версии оказываются в файле
В такой ситуации нужно либо добавить новую версию в
revit_versionsи настроить Revit/pyRevit под неё, либо договориться, что модели этой версии пока не поддерживаются автоматизацией. - В
Этот раздел отвечает на вопрос «из каких файлов вообще состоит настройка IFC и где они лежат».
Физически общие конфиги IFC (общие настройки экспорта и маппинги категорий) лежат в папке, указанной в параметре dir_export_config в _settings/settings.ini.
Конфиги конкретных проектов берутся по абсолютным путям из manage.xlsx: в типовом сценарии их тоже размещают рядом с общими папками, но при необходимости они могут находиться и в других каталогах.
Логически они делятся на:
- общие настройки экспорта (папка
00_Common); - общие файлы маппинга категорий Revit → классов IFC (папка
01_Export_Layers); - папки конкретных проектов с IFC-настройками и маппингом свойств
(их реальные пути задаются в колонке Cmanage.xlsx; в типовой конфигурации эти папки тоже лежат рядом с00_Commonи01_Export_Layers, а имена вроде02_Project_*используются только как соглашение для сортировки и не являются обязательными).
Подробная техническая шпаргалка по структуре конфигов вынесена в отдельный документ
Описание структуры конфигов IFC.
Здесь — концентрат, завязанный на работу ExportIFC и manage.xlsx.
В _settings/settings.ini:
dir_export_config— путь к корню конфигурации IFC.
По умолчанию обычно используется структура, похожая на пример:
<dir_export_config>/
00_Common/
Export_Settings_NotAttributes.json
... (другие общие JSON-конфиги)
01_Export_Layers/
Layer_Mapping.txt
... (другие файлы маппинга категорий)
02_Project_example/
Export_Settings.json
Property_Mapping.txt
... (доп. файлы проекта, если нужны)
03_<Ваш_проект_1>/
Export_Settings.json
Property_Mapping.txt
04_<Ваш_проект_2>/
...
Кратко:
- папки
00_Commonи01_Export_Layersсчитаются общими для всех проектов; - папки проектов под
dir_export_config(в примере —02_Project_*,03_*и т.п.) — это отдельные проекты со своей парой настроек:Export_Settings.json— базовый набор настроек выгрузки IFC;Property_Mapping.txt— маппинг параметров Revit в IFC Property Sets.
Сами имена общих папок задаются в секции [Mapping] файла _settings/settings.ini
(dir_common, dir_layers) и могут быть переименованы, но логика «общие → слои → проекты» должна сохраняться.
Имена проектных папок в этом примере не зашиты в код: вы задаёте их сами и дальше используете в колонке C manage.xlsx как полный путь к папке с конфигами для конкретного набора моделей (см. п. 7.4). Такая папка может лежать как под dir_export_config, так и в любом другом месте — главное, чтобы в Excel был указан фактический абсолютный путь.
Назначение папки:
- хранит общие JSON-файлы конфигурации IFC, которые могут использоваться несколькими проектами;
- сюда логично складывать:
- базовые шаблоны конфигураций;
- облегчённые варианты экспорта (например, без дополнительных свойств).
В примере из _examples/IFC_Export_Config_example/00_Common есть файл:
Export_Settings_NotAttributes.json— конфигурация для выгрузки без атрибутов
(упрощённый IFC, часто используется как «nomap»-вариант для координации).
Обычно его получают прямо из Revit: в диалоге Экспорт IFC → «Редактировать набор» выбирают нужные параметры, нажимают «Сохранить выбранный набор параметров»
и сохраняют получившийся профиль вExport_Settings_NotAttributes.json(как «дефолтный» набор настроек, принятый в организации).
Связь с настройками:
- имя папки задаётся параметром
dir_commonв секции[Mapping]:- по умолчанию:
dir_common = 00_Common.
- по умолчанию:
Связь с manage.xlsx:
Когда включён флаг enable_unmapped_export = True (см. Раздел 6.4), колонка F листа Path в manage.xlsx хранит имя JSON-файла без расширения для дополнительной «чистой» выгрузки, например:
Export_Settings_NotAttributes
ExportIFC ищет такой файл строго по пути:
<dir_export_config>/<dir_common>/<значение_колонки_F>.json
то есть для значения Export_Settings_NotAttributes это будет:
<dir_export_config>/00_Common/Export_Settings_NotAttributes.json
Важно:
Состав JSON-файлов и любых других в 00_Common никак не ограничен самим ExportIFC: здесь можно хранить любые общие профили экспорта.
Главное — чтобы на реально используемые файлы были корректные имена в manage.xlsx (через колонку F при nomap-выгрузке), а в проектных JSON-конфигурациях при необходимости можно ссылаться на какой-то общий Property_Mapping_main.txt, который используется сразу в нескольких проектах.
ExportIFC не анализирует содержимое JSON — он только:
- проверяет, что файл существует;
- передаёт путь в IFC Exporter (через
Autodesk.IFC.Export.UI.dll).
Семантика полей внутри JSON полностью соответствует настройкам штатного IFC Exporter;
структура разобрана в документе
Описание структуры конфигов IFC.
Назначение:
Содержит общие файлы маппинга категорий / типоразмеров / семейств Revit → классов IFC
(и при необходимости в слои, типы и т.п.).
В примере из _examples/IFC_Export_Config_example/01_Export_Layers:
Layer_Mapping.txt— типовой файл маппинга.
Формат файла:
- обычный текстовый файл, который понимает стандартный IFC Exporter;
- конкретные столбцы и формат зависят от версии экспортёра и настроек Revit.
Связь с настройками:
- имя папки задаётся параметром
dir_layersв[Mapping]:- по умолчанию:
dir_layers = 01_Export_Layers.
- по умолчанию:
Связь с manage.xlsx:
-
колонка D листа
Pathхранит имя файла маппинга категорий без расширения, например:Layer_Mapping
ExportIFC ищет соответствующий файл по схеме:
<dir_export_config>/<dir_layers>/<значение_колонки_D>.txt
то есть для Layer_Mapping:
<dir_export_config>/01_Export_Layers/Layer_Mapping.txt
Особенности:
- один и тот же
Layer_Mapping.txtможет использоваться несколькими проектами; - если для нового проекта нужен свой маппинг категорий, можно:
- скопировать
Layer_Mapping.txtпод другим именем в01_Export_Layers; - настроить его;
- в колонке D нужных строк
manage.xlsxуказать новое имя (без.txt).
- скопировать
Подробности см. в документации IFC Exporter и в Описание структуры конфигов IFC.
Обычно каждая отдельная папка с IFC-настройками описывает один проект.
В примере проектные папки лежат внутри dir_export_config и называются по шаблону 02_Project_*, но это лишь соглашение. В колонке C manage.xlsx указывается полный путь к папке с конфигами проекта; она может находиться как под dir_export_config, так и в любом другом месте — главное, чтобы этот путь был корректным и совпадал с фактическим расположением файлов.
Типичная структура проектной папки:
<dir_export_config>/<Имя_папки_проекта>/
Export_Settings.json
Property_Mapping.txt
... (дополнительные файлы при необходимости)
Роль основных файлов:
-
Export_Settings.json— базовый JSON-конфиг для выгрузки IFC с маппингом:- задаёт режимы экспорта (версия IFC, тип файла, уровни детализации, состав данных и т.п.);
- определяет включение Quantities, пространственной структуры, аналитики и т.д.;
- используется при основной выгрузке (колонки A–D
manage.xlsx).
-
Property_Mapping.txt— файл маппинга свойств:- описывает, какие параметры Revit должны попасть в какие Property Sets / свойства IFC;
- формат ориентирован на штатный механизм Property Mapping IFC Exporter;
- сам ExportIFC содержимое этого файла не анализирует — его обрабатывает IFC Exporter.
Связь с настройками:
-
имя JSON-файла берётся из параметра
config_jsonв секции[Files]:- по умолчанию:
config_json = Export_Settings;
- по умолчанию:
-
фактический путь к проектному JSON для конкретной строки строится как:
<значение_колонки_C>/<config_json>.json
например:
D:\BIM\IFC_Configs\02_Project_example\Export_Settings.json
-
путь к
Property_Mapping.txtфиксируется внутриExport_Settings.json; безопаснее всего настраивать эту связку через интерфейс Revit
(диалог «Экспорт IFC → Редактировать набор», выбор файла маппинга и последующее сохранение набора параметров).
ExportIFC просто передаётExport_Settings.jsonв IFC Exporter, а дальше путь кProperty_Mapping.txtи его содержимое обрабатываются уже самим экспортёром.
Связь с manage.xlsx:
- колонка C листа
Pathхранит абсолютный путь к папке с IFC-конфигом проекта, например:C:\IFC_Export_Config\02_Project1\D:\BIM\IFC_Configs\Retail_2025\\\SERVER\BIM\IFC_Configs\03_ЖК_Север_Корпус1\
Эти папки могут лежать в любом месте (локальный диск, сетевой путь) и не обязаны находиться внутри каталога, заданного как dir_export_config: этот параметр нужен только для поиска общих папок 00_Common и 01_Export_Layers.
Разные строки manage.xlsx могут ссылаться на один и тот же абсолютный путь в колонке C,
если им по смыслу подходит один и тот же набор настроек IFC.
Если проектам нужны разные настройки экспорта IFC, им создают разные папки с отдельными
наборами Export_Settings.json и Property_Mapping.txt (часто — просто разные подпапки
в общей структуре конфигов).
Возьмём одну строку на листе Path в manage.xlsx:
- A — папка с файлами Revit (
.rvt); - B — папка для выгрузки IFC с маппингом;
- C — папка с проектным JSON-конфигом
<config_json>.jsonдля этого набора моделей; - D — имя файла маппинга категорий Revit → классов IFC без
.txt
(файл ищется в<dir_export_config>/<dir_layers>/...); - E — (опционально) папка для выгрузки IFC без маппинга;
- F — (опционально) имя JSON-конфига для выгрузки без маппинга без
.json
(файл ищется в<dir_export_config>/<dir_common>/...).
Подробный разбор колонок Path (manage.xlsx) и типовых сценариев их заполнения — в Разделе 8. Здесь нам важно только понимать, какие значения потом превращаются в пути к JSON-файлам и файлам маппинга.
Дальше оркестратор делает примерно следующее:
-
По колонке A формирует список моделей
.rvtдля обработки.Берутся только файлы с ровно одним расширением
.rvt: любые копии с хвостами (.ifc.0001.RVT,.backup.rvtи т.п.) или вовсе без нужного расширения игнорируются и в список задач не попадут. -
Берёт проектную папку конфигов как есть, без добавления
dir_export_config:PROJECT_DIR = <значение_колонки_C> -
Строит путь к основному JSON-конфигу для выгрузки с маппингом:
MAPPED_JSON = PROJECT_DIR / (<config_json> + ".json") -
Строит путь к файлу маппинга категорий:
FAMILY_MAPPING = <dir_export_config>/<dir_layers>/<значение_колонки_D>.txt -
Если
enable_unmapped_export = Trueи заполнены E и F:NOMAP_JSON = <dir_export_config>/<dir_common>/<значение_колонки_F>.jsonи берёт дополнительную папку вывода из колонки E.
Все эти пути попадают во временный CSV (tmp.csv), который читает pyRevit-скрипт ExportIFC.py.
Дальше внутри Revit:
- по JSON-файлам (
MAPPED_JSONи, при необходимости,NOMAP_JSON) настраиваетсяIFCExportOptions; - по файлу маппинга категорий (
Layer_Mapping.txtи др.) и поProperty_Mapping.txt, на который ссылаетсяExport_Settings.json, IFC Exporter понимает, во что превращать категории и параметры.
Ключевые моменты:
-
ExportIFC не зашивает жёстко имена проектов и не строит путь до
Property_Mapping.txt.
Он опирается на:dir_export_config,dir_common,dir_layersиз_settings/settings.ini(общие конфиги и маппинг категорий);- значения колонок A–F в
manage.xlsx(папки моделей, пути вывода, путь к проектной папке, имена файлов маппинга); - содержимое
Export_Settings.json, где уже зафиксирован путь кProperty_Mapping.txtи остальные параметры IFC Exporter.
-
Абсолютные пути в колонках A, B, C, E позволяют хранить модели, IFC и конфиги в любом удобном месте (локальные диски или сетевые ресурсы) без жёсткой привязки проектных папок к
dir_export_config. При этом общие папки00_Commonи01_Export_Layersпо-прежнему ищутся относительноdir_export_config.
Чтобы добавить новый проект, типичный порядок такой:
-
Скопировать шаблон проектной папки.
Из
_examples/IFC_Export_Config_example/02_Project_example
скопировать папку в рабочий каталог конфигов (на сервере или локальном диске), например:D:\BIM\IFC_Configs\02_Project_MyAwesomeTower\ Export_Settings.json Property_Mapping.txtПроектные папки удобно держать под
dir_export_config, но это не обязательно.
Главное — чтобы итоговый путь до папки потом один в один попал в колонку Cmanage.xlsx. -
Настроить
Export_Settings.json.Рекомендуемый вариант:
- открыть модель проекта в Revit;
- в диалоге экспорта IFC настроить параметры (версию IFC, тип файла, состав данных и т.п.);
- через «Редактировать набор → Сохранить выбранный набор параметров»
сохранить профиль прямо вExport_Settings.jsonвнутри папки проекта
(можно сначала выгрузить под временным именем и затем переименовать файлы).
При хорошем понимании структуры IFC-конфига допускается аккуратная правка
Export_Settings.jsonв текстовом редакторе. При сомнениях — лучше править только через интерфейс Revit.
При необходимости можно свериться с требованиями заказчика / BEP и документом
Описание структуры конфигов IFC. -
При необходимости поправить
Property_Mapping.txt.- задать, какие параметры Revit должны попадать в какие Property Sets IFC;
- согласовать формат с требованиями проекта;
- убедиться, что путь к этому файлу зафиксирован внутри
Export_Settings.json(проще всего — снова через диалог экспорта IFC и сохранение набора параметров).
-
(Опционально) Подготовить отдельный JSON в
00_Commonдля чистой выгрузки.- скопировать, например,
<dir_export_config>/00_Common/Export_Settings_NotAttributes.json; - при необходимости отредактировать и сохранить под новым именем;
- это имя затем использовать в колонке F (без
.json) для nomap-выгрузки.
- скопировать, например,
-
Добавить строку в
manage.xlsx.- A — папка, откуда брать
.rvt; - B — папка вывода IFC с маппингом;
- C — полный путь к папке проекта с конфигами
(той самой, где лежит<config_json>.json, обычноExport_Settings.json); - D — имя файла маппинга категорий (например,
Layer_Mapping, без.txt); - E/F — при необходимости вторая выгрузка без маппинга
(папка вывода и имя JSON из00_Commonбез.json, обычноExport_Settings_NotAttributes).
- A — папка, откуда брать
-
Запустить ExportIFC (сначала можно в dry-run, см. Раздел 3.8).
- проверить логи: все ли пути корректные, все ли файлы найдены;
- убедиться, что полученные IFC соответствуют ожиданиям проекта.
-
ExportIFC не «понимает» семантику конфигов IFC — он только проверяет, что файлы есть,
и передаёт их IFC Exporter. Вся бизнес-логика маппинга категорий и свойств живёт
внутри Autodesk IFC Exporter. -
Структура папок и имена файлов управляются через
settings.iniиmanage.xlsx.
Если что-то переименовываете, нужно синхронно поправить:- настройки
[Mapping]/[Files]в_settings/settings.ini(как минимумdir_export_config,dir_common,dir_layers,config_json); - значения в колонках A–F в
manage.xlsx(полные пути в A/B/C/E и имена файлов в D/F); - сами папки и файлы так, чтобы они реально совпадали с указанными путями.
- настройки
-
Префиксы
00_,01_,02_— это всего лишь соглашение для сортировки,
а не жёсткое требование. Код опирается только на:- имена общих папок из
settings.ini(dir_common,dir_layers), относительноdir_export_config; - полный путь из колонки C
manage.xlsx, а не на формат имени проектной папки.
Если нет уверенности, как именно связаны
settings.ini,manage.xlsxи реальные пути на диске, лучше не переименовывать общие папки иconfig_jsonбез крайней необходимости. - имена общих папок из
-
Примеры в
_examples/IFC_Export_Config_example— не «магические», а просто шаблон.
Для реальных проектов рекомендуется:- не править папку
_examples; - а копировать её содержимое в рабочий каталог конфигов (часто — под
dir_export_config) и там адаптировать под конкретный проект.
- не править папку
Дальше, в Разделе 8, мы разберём admin_data/manage.xlsx и history.xlsx уже с точки зрения того,
как именно строки в Excel превращаются в задачи экспорта и историю выгрузок.
Этот раздел отвечает на вопросы:
- где лежат управляющие Excel-файлы;
- как по ним решается, какие модели выгружать;
- как работает история и что будет, если её править вручную;
- какие текстовые логи создаются при проблемах.
В _settings/settings.ini в секции [Paths] задаётся параметр:
dir_admin_data— путь к рабочей папке с админскими данными ExportIFC.
Типовое содержимое dir_admin_data:
admin_data/
manage.xlsx
history/
history.xlsx
_logs/
... текстовые логи по проблемным моделям ...
Смысл элементов:
manage.xlsx— план работ: какие папки с моделями обрабатывать, куда класть IFC и какие конфиги использовать;history/history.xlsx— журнал модификаций: фиксирует путь до конкретного файла.rvtи время его изменения на момент прошлого прогона;_logs/— диагностика и отладка: текстовые файлы с проблемами, выявленными на этапе подготовки задач и при экспорте внутри Revit; если папка_logsотсутствует, она будет автоматически создана при первом запуске оркестратора (через служебную функциюensure_dir), вручную создавать её не требуется.
history.xlsx не хранит флагов успеха/провала и ничего не знает об IFC-файлах — это просто кеш дат модификации .rvt. Решение «нужно ли выгружать модель ещё раз» принимается по связке:
- фактическое состояние файлов
.rvtи IFC на диске; - записи в
history.xlsx.
Раздел 8 описывает управляющие Excel-файлы (manage.xlsx, лист IgnoreList, history.xlsx), их связь между собой, а также общие принципы формирования текстовых логов в _logs.
Подробная расшифровка содержимого логов _logs — в Разделе 11.
manage.xlsx — главный реестр задач экспорта. Имя файла зашито в коде (через константы), поэтому в обычной эксплуатации его лучше не менять, чтобы не ломать автоматическую загрузку.
При запуске CPython-часть:
- открывает
manage.xlsx; - читает лист
Pathи строит внутренние объекты для папок и моделей; - читает лист
IgnoreListи формирует список моделей, которые нужно исключить
(то есть именно поmanage.xlsxрешается, какие модели вообще попадут в конвейер экспорта).
Для каждой найденной модели Revit далее известны:
- полный путь к
.rvt; - папка вывода IFC с маппингом;
- при необходимости папка вывода IFC без маппинга;
- путь к проектной папке настроек IFC — абсолютный путь к каталогу, где лежит основной JSON-конфиг (
<config_json>.json, обычноExport_Settings.json) и связанные файлы (Property_Mapping.txtи др.; см. Раздел 7.4); - имя файла маппинга категорий (
Layer_Mappingи т.п.); - имя JSON-конфига для nomap-экспорта (если используется);
- версия Revit и время модификации файла.
Дальнейшие компоненты (история, проверка IFC, итоговое решение об экспорте) работают уже на уровне этих моделей. В этом разделе важно понимать, что именно и в каком виде оператор должен заполнить в manage.xlsx.
Основная рабочая вкладка manage.xlsx — лист Path (имя задаётся в [Excel] sheet_path).
Шапка листа:
- A — «Папка с файлами RVT»
- B — «Папка для выгрузки IFC (с маппингом)»
- C — «Папка настроек IFC-маппинга»
- D — «Файл маппинга категорий Revit→классов IFC»
- E — «Папка для выгрузки IFC (без маппинга)»
- F — «Файл настроек экспорта (без маппинга)»
Каждая непустая строка этого листа задаёт один набор настроек для папки с моделями:
Абсолютный путь к каталогу, в котором лежат файлы .rvt, участвующие в выгрузке.
- Для каждой строки ExportIFC собирает список всех файлов
.rvtв указанной папке (по текущей реализации без рекурсии по подпапкам). - Для каждого найденного файла формируется отдельная модель, к которой применяются параметры B–F.
Абсолютный путь к папке, куда будут записываться IFC-файлы, выгруженные с маппингом (основной сценарий).
Примеры:
C:\Projects\IFC_Out\Project1_Mapped\\\Server\IFC\Project2\Mapped\
Абсолютный путь к папке с IFC-настройками проекта. Обычно такие папки лежат внутри корня dir_export_config и называются по шаблону 02_Project_*, но это только соглашение для удобства: в колонке C можно указать любой абсолютный путь (локальный диск или сетевой ресурс) — главное, чтобы он совпадал с фактическим расположением файлов настроек.
В этой папке должны находиться:
- основной JSON-конфиг экспорта
<config_json>.json(по умолчаниюExport_Settings.json); Property_Mapping.txt(опционально, ссылка на этот файл фиксируется вExport_Settings.json) и, при необходимости, другие файлы проекта.
Примеры:
C:\IFC_Export_Config\02_Project1\D:\BIM\IFC_Configs\Retail_2025\\\Server\BIM\IFC_Configs\03_ЖК_Север_Корпус1\
Важно: если по указанному пути нет основного JSON (<config_json>.json), оркестратор завершится с фатальной ошибкой (FileNotFoundError) ещё на этапе разбора строки manage.xlsx — запуск не продолжится, пока файл не появится на месте.
Имя файла без расширения из общей папки маппинга, задаваемой через dir_layers (обычно 01_Export_Layers).
Пример значения: Layer_Mapping.
Фактический путь:
<dir_export_config>/<dir_layers>/<значение_колонки_D>.txt
Например, при:
dir_export_config = \\SERVER\IFC_Export_Configdir_layers = 01_Export_Layers- D =
Layer_Mapping
полный путь будет:
\\SERVER\IFC_Export_Config\01_Export_Layers\Layer_Mapping.txt
Абсолютный путь к каталогу, куда будут записываться IFC-файлы без маппинга (nomap-экспорт). Используется только если в секции [Settings] файла _settings/settings.ini включён флаг enable_unmapped_export = True.
Если enable_unmapped_export выключен, колонку можно оставить пустой. Если включён enable_unmapped_export, но заполнена только одна из колонок E или F, строка считается некорректной и будет пропущена целиком — модель не попадёт ни в основную выгрузку с маппингом, ни в дополнительную выгрузку без маппинга.
Имя JSON-файла без расширения из общей папки dir_common (обычно 00_Common).
Пример значения: Export_Settings_NotAttributes.
Фактический путь:
<dir_export_config>/<dir_common>/<значение_колонки_F>.json
Этот JSON используется как настройки IFC-экспорта для nomap-выгрузки. Если колонка F пустая (или enable_unmapped_export выключен), nomap-экспорт для данной строки не выполняется. Если включён enable_unmapped_export, но заполнена только одна из колонок E или F, строка считается некорректной и будет пропущена целиком — модель не попадёт ни в основную выгрузку с маппингом, ни в дополнительную выгрузку без маппинга.
В таком случае обе колонки E и F должны быть заполнены, чтобы экспортировать модель без маппинга.
Кратко по листу Path:
- A/B/C/E — абсолютные пути к папкам на дисках/сервере;
- D/F — базовые имена файлов без расширений, которые дополняются путями из
settings.ini(dir_export_config,dir_layers,dir_common).
Подробный разбор формул построения путей есть в Разделе 6 (настройки settings.ini)
и в п. 7.5 (цепочка dir_export_config → папки IFC-конфигов → JSON/маппинг категорий).
Если меняется структура папок 00_Common / 01_Export_Layers / 02_Project_*, нужно синхронно поправить и настройки (dir_export_config, dir_common, dir_layers), и значения C, D, F.
В manage.xlsx есть лист IgnoreList (имя задаётся в [Excel] sheet_ignore).
Шапка:
- A — «Игнорируемые файлы (абсолютный путь)»
Каждая непустая строка — полный путь к конкретному файлу .rvt, который нужно исключить из обработки.
Алгоритм:
-
ExportIFC собирает все модели
.rvtиз папок, перечисленных на листеPath. -
Для каждого пути проверяется, есть ли он в
IgnoreList. -
Если путь найден в
IgnoreList, эта модель:- не попадает в
tmp.csv; - не учитывается при обновлении
history.xlsx; - не участвует в экспорте.
- не попадает в
Назначение:
- выключать конкретные модели, не ломая общие настройки на листе
Path.
Рекомендации:
- указывать путь так же, как его показывает проводник (буква диска или UNC, без лишних пробелов);
- для временного отключения проблемного файла удобнее добавить его в
IgnoreList, чем менять папки и конфиги вPath.
В подпапке history лежит файл history.xlsx. Рабочий лист с данными называется History (имя задаётся в [Excel] sheet_history).
Шапка листа:
- A — «Файл RVT (полный путь)»
- B — «Дата модификации файла»
Назначение:
- хранить слепок состояния моделей на момент прошлого прогона:
- по какому полному пути находится файл
.rvt; - какая дата модификации у него была зафиксирована (с точностью до минут).
- по какому полному пути находится файл
Использование:
- При старте ExportIFC история читается целиком и превращается во внутренний словарь:
{ полный_путь_RVT → дата_модификации_на_момент_прошлого_прогона }
(дата хранится с точностью до минут). - Для каждой текущей модели:
- если записи по пути нет — модель считается новой;
- если записанная дата меньше фактической даты изменения файла на диске — модель изменилась и требует выгрузки;
- если даты совпадают — с точки зрения истории модель не менялась.
- Как только модель попадает в список задач на экспорт, в памяти сразу обновляется её запись в истории: фиксируется текущая дата модификации файла.
- В конце прогона ExportIFC формирует новый набор записей и перезаписывает
history.xlsxцеликом.
Дополнительно:
даже если экспорт внутри Revit завершился с ошибкой, при следующем запуске решение о необходимости выгрузки всё равно принимается по связке «история плюс реальные IFC-файлы на диске». Если соответствующего IFC нет или он устарел, модель снова попадёт в экспорт, независимо от того, какая дата у неё сейчас записана в history.xlsx.
История принципиально не хранит:
- информацию об успешности экспорта;
- сведения о самих IFC-файлах.
Она отвечает только на вопрос, менялся ли файл .rvt между запусками.
Важно:
- если
history.xlsxоткрыт в Excel с блокировкой записи, обновление может не выполниться — история останется старой, а в логах появятся ошибки; - при ручном редактировании безопаснее удалять строки целиком, чем менять отдельные значения без понимания последствий.
Общий процесс:
-
Чтение
manage.xlsx.
Из листаPathсобираются строки с путями (A–F). Для каждой папки из A собирается список файлов.rvt, и для каждой модели формируется набор параметров вывода по колонкам B–F. -
Применение
IgnoreList.
Из полученного списка моделей вычитаются все пути, перечисленные в листеIgnoreList. -
Загрузка
history.xlsx.
История превращается в словарь «путь → последняя зафиксированная дата модификации». -
Проверка актуальности моделей.
Для каждой модели:- сравнивается фактическая дата модификации файла с датой из
history.xlsx; - параллельно проверяется наличие и давность соответствующих IFC-файлов в папках вывода:
- с маппингом — в папке из колонки B;
- без маппинга — в папке из колонки E (если используется).
- сравнивается фактическая дата модификации файла с датой из
-
Формирование решения о необходимости экспорта.
Для модели вычисляются флаги:- актуальна ли запись в истории (по сравнению дат);
- есть ли на диске актуальный IFC с маппингом;
- есть ли на диске актуальный IFC без маппинга (если такой экспорт вообще включён).
Если хотя бы по одному направлению связка «
history.xlsxплюс фактический IFC» выглядит неактуальной (нет файла, дата IFC старше, чем у.rvt, и т.п.), модель включается в список задач. Одна только история сама по себе никогда не гарантирует пропуска — всегда учитывается реальное состояние IFC на диске.Если хотя бы один флаг указывает на необходимость обновления, модель включается в список задач
(даже если остальная часть связки «история + IFC» выглядит актуальной). -
Формирование
tmp.csvдля pyRevit.
В CSV-файл вdir_admin_dataзаписываются только те модели, для которых нужен экспорт (mapped, nomap или оба варианта). Затем этот CSV читает pyRevit-скриптExportIFC.pyи выполняет экспорт внутри Revit.
Итог:
manage.xlsxзадаёт, что и куда вообще можно выгружать;IgnoreListвыкидывает из этого множества конкретные модели;history.xlsxи реальные IFC-файлы определяют, что нужно пересобрать именно сейчас.
Иногда нужно запустить экспорт заново, даже если для модели история и IFC выглядят актуальными (например, после правки маппинга или изменения требований заказчика).
Основные способы:
Самый безопасный вариант.
- Найти в листе
Historyстроки с нужными моделями (по полному пути). - Удалить эти строки.
- При следующем запуске ExportIFC не найдёт историю по этим моделям и воспримет их как новые.
Более точечный вариант.
- оставить строку в
History, но вручную поставить в колонке «Дата модификации файла» значение явно меньше фактической даты изменения соответствующего файла.rvt.
При следующем сравнении модель будет считаться более новой, чем её запись в истории, и попадёт в экспорт повторно.
Если удалить или переименовать соответствующие IFC-файлы в папках B и E:
- проверка актуальности IFC не найдёт корректный файл;
- модель попадёт в экспорт по соответствующему направлению (mapped или nomap).
Этот способ удобен для локального пересчёта отдельных IFC, но требует аккуратности: при отсутствии бэкапа старые файлы будут потеряны.
В общем случае:
- для массового пересчёта удобнее работать через
history.xlsx; - для экспериментов с отдельными моделями можно временно убирать или переименовывать IFC-файлы.
Внутри dir_admin_data создаётся папка _logs. В неё ExportIFC пишет текстовые логи, которые помогают понять, что пошло не так при подготовке задач на стороне CPython и при экспорте внутри Revit. Папка создаётся автоматически через ensure_dir при запуске оркестратора, поэтому вручную её создавать не требуется; если _logs была удалена, она появится заново на следующем запуске.
Базовые имена лог-файлов задаются в config/constants.py:
1_errors_when_opening_models— ошибки при открытии моделей в Revit;2_not_view_<ИмяВида>_in_models— модели, в которых не найден требуемый 3D-вид;<ИмяВида>— текущее значение параметраexport_view3d_nameв_settings/settings.ini(например, приexport_view3d_name = Navisworksфактическое имя файла будет2_not_view_Navisworks_in_models_YYYY.MM.DD.txt);3_not_found_versions— случаи, когда не удалось определить версию Revit файла;4_not_supported_versions— модели с версией Revit выше поддерживаемой диапазона (список поддерживаемых версий задаётся параметромrevit_versionsв_settings/settings.ini);5_export_errors— ошибки на этапе экспорта IFC;6_mtime_issues— проблемы с чтением дат модификации файлов моделей при разбореmanage.xlsx.
Фактические файлы имеют вид:
_logs/
1_errors_when_opening_models_YYYY.MM.DD.txt
2_not_view_<ИмяВида>_in_models_YYYY.MM.DD.txt
3_not_found_versions_YYYY.MM.DD.txt
4_not_supported_versions_YYYY.MM.DD.txt
5_export_errors_YYYY.MM.DD.txt
6_mtime_issues_YYYY.MM.DD.txt
Здесь YYYY.MM.DD — дата запуска программы в формате «год.месяц.день» (например, 2025.12.04).
Логи 1, 2 и 5 формируются внутри Revit (pyRevit-частью) во время экспорта. В конце каждого прогона в них дописывается строка-разделитель, чтобы можно было глазом отделить блоки разных запусков в пределах одного дня; разделитель ставится только если соответствующий лог менялся в текущем запуске, так что пустые файлы не плодятся лишними строками. Логи 3, 4 и 6 формируются на стороне CPython ещё до запуска Revit: это проблемы определения версии файлов и чтения дат модификации.
Содержимое логов — строки вида:
полный_путь_к_RVT — краткое описание проблемы
Дополнительно:
Рядом с логами в dir_admin_data используется временный CSV-файл <TMP_NAME>.csv (обычно tmp.csv; имя задаётся через константу TMP_NAME). Для каждой версии Revit по очереди формируется и записывается свой набор задач в tmp.csv: после обработки очередной версии файл удаляется (если запуск pyRevit завершился успешно, код возврата 0) либо остаётся как отладочный артефакт (если pyRevit не стартовал, завершился с ошибкой или запуск шёл в режиме dry-run). По содержимому оставшегося tmp.csv удобно смотреть, какие задачи планировались к выгрузке для последней обработанной версии Revit.
Практическое использование логов (в связке с Excel):
- если модель не попала в экспорт или экспорт завершился с ошибкой, сначала имеет смысл проверить настройки в
manage.xlsxи историю вhistory.xlsx; - затем открыть соответствующие файлы в
_logs, чтобы понять, на каком этапе возникла проблема (детальные сценарии — в Разделе 11).
В следующем, 9-м разделе описываются требования к самим моделям Revit: какие виды и настройки нужны, какие версии поддерживаются и какие особенности моделей могут блокировать автоматический экспорт даже при корректно заполненном admin_data и конфигурации IFC.
ExportIFC не накладывает жёсткого «BEP-стандарта» на модели, но для стабильной автоматической выгрузки должны выполняться базовые условия: файл должен открываться без блокирующих диалогов, в нём должен быть корректный 3D-вид для экспорта, а структура параметров — согласована с IFC-конфигами.
Этот раздел — чек-лист по самим моделям: что важно проверить до того, как вы начнёте гонять ExportIFC по расписанию.
Минимальные требования:
- Поддерживаются только файлы формата
*.rvt.
Шаблоны (*.rte), семейства (*.rfa) и прочие файлы скриптом не обрабатываются. - Версия файла должна попадать в диапазон версий из
revit_versionsв_settings/settings.ini(см. Раздел 4.2 и 6.5):- версию файла
.rvtExportIFC определяет по содержимому файла, а не по имени; - если версия файла новее максимальной версии из
revit_versions, модель попадает в лог
admin_data/_logs/4_not_supported_versions_YYYY.MM.DD.txtи в экспорт не идёт; - если версия файла ниже минимальной версии из
revit_versions, модель всё ещё может быть обработана: для целей экспорта такая модель будет отнесена к минимальной поддерживаемой версии (например, файл Revit 2020 при диапазоне 2021–2023 уйдёт в задачу Revit 2021); - если версию файла определить не удалось — модель попадает в
admin_data/_logs/3_not_found_versions_YYYY.MM.DD.txtи в экспорт не идёт.
- версию файла
Рекомендации по именам и путям:
- Используйте осмысленные имена файлов и не городите лабиринт из вложенных подпапок без необходимости:
- это не критическое требование для ExportIFC, но сильно облегчает диагностику;
- чем проще путь, тем легче читать логи и сверять
manage.xlsx.
- Не злоупотребляйте точками и «хвостами» в стиле
Титул_AR.ifc.0001.RVTилиModel.KR.KM.rvt:- Revit при запуске из папки с моделями и/или подгружёнными IFC автоматически создаёт рядом служебные копии вида
Титул_AR.0001.RVTиТитул_AR.ifc.0001.RVT; - ExportIFC отбирает к работе только «чистые» файлы с ровно одним расширением
.rvt(без дополнительных суффиксов в имени), поэтому файлы с несколькими точками и «хвостами» автоматически игнорируются и не попадут в задачи на выгрузку; - дополнительно имя IFC и строки в логах/Excel строятся по имени файла без расширения,
поэтому для таких служебных имён получаются записи вроде
Титул_AR.ifc.0001.ifc, что путает модель и результат; - надёжнее всего договориться, что рабочие модели называются в формате
Project_AR.rvt— одна точка прямо перед.rvt
и без лишних хвостов.
- Revit при запуске из папки с моделями и/или подгружёнными IFC автоматически создаёт рядом служебные копии вида
- Все пути в
manage.xlsxзадаются как абсолютные пути к папкам с моделями:- если вы перенесли или переименовали папку с файлами
.rvt, путь вmanage.xlsxнужно обновить; - если вы переименовали или добавили/удалили отдельные
.rvtвнутри указанной папки, ничего менять вmanage.xlsxне нужно — скрипт сам найдёт подходящие файлы; - если указанный путь к папке больше не существует, соответствующая строка будет фактически проигнорирована — папка не попадёт в анализ, а модели из неё не будут участвовать в подготовке задач на выгрузку, пока путь не будет исправлен, а в логах подготовки задач в консоли появятся предупреждения о пропуске строки из-за некорректных путей.
- если вы перенесли или переименовали папку с файлами
ExportIFC не различает «тип» файла на уровне пути — он просто открывает *.rvt по указанному полному пути. Поведение при открытии задаётся методом _build_open_options() в pyRevit-части (см. Раздел 2.3.1), который по умолчанию:
- отсоединяет модель от центральной (detach) с сохранением рабочих наборов;
- открывает все рабочие наборы;
- разрешает открывать локальные файлы «не тем» пользователем;
- игнорирует конфликты Extensible Storage;
- разрешает открывать «чужие» элементы.
Из этого следуют практические требования:
- Центральные файлы.
- В первом столбце
manage.xlsxуказываются папки, в которых лежат модели Revit (*.rvt):- скрипт не различает «центральные» и «локальные» файлы — он просто перебирает все подходящие
.rvtв этих папках; - дальше каждая модель открывается в Revit с заданными опциями (detach, все рабочие наборы и т.п.), независимо от того, была она центральной или локальной.
- скрипт не различает «центральные» и «локальные» файлы — он просто перебирает все подходящие
- При открытии в режиме detach экспорт выполняется на отсоединённой копии, а центральный файл не должен изменяться.
Тем не менее, если политика компании строгая, лучше использовать выделенные копии (см. ниже).
- В первом столбце
- Локальные файлы.
- Можно использовать локальные файлы, если на машине выгрузки они лежат по стабильным путям.
- Открытие «не тем» пользователем для массовой выгрузки допускается параметрами
_build_open_options().
- Отсоединённые «технические» копии.
- Наиболее надёжный сценарий для регулярного автоматического экспорта (ночного или дневного) — выделенный набор моделей:
- один раз сделать detach от центральной,
- сохранить получившиеся файлы в отдельную папку,
- именно эту папку указать в первом столбце
manage.xlsx.
- Тогда рабочие модели проектировщиков не участвуют в открытии при автоматическом экспорте вообще.
- Наиболее надёжный сценарий для регулярного автоматического экспорта (ночного или дневного) — выделенный набор моделей:
К чему стоит отнестись аккуратно:
- Формально ExportIFC не должен вносить изменений в модели: все действия выполняются внутри транзакции, которая в конце откатывается.
Тем не менее, сценарий, когда та же модель одновременно используется как рабочая (в ней кто-то чертит) и как источник для автоматического экспорта, остаётся рискованным:- при открытии модели могут срабатывать сторонние плагины и события Revit, которые работают в своих транзакциях и не контролируются ExportIFC;
- если в момент экспорта модель уже открыта и редактируется, поведение Revit и плагинов перестаёт быть предсказуемым;
- поэтому для автоматического экспорта рекомендуется использовать отдельные отсоединённые копии моделей или папки, которые не используются в качестве «живых» рабочих файлов.
- Не использовать в
manage.xlsxмодели, сохранённые в версиях Revit, которых нет вrevit_versionsи фактически не установлено на машине выгрузки:- такие файлы либо окажутся в логе
admin_data/_logs/4_not_supported_versions_YYYY.MM.DD.txt(если версия файла новее всех указанных), - либо просто не смогут быть обработаны корректно, даже если до этапа экспорта они формально «дойдут».
- такие файлы либо окажутся в логе
При автоматическом открытии модели через ExportIFC:
- Загружаются все рабочие наборы.
- Нельзя рассчитывать, что выгрузка пойдёт «только по рабочему набору IFC» — всё управляется через вид и фильтры (см. 9.4).
- Если модель не выдерживает открытие с полным набором рабочих наборов, её лучше оптимизировать или использовать отдельную облегченную копию для выгрузки.
- Пытаются загрузиться все связи Revit.
- При наличии связей (RVT, DWG, IFC и др.) Revit будет пытаться автоматически подгружать их по сохранённым в модели путям: ExportIFC не отключает связи и не переопределяет логику их загрузки — используется стандартное поведение Revit с разрешённым открытием внешних элементов.
- Если при ручном открытии модели появляются диалоги вида «Не найден файл связи…» с требованием выбора пути — тот же диалог всплывёт и при автоматическом запуске и, возможно, это заблокирует экспорт.
Требования по связям и рабочим наборам:
- На машине выгрузки должны быть доступны те же сетевые диски, что и у проектировщиков:
- чтобы связи подхватывались по тем же путям;
- чтобы Revit не пытался спросить «где лежит файл».
- В идеале при ручном открытии модели на машине выгрузки:
- не должно быть блокирующих диалогов по связям (для надёжности, так как такие диалоги могут помешать автоматическому экспорту);
- все необходимые рабочие наборы должны открываться без ошибок.
- Design Options, Phases, Worksharing Display и прочие «режимы отображения» управляются видом, а не самим ExportIFC:
- если нужно выгружать только определённую комбинацию опций/фаз — настройте это в экспортном 3D-виде;
- скрипт не переключает опции/фазы за вас.
Это ключевое требование к каждой модели: в ней обязан быть 3D-вид, имя которого указано в параметре export_view3d_name (см. Раздел 3.7 и 6.5). По умолчанию в примерах используется Navisworks.
Минимальные условия:
- Вид должен быть трёхмерным (тип
View3D), а не планом/разрезом/листом. - Вид не должен быть шаблоном (Template = False).
- Вид должен существовать в каждой модели, которая участвует в выгрузке.
- Название вида должно точно совпадать со значением
export_view3d_name:- имя вида сравнивается со значением
export_view3d_nameизsettings.iniс учётом регистра; любые отличия в написании (регистр, лишние пробелы, невидимые символы и т.п.) приведут к тому, что вид не будет найден.
- имя вида сравнивается со значением
На этом виде настраивается всё, что связано с содержимым IFC:
- включение/отключение категорий и подкатегорий;
- фильтры по параметрам (например, только определённые этажи или секции);
- включение/исключение ссылок;
- Design Options / Phases / дисциплины и другие режимы отображения, которые должны быть актуальны на момент экспорта.
Если вид не найден:
-
модель не попадает в экспорт;
-
путь к модели и краткое описание проблемы пишутся в лог:
admin_data/_logs/2_not_view_<ИмяВида>_in_models_YYYY.MM.DD.txt
(в типовой конфигурации —admin_data/_logs/2_not_view_Navisworks_in_models_YYYY.MM.DD.txt).
Рекомендации по организации вида:
- Для каждого проекта заведите стандартный 3D-вид для экспорта IFC, управляемый BIM-координатором.
- В шаблонах Revit имеет смысл сразу создавать этот вид с нужными настройками (фильтры, категории, фаза и т.п.).
- Если для одного проекта нужно несколько разных «срезов» IFC, лучше:
- либо завести несколько разных экспортных видов и несколько отдельных экземпляров ExportIFC:
- для каждого сценария экспорта используется своя папка с ExportIFC со своим
settings.ini,manage.xlsxи набором IFC-конфигов; - в каждом таком экземпляре задаётся свой
export_view3d_nameпод конкретный 3D-вид; - дальше они запускаются независимо (например, разными заданиями в Планировщике задач Windows).
- для каждого сценария экспорта используется своя папка с ExportIFC со своим
- либо чётко договориться, что один вид «отвечает» за одну конкретную логику выгрузки и не править его «по вкусу» каждому пользователю.
- либо завести несколько разных экспортных видов и несколько отдельных экземпляров ExportIFC:
IFC-конфиги (JSON + Property_Mapping.txt и файлы маппинга категорий) задают, какие именно параметры Revit должны попасть в IFC.
ExportIFC к самим параметрам не предъявляет жёстких требований, но чтобы экспортированные IFC-файлы содержали нужные данные, важно следующее:
- Параметры, указанные в
Property_Mapping.txt, должны реально существовать:- в шаблонах проекта;
- в семействах, которые используются в моделях;
- либо как shared parameters, либо как project parameters.
- Отсутствие параметра не ломает экспорт: IFC Exporter просто оставит соответствующее свойство пустым,
но с точки зрения данных это «тихий провал».
Рекомендации:
- Перед массовым запуском ExportIFC по проекту имеет смысл:
- проверить, что ключевые параметры, описанные в
Property_Mapping.txt, реально присутствуют в моделях; - убедиться, что типов параметров и наборов значений хватает для требований заказчика.
- проверить, что ключевые параметры, описанные в
- JSON-конфиг
Export_Settings.jsonдолжен оставаться корректным для стандартного IFC Exporter:- безопаснее всего получать его через интерфейс Revit — настроить профиль в диалоге экспорта IFC, привязать
Property_Mapping.txtи сохранить набор параметров; - при необходимости правьте JSON вручную только на основе уже сгенерированного Revit-файла и только если вы понимаете его структуру; ошибка в формате или полях сделает профиль непригодным для экспорта.
- безопаснее всего получать его через интерфейс Revit — настроить профиль в диалоге экспорта IFC, привязать
- Если для разных проектов используются разные наборы параметров:
- заведите разные проектные папки IFC-конфигов (см. Раздел 7.4);
- в
manage.xlsxв колонке C укажите соответствующие папки конфигов для каждой группы моделей.
Всё, что связано со структурой папок и базовым составом файлов конфигурации (Export_Settings.json, Property_Mapping.txt, файлы маппинга категорий),
подробно разобрано в Разделе 7 и документе
Описание структуры конфигов IFC.
Даже если модель удовлетворяет формальным требованиям, автоматическая выгрузка может ломаться при наличии:
- критических ошибок модели, которые Revit показывает как блокирующие диалоги;
- требований к восстановлению/ремонту файла при открытии;
- жёстких требований сторонних плагинов (лицензии, несовместимость версий, обязательные диалоги на старте).
Основные рекомендации:
-
Проверка ручным открытием.
На машине выгрузки (под тем же пользователем, от которого запускается ExportIFC):
- открыть модель в нужной версии Revit;
- убедиться, что:
- нет диалогов вида «Модель повреждена, требуется восстановление»;
- нет диалогов о лицензиях или настройках плагинов, которые надо закрывать вручную;
- нет циклических требований сохранить/перезаписать файл при открытии.
-
Сторонние плагины.
(подробнее см. Раздел 4.3)
- На машине выгрузки должны быть установлены все плагины, от которых зависят модели.
- Если используется плагин, который при открытии модели всегда показывает модальное окно —
либо настройте его так, чтобы окно не появлялось, либо исключите такие модели из автоматического экспорта.
-
Размер и сложность модели.
- Очень тяжёлые модели могут открываться настолько долго, что отведённое на автоматический экспорт время будет «съедено» самим открытием моделей.
- В таких случаях разумно:
- использовать облегчённые копии моделей под экспорт;
- либо вычистить модель (purge, clean-up) и стабилизировать её открытие до разумного времени.
Перед тем как добавить новую папку с моделями в первый столбец manage.xlsx, стоит пройтись по чек-листу:
-
Файл и версия:
- модели, которые должны участвовать в экспорте, сохранены как файлы формата
*.rvtв отдельной папке (или наборе папок), которую вы планируете указать вmanage.xlsx; - имена файлов «чистые»: одна точка перед
.rvt, без хвостов.0001,.ifcи т.п., чтобы ExportIFC не отсеял их как служебные копии; - версии файлов попадают в диапазон версий из
revit_versionsв_settings/settings.ini:- если версия файла новее максимальной, он окажется в логе неподдерживаемых версий и не пойдёт в экспорт;
- если версия файла ниже минимальной, он всё равно может быть обработан и будет отнесён к минимальной поддерживаемой версии.
- путь к папке стабильный и будет поддерживаться в течение длительного времени.
- модели, которые должны участвовать в экспорте, сохранены как файлы формата
-
Открытие:
- модель открывается на машине выгрузки в нужной версии Revit без блокирующих диалогов и критических ошибок (восстановление, повреждение файла и т.п.);
- при открытии нет всплывающих окон от сторонних плагинов, которые требуют обязательных ручных действий (лицензии, настройки, подтверждения);
- если при ручном открытии диалоги всё же появляются, можно аккуратно выполнить тестовую выгрузку через ExportIFC: если окна не блокируют процесс и не требуют вмешательства пользователя, такой сценарий допускается, но его стоит использовать с осторожностью.
-
Связи и рабочие наборы:
- при открытии с загрузкой всех рабочих наборов модель не разваливается и не выдаёт ошибок;
- пути к основным связям (RVT, DWG, IFC и др.) доступны с машины выгрузки, Revit не показывает диалоги «Не найден файл связи…» с требованием выбора пути.
-
3D-вид для экспорта:
- в модели есть не шаблонный 3D-вид (тип
View3D) с именемexport_view3d_nameизsettings.ini; - имя вида точно совпадает со значением
export_view3d_name(регистр, лишние пробелы и невидимые символы не отличаются); - на этом виде включены именно те элементы, которые должны попасть в IFC;
- при необходимости настроены фильтры, фазы, опции проекта, Design Options и другие режимы отображения.
- в модели есть не шаблонный 3D-вид (тип
-
Параметры и маппинг:
- основные параметры, используемые в
Property_Mapping.txt, реально присутствуют в модели (в шаблонах, семействах и/или в общих/проектных параметрах); - для модели выбрана корректная папка IFC-конфигов (колонка C в
manage.xlsx), которые согласованы с требованиями заказчика; Export_Settings.jsonв этой папке получен из Revit и остаётся валидным для стандартного IFC Exporter (если файл редактировался вручную, это делалось аккуратно и на основе уже сгенерированного Revit JSON).
- основные параметры, используемые в
Если модель (и папка, в которой она лежит) проходит этот чек-лист, ExportIFC будет воспринимать её как «здоровую» и пригодную для автоматической выгрузки.
Дальше, в Разделе 10, мы вернёмся к эксплуатации в целом: ручной запуск, запуск по расписанию и типовые сценарии работы в связке «координатор ↔ админ ↔ автоматический экспорт».
Этот раздел описывает практическое использование ExportIFC:
- как запускать выгрузку вручную;
- как настроить запуск по расписанию через Планировщик задач Windows;
- как типично использовать ExportIFC в жизни проекта;
- как безопасно переносить настройку на другую машину.
В нормальной эксплуатации используются два основных способа запуска:
-
Ручной запуск:
- через bat-файл
_settings/bat/run_export_ifc.bat; - подходит для разовых запусков, отладки и ручной выгрузки перед выдачей IFC.
- через bat-файл
-
Запуск по расписанию:
- через Планировщик задач Windows;
- одна машина регулярно выполняет
run_export_ifc.batот имени сервисного пользователя; - подходит для ночных или периодических (например, каждый час) выгрузок без участия людей.
Во всех случаях входной точкой является CPython-часть (файл main.py), а не скрипт ExportIFC.py внутри Revit.
Bat-файл берёт на себя все детали запуска Python и поиска корня проекта, поэтому запускать main.py напрямую из случайной папки не рекомендовано — это уже уровень разработчика/отладки.
Ручной запуск нужен:
- при первичной настройке проекта;
- при проверке новой конфигурации IFC/
manage.xlsx; - при разовой выгрузке по запросу (перед выдачей IFC заказчику);
- при диагностике проблем (в связке с dry-run и логами).
Минимальная последовательность:
-
Проверить подготовку окружения (один раз на стенд):
- настроен
_settings/settings.ini(Раздел 6); - подготовлен
admin_data(Раздел 8); - настроены конфиги IFC (Раздел 7);
- установлены Python и pyRevit, а DLL IFC Exporter скопирован в
_settings/ApiIFCExporterпо инструкции из Раздела 4.2.2.
- настроен
-
Открыть консоль (PowerShell или cmd):
- опционально перейти в корень репозитория
ExportIFCfromRevit(для удобства чтения путей и логов); - при запуске из Проводника можно просто дважды щёлкнуть по bat-файлу, но при диагностике удобнее запускать его из уже открытой консоли: так проще листать историю, копировать текст ошибок и повторять запуск с разными настройками.
- опционально перейти в корень репозитория
-
Запустить bat-файл:
Пример через консоль (путь адаптировать под свою структуру):
_settings\bat\run_export_ifc.bat
Bat-скрипт:
- определяет корень репозитория по своему расположению;
- запускает
py -3 main.py(или другой Python, если это переопределено в настройках bat-файла); - передаёт управление оркестратору
ExportOrchestrator; - подробнее поведение и параметры bat-файла описаны в документе README для bat-скриптов.
-
Наблюдать вывод в консоли.
В процессе запуска будет видно:
- обнаруженные версии Revit и выбранные модели;
- предупреждения по
manage.xlsxи истории; - итоговое решение — сколько моделей и на какие версии Revit пойдут в экспорт.
При серьёзных ошибках (нет
manage.xlsx, не найденsettings.ini, нет доступа к папкам) выводится короткое CRITICAL-сообщение (расширенный стек появляется только приDEBUG = True). -
Проверить результат:
- в папках вывода IFC (колонки B/E в
manage.xlsx) появились новые/обновлённые файлы; - в
admin_data/history/history.xlsxобновились записи по обработанным моделям; - при наличии предупреждений или ошибок в процессе выгрузки в
admin_data/_logsпоявятся или обновятся текстовые логи (см. Раздел 11); - при необходимости — проверить, что IFC-файлы проходят проверки у заказчика/координатора.
- в папках вывода IFC (колонки B/E в
Для безопасной проверки новой конфигурации удобно использовать режим dry-run:
- в файле
main.pyпараметрRUN_PYREVITвыставляется вFalse; - bat-файл
run_export_ifc.batзапускает тот жеmain.py, но без вызова Revit.
В этом режиме:
- формируются
Task<версия>.txtиtmp.csvдля всех версий Revit, где нашлись модели; - обновляется
history.xlsx(модели считаются «проверенными» по состоянию на текущий запуск); - pyRevit и Revit не запускаются;
- итоговый
tmp.csvдля последней обработанной версии остаётся вdir_admin_dataи его можно открыть в Excel/текстовом редакторе, чтобы посмотреть, какие задачи сформировались по текущим настройкам; при необходимости можно досрочно остановить скрипт после обработки нужной версии и изучать соответствующийtmp.csvтолько для неё.
Режим dry-run особенно полезен, когда:
- вы добавили новые строки в
manage.xlsx; - перенастроили пути или конфиги IFC;
- хотите убедиться, что в экспорт не попадут «лишние» модели.
После проверки нужно вернуть RUN_PYREVIT = True, иначе экспорт IFC так и не начнётся.
Иногда удобнее запускать ExportIFC напрямую через Python — например, при отладке или разработке.
Минимальный вариант:
- Открыть консоль (PowerShell или cmd) в корне репозитория
ExportIFCfromRevit. - Выполнить команду:
py -3 main.pyПри таком запуске:
- будут прочитаны
_settings/settings.iniиadmin_data/manage.xlsx; - будут сформированы временные файлы задач (
Task<версия>.txt) и рабочийtmp.csv; - для необходимых версий Revit при
RUN_PYREVIT = Trueбудет вызван pyRevit и запущен экспорт; - логи и
history.xlsxобновятся так же, как при запуске черезrun_export_ifc.bat.
Опытные пользователи при желании могут настроить запуск main.py через Visual Studio Code
(например, через встроенный терминал или отдельную конфигурацию запуска),
но такой сценарий выходит за рамки базового мануала.
В обычной эксплуатации рекомендуется запускать ExportIFC именно через bat-файл,
а прямой запуск main.py оставлять для технических задач и отладки.
В production-сценарии ExportIFC обычно запускается автоматически по расписанию с одной выделенной машины (сервер выгрузок, мощная рабочая станция координатора и т.п.).
-
Одна рабочая машина на одну
admin_data.
Если несколько машин одновременно используют одну и ту же папкуadmin_data, можно получить гонки при записиhistory.xlsxи логов. В нормальной конфигурации одна машина считается «ответственной» за конкретный набор моделей и единолично запускает ExportIFC по расписанию. -
Сервисный пользователь.
Лучше настроить задачу от имени отдельной учётной записи, которая:- имеет лицензии/права на запуск нужных версий Revit;
- имеет доступ ко всем путям в
manage.xlsxиsettings.ini; - не требует, чтобы инженер был залогинен на машине: задача в Планировщике выполняется даже при отсутствии активного пользовательского сеанса (при необходимости проконсультируйтесь с ИТ-специалистами вашей компании).
-
Согласованный график.
График запусков лучше формализовать в отдельном файле/регламенте (см. дополнительный документ Пример расписания запусков) и согласовать с командой: когда именно и как часто можно грузить Revit автоматическими выгрузками.
Примерный порядок шагов (Windows 10/11):
-
Открыть Планировщик задач:
- через меню «Пуск»;
- или командой
taskschd.mscв диалоге «Выполнить» (сочетание клавиш Win+R).
-
В дереве слева выбрать существующую или создать новую папку для задач (например,
Библиотека планировщика задач\BIM). -
В правой панели выбрать «Создать задачу…» (не «Создать простую задачу…» — там меньше настроек).
-
На вкладке Общие:
- задать осмысленное имя задачи (например,
ExportIFC_AutoExport); - указать пользователя/группу, от имени которых будет запускаться задача;
- при необходимости включить:
- «Выполнять с наивысшими правами» (если Revit/pyRevit этого требуют по политике);
- «Выполнять независимо от регистрации пользователя» (для ночных запусков без сессии).
- задать осмысленное имя задачи (например,
-
На вкладке Триггеры:
- добавить триггер, например:
- ежедневно, в 02:00;
- или каждые N часов по рабочим дням;
- учесть, когда наименьшая нагрузка на сеть/серверы моделей;
- выбранное время и периодичность запусков потом зафиксировать в вашем регламенте или файле с расписанием (например, расписание запусков), чтобы команда понимала, когда именно работает ExportIFC.
- добавить триггер, например:
-
На вкладке Действия:
Есть два основных варианта:
-
указать bat-файл напрямую:
Программа/скрипт: полный путь к
run_export_ifc.bat, например
D:\BIM\ExportIFCfromRevit\_settings\bat\run_export_ifc.batАргументы: можно оставить пустыми.
Рабочая папка: можно указать корень репозитория, например
D:\BIM\ExportIFCfromRevit -
либо запускать через
cmd.exe:Программа/скрипт:
C:\Windows\System32\cmd.exeАргументы:
/c "D:\BIM\ExportIFCfromRevit\_settings\bat\run_export_ifc.bat"Рабочая папка: корень репозитория (по желанию).
Основной рекомендуемый вариант — указывать bat-файл напрямую. Запуск через
cmd.exeимеет смысл использовать только как запасной вариант, если в конкретном окружении возникают проблемы с ассоциациями для.batили переменной PATH. -
-
Вкладки Условия и Параметры:
- по ситуации:
- запускать только при питании от сети;
- не запускать одновременно несколько экземпляров задачи;
- прерывать задачу, если она выполняется более заданного времени.
- по ситуации:
После сохранения стоит сделать ручной запуск задачи из Планировщика, чтобы убедиться, что:
- запускается Revit (если стоят флаги
RUN_PYREVIT = True); - обновляются IFC,
history.xlsxи текстовые логи.
Иногда удобно иметь две задачи:
- одну — рабочую, с реальным экспортом;
- вторую — dry-run (например, раз в час днём), чтобы проверять только корректность
manage.xlsxи структуры путей.
Для этого обычно:
-
либо делают отдельный bat-файл/обёртку под dry-run (уровень разработчика/админа), который запускает отдельную конфигурацию ExportIFC:
- это может быть отдельная копия проекта или отдельная ветка/настройка, где в коде/конфигурации флаг
RUN_PYREVITжёстко установлен вFalse(и при необходимостиDEBUG = True); - основной рабочий вариант с реальным экспортом при этом не меняется и продолжает использовать
RUN_PYREVIT = True.
- это может быть отдельная копия проекта или отдельная ветка/настройка, где в коде/конфигурации флаг
-
либо договорённостями фиксируют, что dry-run запускается вручную при крупных изменениях, а по расписанию работает только полноценная выгрузка.
-
Если корпоративные политики позволяют, можно формализовать расписание dry-run в отдельном документе рядом с примером расписания запусков.
Ниже — несколько типовых схем использования ExportIFC.
- Одна машина (сервер) запускает ExportIFC каждый день в 00:00.
- Проектировщики к концу дня сохраняют модели на файловый сервер.
- Утром координаторы/заказчик всегда видят свежие IFC в фиксированных папках.
Такой сценарий хорошо работает, если:
- не требуется «моментальная» выгрузка при каждом сохранении модели;
- нет жёстких ограничений по ночному запуску Revit.
- Задача в Планировщике настроена, например, «каждый час с 09:00 до 19:00».
- ExportIFC каждый раз проверяет
history.xlsxи реальные IFC на диске:- модели, которые не менялись и имеют актуальные IFC, не трогаются;
- изменившиеся модели выгружаются заново.
Таким образом, нагрузка на Revit и сеть распределяется по дню, а IFC остаются достаточно свежими, не требуя ручного запуска.
- Для некоторых проектов автоматизации по расписанию нет (малый объём, нерегулярные изменения).
- Координатор вручную запускает
run_export_ifc.bat:- перед еженедельной координацией;
- перед выдачей комплекта IFC заказчику.
При таком сценарии важно, чтобы:
- перед запуском был закрыт файл
history.xlsx, чтобы он не блокировал запись во время выгрузки;manage.xlsxможет быть открыт несколькими пользователями параллельно (режим общего доступа): ExportIFC читает этот файл только на чтение, поэтому закрывать его специально для выгрузки не требуется; - были актуальны конфиги IFC и данные в
manage.xlsx.
Типичный порядок действий:
- Настроить IFC-конфиги проекта (Раздел 7).
- Добавить новую строку в
manage.xlsxдля папки с моделями. - Сделать dry-run:
- проверить
tmp.csvи логи на предмет ошибок путей/версий.
- проверить
- Сделать один ручной полноценный запуск.
- Убедиться, что:
- IFC корректные;
- записи по новым моделям появились в
history.xlsx; - проблемные модели либо поправлены, либо отправлены в
IgnoreList.
- При необходимости обновить регламент по расписанию (если новый проект влияет на длительность общего экспорта).
Когда возникает необходимость перенести роль «машины экспорта» (например, при замене сервера/рабочей станции), минимальная последовательность:
-
На новой машине установить (см. Раздел 4):
- нужные версии Revit;
- pyRevit и привязать его ко всем нужным версиям Revit;
- CPython 3.12+ и библиотеку
openpyxl; - при необходимости скопировать/обновить DLL IFC Exporter в
_settings/ApiIFCExporterпо инструкции из Раздела 4.2.2
(отдельную установку IFC Exporter как плагина выполнять не нужно).
-
Скопировать или заново выкачать репозиторий
ExportIFCfromRevit
(с сохранением структуры_settings,_examples,_docsи т.п.). -
Убедиться, что путь к рабочей
admin_dataсовпадает с производственным:is_prod_mode = True;dir_admin_dataуказывает на ту же сетевую папку, что и раньше.
-
Запустить вручную
run_export_ifc.batв dry-run режиме, проверить логи. -
Отключить/удалить задачу из Планировщика на старой машине.
-
Создать и протестировать задачу в Планировщике на новой машине.
После этого новую машину можно считать «единственным источником» автоматического экспорта по данному проекту/папке admin_data.
В этом разделе описан общий подход к диагностике и типовые проблемы, которые могут возникать при работе ExportIFC.
Цель — быстро понять:
- на каком этапе цепочки возникает проблема (окружение, Excel, конфиги IFC, Revit);
- где искать подробности (консоль,
manage.xlsx,history.xlsx,_logs); - что можно исправлять руками, а чего лучше не трогать.
При любой непонятной ситуации полезно придерживаться простого алгоритма:
-
Консольный вывод при запуске bat-файла.
- есть ли явные ошибки (нет Python, не найден
settings.ini, проблемы доступа к файлам); - доходит ли программа до формирования задач и запуска pyRevit.
- есть ли явные ошибки (нет Python, не найден
-
manage.xlsx(листPathиIgnoreList).- есть ли строка, соответствующая проблемной папке/модели;
- не попал ли файл в
IgnoreList; - не перепутаны ли пути в колонках A/B/C/E;
- корректно ли указаны имена файлов маппинга и JSON-конфигов в колонках D/F.
-
history/history.xlsx.- есть ли запись по проблемной модели;
- не «застряла» ли дата модификации (например, история давно не обновлялась из-за блокировки файла).
-
Папка
admin_data/_logs.Проверить файл(ы) за интересующую дату:
1_errors_when_opening_models_YYYY.MM.DD.txt— проблемы при открытии моделей в Revit;2_not_view_<ИмяВида>_in_models_YYYY.MM.DD.txt— нет нужного 3D-вида (имя вида берётся изexport_view3d_name);3_not_found_versions_YYYY.MM.DD.txt— не удалось определить версию Revit;4_not_supported_versions_YYYY.MM.DD.txt— файл новее всех поддерживаемых версий;5_export_errors_YYYY.MM.DD.txt— ошибки экспорта IFC;6_mtime_issues_YYYY.MM.DD.txt— проблемы с датой модификации при разбореmanage.xlsx.
Все эти текстовые файлы формирует CPython-часть (оркестратор) на основе результатов, которые приходят от pyRevit и Revit.
Отдельные журналы самого Revit/pyRevit при желании можно смотреть в их стандартных местах, но для диагностики ExportIFC в большинстве случаев достаточно этой папки.В конце файла может появиться строка-разделитель для отделения нескольких запусков в один день, но она добавляется только если соответствующий лог менялся в текущем запуске.
Чаще всего комбинации этих четырёх источников достаточно, чтобы понять, где именно «болит»:
если ошибка появляется ещё до формирования задач или запуска Revit — это почти всегда проблема окружения (Python, pyRevit, пути, права);
если Revit стартует, а в логах появляются записи по конкретным моделям, речь уже идёт о настройках manage.xlsx, конфигурации IFC или состоянии самих моделей.
Симптомы:
- при двойном щелчке по
_settings/bat/run_export_ifc.batокно консоли на мгновение появляется и исчезает; - нет никаких логов и новых IFC.
Рекомендации:
-
Запускать bat-файл через уже открытую консоль (PowerShell/cmd). Тогда окно не закрывается и виден реальный текст ошибки.
-
Проверить, что:
- установлен Python 3.12+ и команда
py -3отрабатывает без ошибок; - путь к репозиторию и к рабочей
admin_dataне содержит лишних пробелов и экзотических символов, которые могут блокироваться корпоративной политикой или антивирусом; сам ExportIFC корректно работает с кириллицей в путях, но в некоторых организациях пути с национальными символами могут считаться нежелательными или ограничиваться ИТ-политиками. - у пользователя есть права на чтение/запись в папки, указанные в
settings.ini.
- установлен Python 3.12+ и команда
-
При ошибках вида «команда py не распознана»:
- проверить установку Python и PATH;
- при необходимости явно указать команду запуска Python в начале
_settings/bat/run_export_ifc.bat— ориентируйтесь на комментарии внутри этого bat-файла (блок настроекPY_CMDв начале скрипта).
-
При ошибках вида «не найден main.py» или
ImportError:- убедиться, что bat-файл действительно лежит в
_settings/batвнутри репозитория; - не переименовывать и не перемещать
_settings/bat/run_export_ifc.batв другие места без понимания того, как он ищет корень проекта.
- убедиться, что bat-файл действительно лежит в
Симптомы:
- в консоли сообщения вида:
No module named openpyxl;pyrevit is not recognized as an internal or external command;- ошибки импорта модулей
core,config,revitи т.п.
Проверить:
-
openpyxl.При ошибках ModuleNotFoundError:
- использовать bat-скрипт
_settings/bat/install_openpyxl_pip_or_whl.bat
(и при необходимости офлайн-вариант, описанный в README для bat-скриптов). - убедиться, что
openpyxlустановлен в тот же интерпретатор Python, который запускает ExportIFC (py -3или указанный вручнуюpython.exe).
- использовать bat-скрипт
-
pyRevit CLI.
При ошибках вида «pyrevit не является внутренней или внешней командой»:
- проверить, установлен ли pyRevit и видна ли вкладка в Revit;
- добавить
pyrevit.exeв PATH либо использовать bat-скрипт_settings/bat/attach_pyrevit_engine_all_revit.bat, где при необходимости можно явно задать путь кpyrevit.exe; - перепривязать движок pyRevit ко всем версиям Revit через соответствующий bat-скрипт из
_settings/bat/attach_pyrevit_engine_all_revit.bat.
-
Структура репозитория.
Если при импорте модулей
core/config/revitвозникают странные ошибки:- убедиться, что репозиторий выкачан/скопирован целиком;
- проверить, что файлы не блокируются антивирусом или системой контроля версий.
Симптомы:
- ExportIFC вроде бы отработал (Revit запускался, ошибок в консоли нет), но:
- в папках вывода IFC нет ожидаемых файлов;
- IFC не обновились по дате/содержимому.
Порядок проверки:
-
Убедиться, что вы смотрите именно в те папки, которые указаны в
manage.xlsx:- колонка B — папка вывода IFC с маппингом;
- колонка E — папка вывода IFC без маппинга (если используется).
-
Проверить логи:
1_errors_when_opening_models_YYYY.MM.DD.txt— нет ли ошибок открытия моделей;2_not_view_<ИмяВида>_in_models_YYYY.MM.DD.txt— не отсутствует ли нужный 3D-вид;5_export_errors_YYYY.MM.DD.txt— нет ли явных ошибок на этапе экспорта IFC.
-
Проверить, что:
- в моделях реально существует 3D-вид с именем
export_view3d_name(по умолчаниюNavisworks); - в
Export_Settings.jsonили другом проектном JSON корректно заданы пути/настройки IFC Exporter; - в
settings.iniверно указаны путиdir_export_configиdir_admin_data.
- в моделях реально существует 3D-вид с именем
-
Если по результатам проверки актуальности ExportIFC пропускает модели
(считает, что экспорт для них не требуется), но фактические IFC на диске вас не устраивают:- посмотреть дату модификации файлов IFC и моделей
.rvt; - при необходимости принудительно «состарить» историю (удалить/править строки в
history.xlsx)
или удалить/переименовать соответствующие IFC-файлы (тогда ExportIFC воспримет их как отсутствующие).
- посмотреть дату модификации файлов IFC и моделей
Симптомы:
- часть моделей в папке выводится в IFC, часть — нет;
- при этом не видно явных ошибок в консоли.
Проверяем последовательно:
-
IgnoreListвmanage.xlsx.- не указан ли полный путь к модели на листе
IgnoreList; - иногда «временно» добавленную в ignore модель просто забывают вернуть обратно.
- не указан ли полный путь к модели на листе
-
Версия Revit.
- проверить
3_not_found_versions_YYYY.MM.DD.txtи4_not_supported_versions_YYYY.MM.DD.txt:- если версия не определилась — файл может быть повреждён или нетипичного формата;
- если версия новее, чем все перечисленные в
revit_versions, модель игнорируется как неподдерживаемая.
- проверить
-
Проблемы с датой модификации.
- посмотреть
6_mtime_issues_YYYY.MM.DD.txt:- при странных датах (ошибки чтения mtime, нестандартные сетевые диски) модель может не попадать в корректное сравнение;
- при необходимости временно вывести модель в отдельную папку и настроить под неё отдельную строку в
manage.xlsx.
- посмотреть
-
История и IFC.
- если в
history.xlsxмодель числится с актуальной датой, а на диске есть IFC-файл с более новой датой, ExportIFC может корректно решить, что выгрузка не требуется; - если при этом всё же нужна принудительная перевыгрузка — использовать один из методов из Раздела 8.7 (удалить записи из истории или удалить/переименовать IFC).
- если в
Симптомы:
- экспорт блокируется всплывающими окнами;
- в логах могут быть «обрывки» экспорта или вообще не записываться ожидаемые ошибки.
Наиболее частые причины:
- диалоги от сторонних плагинов (обновление версий, запрос лицензии и т.п.);
- диалоги, связанные с расширяемым хранилищем (Extensible Storage) или конфликтами схем: часть таких ситуаций гасится настройками открытия, но в нестандартных случаях окна всё равно могут появляться;
- диалоги открывающихся моделей (несоответствие шаблонов, повреждённые файлы).
Рекомендации:
-
Открыть проблемную модель вручную в соответствующей версии Revit на той же машине и под тем же пользователем, от которого выполняется задача в Планировщике.
-
Обратить внимание на все диалоги/предупреждения и:
- либо устранить причину (доустановить нужные плагины, обновить надстройки);
- либо согласовать с ИТ-политиками установки/удаления конфликтующих компонентов.
-
В коде предусмотрены относительно «безопасные» параметры открытия (общие рабочие наборы, отключение части диалогов). Однако полностью подавить критические окна Revit невозможно — если программа считает предупреждение важным, она всё равно его покажет.
Относительно безопасно править вручную:
_settings/settings.ini— пути, версии Revit, имена листов, флаги режимов
(редактировать имеет смысл только при хорошем понимании того, как эти параметры влияют на работу ExportIFC);admin_data/manage.xlsx(оба листа);admin_data/history/history.xlsx— с пониманием, что файл полностью перезаписывается;- конфиги IFC (
Export_Settings*.json,Property_Mapping.txt,Layer_Mapping.txtи др.), если вы понимаете их формат; - текстовые файлы в
_logs— их можно читать, архивировать, удалять старые.
Не рекомендуется править вручную без крайней необходимости:
tmp.csvиTask<версия>.txt— служебные временные файлы, которые полностью формируются скриптом; редактировать их вручную нет смысла, а при необходимости их можно просто удалить вне процесса работы ExportIFC — при следующем запуске они будут созданы заново.- структуру папки
_settings(имена и расположение bat-скриптов, подпапкаApiIFCExporterи т.п.) — менять только при полном понимании того, какие пути и файлы зашиты в коде и bat-скриптах; большинство сценариев настройки покрытоsettings.iniи готовыми bat-файлами. - внутренние
.py-файлы вcore/,revit/,config/,utils/, если нет навыков разработки и понимания архитектуры ExportIFC.
Dry-run (см. Раздел 3.8 и 10.2.1) — важный инструмент для безопасной проверки:
- добавили новые строки в
manage.xlsx— можно запустить dry-run и посмотреть, какие модели попадут вtmp.csv; - перенесли
admin_dataна новый сервер — dry-run покажет, корректны ли пути и история; - хотите проверить только конфиги IFC/назначение моделей без реального запуска Revit.
Общий подход:
- Временно выставить
RUN_PYREVIT = Falseвmain.py. - Запустить
run_export_ifc.bat. - Проверить:
- вывод в консоли;
- содержимое
tmp.csvиTask<версия>.txtпо версиям Revit; - логи
3_not_found_versions,4_not_supported_versions,6_mtime_issues.
После завершения отладки вернуть RUN_PYREVIT = True, чтобы экспорт снова выполнялся.
Дополнительно:
- для экспериментов с новыми путями и конфигурациями удобно использовать тестовый контур — локальную
admin_dataприis_prod_mode = False(см. Раздел 6.4), а production-режим (is_prod_mode = True+ сетеваяadmin_data) оставлять только для регулярных запусков по расписанию.
Завершающий раздел — про организационные рекомендации и «экосистему» документации вокруг ExportIFC.
Рекомендуемый порядок чтения и использования:
- Основной README проекта — обзор ExportIFC, структура репозитория и краткий Quick start.
- Технический мануал ExportIFC (эта Markdown-версия) — базовая инструкция по установке, настройке и эксплуатации.
- Документация по настройкам и bat-скриптам — детали по
settings.ini, структуре_settingsи вспомогательным утилитам. - Документация по структуре IFC-конфигов и примерам маппинга — как устроены конфиги экспорта, какие есть варианты структуры и маппинга.
- Примеры расписания запусков и регламентов — как оформить расписание для Планировщика задач и описать регламент работы ExportIFC.
- Внутренний корпоративный регламент (если вы его заведёте) — как именно ваша компания использует ExportIFC, кто за что отвечает и где что лежит.
Если вы адаптировали ExportIFC и этот мануал под свои внутренние регламенты, имеет смысл:
- синхронизировать изменения между Markdown-версией мануала и внутренними
.docx, чтобы все версии описывали одну и ту же техническую сущность; - дополнительно завести свой внутренний документ (например,
.docx), где будет зафиксировано:- кто за что отвечает (координатор, админ, ИТ),
- где лежат рабочие конфиги и
admin_data, - как часто запускается ExportIFC по расписанию,
- как пользователи должны реагировать на ошибки и предупреждения.
Для стабильной работы ExportIFC полезно формально разделить зоны ответственности:
-
BIM-координатор / BIM-менеджер:
- определяет, какие модели должны выгружаться и куда;
- отвечает за заполнение
manage.xlsx(структура папок, пути IFC); - контролирует, что в моделях есть корректный 3D-вид для экспорта;
- ведёт и актуализирует проектные IFC-конфиги в своей папке
dir_export_config(структура00_Common / 01_Export_Layers / 02_<Проект>: файлыExport_Settings.json,Property_Mapping.txt, файлы маппинга категорий/семейств; см. Раздел 7); - согласует настройки IFC и состав параметров с требованиями заказчика/регламента проекта (при необходимости привлекает разработчика для сложных схем маппинга).
-
Технический администратор / ИТ-специалист:
- устанавливает/обновляет Python, Revit и pyRevit; при необходимости копирует DLL встроенного IFC Exporter в
_settings/ApiIFCExporterпо инструкции из Раздела 4.2.2. - поддерживает
_settings/settings.iniи bat-скрипты; - настраивает Планировщик задач Windows;
- следит за доступностью сетевых путей, правами и резервным копированием
admin_data; - обеспечивает доступность общей папки с IFC-конфигами (
dir_export_config) и резервное копирование её содержимого, но не меняет сами конфиги без согласования с BIM-координатором.
- устанавливает/обновляет Python, Revit и pyRevit; при необходимости копирует DLL встроенного IFC Exporter в
-
Разработчик ExportIFC (внутренний или внешний):
- меняет код в
core/,revit/,config/,utils/; - развивает архитектуру и автотесты;
- готовит и обновляет типовые шаблоны IFC-конфигов (общие
Export_Settings.json, примерыProperty_Mapping.txt, базовые маппинги категорий) и консультирует BIM-координатора по сложным случаям; - добавляет новые фичи, расширяет логику маппинга и т.п.;
- актуализирует документацию при изменениях поведения.
- меняет код в
Чёткое понимание «кто что трогает» позволяет избежать ситуаций, когда, например, координатор случайно правит settings.ini, а админ — содержимое Export_Settings.json руками в текстовом редакторе без связи с Revit.
Несколько советов, которые обычно упрощают жизнь при долгосрочной эксплуатации:
-
Одна «золотая» папка
admin_dataна проект.- для production-режима лучше иметь один-единственный экземпляр
admin_data, размещённый на защищённом сетевом диске; - все машины (если их несколько) используют один и тот же путь
dir_admin_dataвsettings.ini, но фактически запуск по расписанию делает только одна из них; - для тестовых сценариев (обкатка новых конфигов IFC, обновление версий Revit/Python/pyRevit) лучше использовать отдельную тестовую папку
admin_dataи/или отдельныйsettings.iniсis_prod_mode = False, чтобы не сломать боевые выгрузки (см. Раздел 6).
- для production-режима лучше иметь один-единственный экземпляр
-
Структура папок и работа с путями.
- придерживаться единой структуры
dir_export_configс префиксами00_,01_,02_<ИмяПроекта>,03_<ИмяПроекта>(см. Раздел 7) и не создавать для одного и того же проекта несколько случайных папок с настройками; - по возможности использовать стабильные сетевые пути (UNC вида
\\сервер\шар\проект\...) или закреплённые буквы дисков; избегать временных локальных путей видаC:\Users\Имя\Desktop\...вmanage.xlsx; - кириллица в путях и названиях папок поддерживается, но лучше избегать экзотических символов и чрезмерно длинных путей: в старых конфигурациях Windows и Revit могут действовать ограничения на длину пути;
- при переносе проектов на новые серверы или сетевые шары сначала обновлять пути в
manage.xlsx, и только потом включать ночные/автоматические выгрузки.
- придерживаться единой структуры
-
Версионность конфигов IFC и
manage.xlsx.- имеет смысл подключить
admin_dataиdir_export_configк системе контроля версий (Git, другой репозиторий, корпоративное решение); - перед крупными изменениями — создавать отдельную ветку/копию настроек;
- хранить подписи к изменениям: кто, когда и зачем менял конфиги.
- имеет смысл подключить
-
Архивирование логов.
- периодически сжимать старые файлы в
_logs(по дате в имени); - при изменении логики ExportIFC (новые типы логов, другие форматы) полезно хранить архивы на случай разбора инцидентов.
- периодически сжимать старые файлы в
-
Регламент обновления версий Revit/Python/pyRevit.
- при обновлении Revit:
- согласовать сроки с командой;
- обновить
revit_versionsвsettings.ini; - при необходимости обновить DLL IFC Exporter в
_settings/ApiIFCExporter; - пересобрать/проверить конфиги IFC под новую версию (по требованиям заказчика).
- при обновлении Python:
- проверить работу ExportIFC на тестовом стенде;
- убедиться, что
openpyxlустановлена для новой версии; - при необходимости скорректировать
PY_CMDв bat-скриптах.
- при обновлении Revit:
-
Документирование нестандартных решений.
Если в компании приняты специфические настройки (нестандартные пути, особые имена видов, свои форматы маппинга), полезно:
- завести отдельный
.mdили.docxв_docs/с описанием именно этих особенностей; - ссылаться на него из этого мануала в секции 12 или в корпоративной документации.
- завести отдельный
Вместе с этим мануалом в репозитории живут и другие важные документы. Ниже краткая «карта», на которую можно ссылаться в переписке и внутренних регламентах.
-
Основной обзор и быстрый старт:
- README репозитория в корне репозитория — краткое описание проекта и минимальные шаги установки.
-
Технический мануал:
- ExportIFC_manual.md — данный файл (расширенная инструкция в формате Markdown);
ExportIFC_manual_ru.docx(в этой же папке_docs) — Word-версия, удобная для печати и обучения.
-
IFC-конфиги:
IFC_Export_Config_example— пример структуры конфигов;- IFC_Export_Config_structure.md — подробное описание структуры конфигов IFC;
IFC_Export_Config_structure_notes_ru.docx
(файл../_examples/IFC_Export_Config_structure_notes_ru.docx) — заметки/шпаргалка по тем же темам в формате Word.
-
Настройка bat-скриптов и вспомогательных утилит:
- README по настройкам и bat-скриптам — обзор настроек ExportIFC,
settings.iniи структуры_settings; - README по bat-скриптам — отдельное описание bat-скриптов (установка
openpyxl, привязка pyRevit, запуск экспорта, офлайн-сценарии).
- README по настройкам и bat-скриптам — обзор настроек ExportIFC,
-
График запусков:
- Пример расписания запусков — примерный формат текстового файла с описанием расписания запусков ExportIFC; может служить основой для корпоративного регламента, по которому администратор настраивает Планировщик задач.
При обновлении ExportIFC или добавлении новых сценариев работы стоит:
- дополнять этот мануал (особенно разделы 2, 6, 7, 8, 10, 11);
- при необходимости расширять README и документацию в
_docsи_examples(в том числе их внутренние форки под ваши регламенты).
Набор возможных направлений развития ExportIFC:
-
Аналитика и отчётность.
- автоматическое формирование отчётов по статусу выгрузки (сколько моделей успешно выгружено, какие регулярно дают ошибки);
- интеграция с внутренними системами мониторинга.
-
Расширение форматов.
- добавление поддержки других экспортных форматов (при необходимости) на базе существующей архитектуры CPython + Revit/pyRevit.
-
Интеграция с CI/CD.
- запуск ExportIFC в составе более широких пайплайнов (например, связка с Navisworks, проверками коллизий и прочими автоматизированными проверками качества моделей).
-
Улучшение диагностики.
- более подробная классификация ошибок;
- интеграция с централизованными системами логирования.
При реализации таких улучшений важно:
- не ломать существующие «контракты» данных (
manage.xlsx,history.xlsx, структура конфигов IFC); - своевременно актуализировать документацию (в первую очередь этот мануал и README).
Этот мануал должен оставаться «истиной в последней инстанции» для администраторов и координаторов: при изменении поведения ExportIFC всегда полезно сначала обновить код и автотесты (если есть), а затем — соответствующий раздел документации.
