|
|
||
|---|---|---|
| kj | ||
| ref | ||
| src | ||
| templates | ||
| translation | ||
| .gitignore | ||
| README.md | ||
| prompt_dxf_gen_SPD_1.md | ||
| prompts.txt | ||
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.mdref/element_reference.mdtranslation/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-таблица подключений.
Имя файла строится из номера документа и ревизии.
Шаблоны
Шаблон выбирается по:
- дисциплине;
- типу чертежа;
- месту.
Для СПД сейчас используются следующие группы:
principlepowerlayoutreplace
Проверка
Проверка без записи файлов:
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
Зависимости
Минимально используются:
ezdxfopenpyxlpython-docx
Для печати листов через AutoCAD или экспорта КЖ-документов в PDF через Word дополнительно нужен:
pywin32