Go to file
Ilgiz Kalmetyev 0d8d92439f Добавлен экстрастор блоков 2026-08-21 23:41:15 +05:00
kj В заземление добавлены новые линии и обновлён скрипт 2026-08-20 15:33:39 +05:00
ref Обновлены MDR, скрипты и данные КЖ 2026-08-19 16:30:59 +05:00
src Добавлен экстрастор блоков 2026-08-21 23:41:15 +05:00
templates Добавлен экстрастор блоков 2026-08-21 23:41:15 +05:00
translation Упрощение dxfgen. Теперь в toml не нужна указывать два раза один объект для разных этапов 2026-08-21 14:12:21 +05:00
.gitignore Обновление gitignore 2026-08-13 15:38:41 +05:00
README.md Добавлен экстрастор блоков 2026-08-21 23:41:15 +05:00
prompt_dxf_gen_SPD_1.md Обновлён шаблон заземления шкафа операторской cross32-32 2026-08-03 23:39:58 +05:00
prompts.txt Initial commit 2026-07-31 16:29:04 +05:00

README.md

dxf-gen

Универсальный генератор DXF-чертежей по дисциплинам, типам чертежей и местам.

Что делает

Генератор:

  • выбирает шаблон DXF по discipline и chart-type;
  • подставляет значения из translation/ и справочных файлов;
  • обновляет основную надпись;
  • применяет замены в TEXT, MTEXT, ATTRIB и ACAD_TABLE;
  • строит marks.md;
  • при необходимости строит таблицу подключений;
  • печатает листы в PDF через AutoCAD.

Точка входа

Основной скрипт:

python src/dxfgen.py --discipline СПД --chart-type principle --places NKD4 VKD4 RTP3

Совместимый legacy-обёртка:

python src/generate_spd_from_refs.py

Генерация справочников

Из ref/MDR.xlsx генерируются как минимум два справочника для других инструментов:

python src/extract_mdr_reference.py --mdr ref/MDR.xlsx --output ref/mdr_reference.md
python src/extract_element_reference.py --mdr ref/MDR.xlsx --translation-root translation --output ref/element_reference.md

ref/mdr_reference.md берется только из MDR.xlsx, а ref/element_reference.md еще читает переводы из translation/.

Титульные листы

Для титульных листов используется лист ВОКРЧ из ref/MDR.xlsx, шаблон templates/Шаблон Титул_v02.docx и справочник translation/titul/titul.toml.

python src/generate_titul_translation.py --mdr ref/MDR.xlsx --translation translation/titul/titul.toml
python src/process_titul_docs.py --template templates/Шаблон Титул_v02.docx --output-root output/titul

Генерация сохраняет DOCX в подкаталоги по значению колонки Дисциплина, а имя файла строится из Обозначение с заменой / на _ и суффиксом _titul.

Параметры CLI

Обязательные параметры:

  • --chart-type - тип чертежа, например principle, power, layout, replace

Необязательные параметры:

  • --discipline - дисциплина, например СПД. Можно перечислить несколько через запятую: СПД,КСБ. Если ключ не указан, обрабатываются все дисциплины из translation/catalog.toml, поддерживающие заданный --chart-type
  • --places - одно или несколько мест, например NKD4 VKD4 RTP3. Если не указано, обрабатываются все места из файла трансляции

Полезные дополнительные параметры:

  • --translation-root - корень каталога translation/
  • --element-reference - путь к ref/element_reference.md
  • --mdr-reference / --mdr - путь к ref/mdr_reference.md
  • --rename-table - таблица переименований
  • --structure-reference - JSON со структурной схемой
  • --templates-root - каталог с DXF-шаблонами
  • --output-root - корневой каталог результатов
  • --dry-run - показать план генерации без записи файлов

Примеры:

python src/dxfgen.py --discipline СПД --chart-type principle --places NKD4 --dry-run
python src/dxfgen.py --discipline СПД --chart-type principle --places NKD4 VKD4 RTP3
python src/dxfgen.py --discipline СПД --chart-type power --places RTP3 --dry-run
python src/dxfgen.py --chart-type layout --places NKD4
python src/dxfgen.py --discipline СПД,КСБ --chart-type power --places RTP3

Формат трансляций

Трансляции вынесены из ref/element_reference.md в translation/.

Структура:

  • translation/catalog.toml - каталог дисциплин и типов чертежей
  • translation/spd/principle.toml - принципиальные схемы
  • translation/spd/power.toml - схемы электропитания и заземления
  • translation/spd/layout.toml - схемы компоновки
  • translation/spd/replace.toml - универсальные документы с простыми заменами (например, «Схема компоновки устройства ввода электропитания»)

Внутри файлов используется вертикальный формат:

  • одна запись на place;
  • отдельное поле template;
  • все подстановки лежат в values;
  • повторяющиеся группы параметров задаются массивами и разворачиваются через group_mappings.

Такой формат удобнее широких Markdown-таблиц, когда у шаблона 5-30 параметров подстановки.

Тип replace

Тип replace предназначен для документов, которые не зависят от места и генерируются по названию документа из MDR (для всех этапов, где он есть). В файле трансляции задаётся replace_mode = true, а в [[drawings]] указывается document_name — точное название документа из MDR:

