- library/электрика_блоки.dxf — 4 блока (СВ_ВСТР, СВ_БРА, РОЗ_2, ВЫКЛ_3) для вставки - symbols/ + preview/ — по файлу и картинке на символ - docs/примитивы-электрики.md — разбор по примитивам, атрибутам, слоям, порядок сборки через MCP, грабли - docs/условные-обозначения.md, conventions/*.json — легенда из эталона (правило: на лист не ставить) - docs/электрические-планы-ГОСТ.md — накопленные правила оформления - scripts/build_symbols_mcp.py (проверен на живом MCP 1.6.0-ours, 0 анонимных блоков), scripts/inspect_dxf.py - examples/plan_el_final.dxf/.pdf/.png — пример применения (14 вставок)
12 KiB
Что сделано с примитивами по электрике
Документ описывает, из чего и как собраны наши условные обозначения по электрике в AutoCAD: каждый символ разобран по примитивам, указаны атрибуты, слои, последовательность вызовов MCP-сервера и проверки. Дата работы: 01.10.2026, оформлено 05.10.2026.
1. Общая схема
Символ = блок AutoCAD, собранный из простых примитивов (CIRCLE, ARC, LINE),
с атрибутами (ATTDEF), которые несут маркировку. Такой блок:
- вставляется как единый объект (одна вставка
INSERT, а не набор линий); - несёт данные (марка, тип, высота, группа включения) — из них собирается ведомость;
- переиспользуется на всех планах, поэтому правка символа меняет все вставки.
Слои (по назначению):
| Слой | Что на нём |
|---|---|
СО_СВЕТИЛЬНИКИ |
символы освещения |
СО_ВЫКЛЮЧАТЕЛИ |
символы выключателей |
ЭО_РОЗЕТКИ |
символы розеток |
СО_ГРУППЫ |
подписи групп включения |
АР_ПОДЛОЖКА |
архитектурная подложка (стены, перегородки) |
ВЕДОМОСТЬ, РАЗМЕРЫ |
таблица и размеры |
00 БЛОКИ АННОТАЦИЙ |
подписи/выноски (стиль ОСНОВНОЙ, isocpeur) |
RAMKA, STAMPS |
рамка и основная надпись (форма 3) |
2. Разбор символов по примитивам
Все блоки имеют базовую точку (0,0). Размеры — в единицах чертежа (мм плана).
СВ_ВСТР — светильник встраиваемый (слой СО_СВЕТИЛЬНИКИ)
| Примитив | Параметры |
|---|---|
CIRCLE |
центр (0,0), R = 150 |
LINE |
(−106,−106) → (106,106) |
LINE |
(−106,106) → (106,−106) |
Атрибуты (ATTDEF):
| Тег | Подсказка | Позиция | Высота | Значение по умолчанию |
|---|---|---|---|---|
МАРКА |
Марка светильника | (−60, 200) | 120 | Т1 |
ТИП |
Тип по спецификации | (−300, −320) | 90 | встраиваемый |
ВЫСОТА |
Высота от пола, мм | (−120, −450) | 90 | 0 |
ГРУППА |
Группа включения | (−60, 350) | 90 | 1.1 |
СВ_БРА — бра (настенный светильник, слой СО_СВЕТИЛЬНИКИ)
| Примитив | Параметры |
|---|---|
ARC |
центр (0,0), R = 150, углы 0°…180° |
LINE |
(−150,0) → (150,0) |
LINE |
(0,0) → (0,−120) |
Атрибуты: МАРКА (−60, 220) h120 = Т10; ТИП (−300, −350) h90 = бра;
ВЫСОТА (−120, −480) h90 = 1800; ГРУППА (−60, 360) h90 = 1.1.
РОЗ_2 — розетка двойная с заземляющим контактом (слой ЭО_РОЗЕТКИ)
| Примитив | Параметры |
|---|---|
ARC |
центр (0,0), R = 150, углы 0°…180° |
LINE |
(−150,0) → (150,0) |
LINE |
(0,0) → (0,200) |
LINE |
(−60,200) → (60,200) |
Атрибуты (пять): МАРКА (−60, −250) h120 = S1; ТИП (−300, −380) h90 = розетка двойная с з/к;
ВЫСОТА (−120, −510) h90 = 300; НАЗНАЧ (−150, −640) h90 = общее;
ГРУППА (−60, 260) h90 = 1.1.
ВЫКЛ_3 — выключатель трёхклавишный (слой СО_ВЫКЛЮЧАТЕЛИ)
| Примитив | Параметры |
|---|---|
CIRCLE |
центр (0,0), R = 150 |
LINE |
(0,0) → (0,300) |
LINE |
(−100,300) → (100,300) |
Атрибуты: МАРКА (−60, −250) h120 = V1; ТИП (−300, −380) h90 = выключатель 3-клавишный;
ВЫСОТА (−120, −510) h90 = 900; ГРУППЫ (−200, −640) h90 = 1.1;1.2;1.3.
Замечание по подписям: атрибуты заданы столбцом под знаком (и группа — над знаком). Это осознанная схема «замаркировки» для плана 1💯 марка читается рядом со знаком, тип/высота/назначение — строкой ниже. Если для конкретного проекта нужна подпись в строчку или со стрелкой-выноской, координаты ATTDEF подстраиваются в блоке (правка блока меняет все вставки).
3. Порядок сборки через MCP-сервер (как это делалось)
Символы собраны не руками в AutoCAD, а командами MCP-сервера autocad-mcp-pro
(у нас: 10.26.5.108:30015 — рабочая сборка; :30041 — сборка 1.6.0 с нашим патчем).
Последовательность для каждого символа:
1. drawing_new — новый чертёж
2. layer_create name=<слой> — слой символа (CO_СВЕТИЛЬНИКИ / ЭО_РОЗЕТКИ / ...)
3. entity_create_circle / entity_create_arc / entity_create_line
— примитивы будущего знака (параметры из раздела 2)
4. block_create_from_entities
name=<БЛОК> handles=[...] base_x=0 base_y=0
— из примитивов делается ИМЕНОВАННЫЙ блок
5. entity_create_attdef block_name=<БЛОК> tag=МАРКА x=.. y=.. height=.. default=..
(по разу на каждый тег: МАРКА, ТИП, ВЫСОТА, [НАЗНАЧ], ГРУППА/ГРУППЫ)
6. block_insert name=<БЛОК> x=.. y=.. layer=<слой> attributes={"МАРКА":"Т1", "ТИП":"...", ...}
— вставки на плане, значения атрибутов подставляются
7. drawing_save_as / drawing_export_pdf — сохранение DXF/PDF
Готовый скрипт, повторяющий сборку: scripts/build_symbols_mcp.py (можно запускать на другом
чертеже/сервере, параметры символов вынесены в начало файла).
4. Проверки, которые выполнялись (и как повторить)
| Что проверяем | Команда MCP | Ожидаемый результат |
|---|---|---|
| Блоки именованные, а не анонимные | block_list {"compact": true} |
в списке СВ_ВСТР, СВ_БРА, РОЗ_2, ВЫКЛ_3, нет *U… |
| Атрибуты у блока есть | block_get_attdefs {"name": "<БЛОК>"} |
по 4–5 тегов на символ |
| Значения читаются обратно | block_get_attributes {"handle": <вставка>} |
{"МАРКА": "Т15", "ТИП": "светильник", …} |
| Вставки на плане | block_find_references {"name": "<БЛОК>"} |
14 вставок на плане-примере |
| Файл валиден в AutoCAD | открытие в accoreconsole (офисный ПК) |
rc=0, стиль ГОСТ A = isocpeur.ttf |
Локальная инвентаризация без AutoCAD: scripts/inspect_dxf.py (ezdxf).
5. Грабли (собраны на живых прогонах)
- **Анонимные блоки
*U. **Если собрать примитивы и не создать именованный блок,block_insertвставляет*U-блок: он не переиспользуется, не имеет атрибутов и не попадает в ведомость. Лечение: сначалаblock_create_from_entitiesс именем, только потом вставки. Проверятьblock_listна отсутствие*U. - ATTDEF до вставок. Если объявить атрибуты после вставок, старые вставки остаются без
атрибутов (
block_get_attributesвернёт{}). - Отдельный файл — только удалением. Когда нужно выделить из большого DXF один символ/зону,
нельзя собирать новый документ копированием:
MTEXTссылается на текстовый стиль, которого в новом файле нет, и AutoCAD отвечаетrc=53 «неправильный или неполный DXF». Правильно — открыть исходный файл и удалить лишнее (e.destroy()): таблицы стилей, слоёв и блоков остаются. Тот же приём спас при сборке этого репозитория: при удалении блока-стрелки_ARCHTICKразмерные стили ссылаются на несуществующий блок и файл не сохраняется — блоки с именами на_(стрелки и маркеры размеров) удалять нельзя. - PDF: формат листа. Раньше PDF «подгонялся» по содержимому и A3 превращался в 167×122 мм. В нашей сборке лист задаётся явно и проверяется медиабокс: A3 = 420×297 мм (допуск ±2).
- Текст в PDF. Для читаемого PDF нужен настоящий текстовый слой (инлайн-кодировка шрифта) — иначе в PDF остаются кривые и текст не ищется/не копируется.
- Легенду на лист не ставить. Прямое правило Павла: «условные обозначения» выносить
отдельным файлом (
docs/условные-обозначения.md), на листе не держать. - Штриховка/подложка. Архитектурная подложка — отдельный слой (
АР_ПОДЛОЖКА), её видимость регулируется, чтобы знаки читались.
6. Что можно улучшить (следующие шаги)
- Привести подписи к варианту «в строчку» со выноской, если так принято в проекте заказчика.
- Добавить растровые превью в сами DXF (эскиз блока) для палитры AutoCAD.
- Расширить набор: светильники (подвесной, бра, точечный), розетки (1/2/3-местные, IP), выключатели (1/2/3-клавишные, проходные), щиты, датчики — та же схема (примитивы + ATTDEF + слои).
- Собрать из этих блоков ведомость автоматически (по атрибутам
МАРКА/ТИП/ГРУППА).