Files
cad-electro-symbols/docs/примитивы-электрики.md
anatoly 14f82e550d Условные обозначения по электрике: библиотека блоков + описание примитивов
- 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 вставок)
2026-10-05 18:51:32 +03:00

12 KiB
Raw Permalink Blame History

Что сделано с примитивами по электрике

Документ описывает, из чего и как собраны наши условные обозначения по электрике в 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. Грабли (собраны на живых прогонах)

  1. **Анонимные блоки *U. **Если собрать примитивы и не создать именованный блок, block_insert вставляет *U-блок: он не переиспользуется, не имеет атрибутов и не попадает в ведомость. Лечение: сначала block_create_from_entities с именем, только потом вставки. Проверять block_list на отсутствие *U.
  2. ATTDEF до вставок. Если объявить атрибуты после вставок, старые вставки остаются без атрибутов (block_get_attributes вернёт {}).
  3. Отдельный файл — только удалением. Когда нужно выделить из большого DXF один символ/зону, нельзя собирать новый документ копированием: MTEXT ссылается на текстовый стиль, которого в новом файле нет, и AutoCAD отвечает rc=53 «неправильный или неполный DXF». Правильно — открыть исходный файл и удалить лишнее (e.destroy()): таблицы стилей, слоёв и блоков остаются. Тот же приём спас при сборке этого репозитория: при удалении блока-стрелки _ARCHTICK размерные стили ссылаются на несуществующий блок и файл не сохраняется — блоки с именами на _ (стрелки и маркеры размеров) удалять нельзя.
  4. PDF: формат листа. Раньше PDF «подгонялся» по содержимому и A3 превращался в 167×122 мм. В нашей сборке лист задаётся явно и проверяется медиабокс: A3 = 420×297 мм (допуск ±2).
  5. Текст в PDF. Для читаемого PDF нужен настоящий текстовый слой (инлайн-кодировка шрифта) — иначе в PDF остаются кривые и текст не ищется/не копируется.
  6. Легенду на лист не ставить. Прямое правило Павла: «условные обозначения» выносить отдельным файлом (docs/условные-обозначения.md), на листе не держать.
  7. Штриховка/подложка. Архитектурная подложка — отдельный слой (АР_ПОДЛОЖКА), её видимость регулируется, чтобы знаки читались.

6. Что можно улучшить (следующие шаги)

  • Привести подписи к варианту «в строчку» со выноской, если так принято в проекте заказчика.
  • Добавить растровые превью в сами DXF (эскиз блока) для палитры AutoCAD.
  • Расширить набор: светильники (подвесной, бра, точечный), розетки (1/2/3-местные, IP), выключатели (1/2/3-клавишные, проходные), щиты, датчики — та же схема (примитивы + ATTDEF + слои).
  • Собрать из этих блоков ведомость автоматически (по атрибутам МАРКА/ТИП/ГРУППА).