Особенности:

  • place — простой код для фильтрации --places;
  • document_name — название документа для поиска в MDR (генерируются все этапы);
  • template — шаблон;
  • title_block — заполнение основной надписи (STR1/STR2/STR3);
  • [drawings.values] — произвольные замены текста в шаблоне (поддерживаются варианты {{ KEY }}, {{KEY}}, \{{ KEY \}}, \{{KEY\}});
  • STAGE_TITUL — если пуст или * — документ генерируется для всех этапов из MDR с подстановкой кода этапа; если задан конкретный код — обрабатывается только этот этап;
  • генерируются только DXF и PDF.

Пример translation/spd/replace.toml:

discipline = "СПД"
chart_type = "replace"
replace_mode = true
title_block = { STR1 = "", ST = "Р", SH = "1", SHS = "1" }

[[drawings]]
place = "powerin"
document_name = "Схема компоновки устройства ввода электропитания"
template = "Шаблон Схема компоновки устройства ввода электропитания СПД r13.dxf"

[drawings.values]
STAGE_TITUL = "*"

Логика STAGE_TITUL

Логика STAGE_TITUL работает для всех типов чертежей (principle, power, layout, replace):

  • STAGE_TITUL = "*" (или не указан) → для места/документа генерируются все записи из MDR (все этапы); в каждом файле {{STAGE_TITUL}} заменяется на код этапа;
  • STAGE_TITUL = "110900" → обрабатывается только документ этого этапа.

Библиотека блоков

Чтобы не дублировать блоки в каждом templates/*.dxf, можно держать их в отдельных библиотечных DXF. Практическая схема такая:

templates/
  library/
    common.dxf
    spd/
      principle.dxf
      power.dxf
      layout.dxf
  *.dxf
  archive/

Утилита src/sync_dxf_block_library.py умеет:

  • собрать библиотеку из текущих шаблонов;
  • синхронизировать определения блоков из библиотеки обратно в шаблоны;
  • пропускать archive/ и саму библиотеку.
  • ограничивать обработку через --include и --exclude.

Примеры:

python src/sync_dxf_block_library.py extract --library templates/library/spd/principle.dxf --include "Шаблон Схема соединений принципиальная СПД*.dxf"
python src/sync_dxf_block_library.py sync --library templates/library/spd/principle.dxf --include "Шаблон Схема соединений принципиальная СПД*.dxf"

Если один и тот же block name в разных шаблонах отличается по геометрии, его нужно вынести в отдельную библиотеку или переименовать. Одна глобальная библиотека подходит только для реально идентичных блоков.

Источники данных

Основные входные данные:

  • ref/mdr_reference.md
  • ref/element_reference.md
  • translation/
  • templates/
  • output/spd_r7_structure_reference.json
  • Таблица переименований.xlsx

ref/mdr_reference.md

Содержит справочник документов и служебные таблицы, которые используются для:

  • выбора документа по месту и типу чертежа;
  • заполнения основной надписи;
  • поиска связанного титула;
  • построения выходного имени файла.

ref/element_reference.md

Используется как справочник трансляций:

  • place -> template;
  • place -> cabinet / title / room;
  • optical_line -> adjacent_crosses / fiber_count;
  • дополнительные связи для принципиальных схем.

Таблица переименований.xlsx

Используется для массовой замены текстов в:

  • пространстве модели;
  • листах;
  • блоках;
  • ACAD_TABLE.

output/spd_r7_structure_reference.json

Используется для уточнения обозначений на схеме соединений.

Выходные файлы

Генерация создаёт структуру вида:

output/СПД/<папка по номеру документа>/

Для каждого документа создаются:

  • DXF-файл;
  • PDF-файлы листов;
  • Markdown-файл с обозначениями;
  • при наличии данных - Excel-таблица подключений.

Имя файла строится из номера документа и ревизии.

Шаблоны

Шаблон выбирается по:

  • дисциплине;
  • типу чертежа;
  • месту.

Для СПД сейчас используются следующие группы:

  • principle
  • power
  • layout
  • replace

Проверка

Проверка без записи файлов:

python src/dxfgen.py --discipline СПД --chart-type principle --places NKD4 --dry-run

Проверка синтаксиса Python:

python -m py_compile src\dxfgen.py src\generate_spd_dxfs.py src\generate_spd_from_refs.py

Инкрементальная генерация (--update)

Скрипт src/dxfgen_update.py (или флаг --update у src/dxfgen.py) генерирует только устаревшие документы:

  • сравнивает дату и наличие выходных файлов с файлом шаблона и файлами настроек (catalog.toml, файлом трансляции дисциплины);
  • если DXF отсутствует или старше шаблона/файлов настроек — перегенерирует документ целиком (DXF + marks + PDF);
  • если DXF актуален, но _marks.md, таблица подключений или PDF отсутствуют/старше шаблона/DXF — пересобирает только устаревшие файлы из существующего DXF;
  • если всё актуально — пропускает документ.

Проверка DXF, PDF и _marks.md выполняется отдельно, поэтому достаточно удалить или изменить один PDF, чтобы перепечатался только он.

python src/dxfgen_update.py --discipline СПД --chart-type power --places RTP3

Просмотр плана без генерации:

python src/dxfgen_update.py --discipline СПД --chart-type power --places RTP3 --dry-run

Зависимости

Минимально используются:

  • ezdxf
  • openpyxl
  • python-docx

Для печати листов через AutoCAD или экспорта КЖ-документов в PDF через Word дополнительно нужен:

  • pywin32