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

157 lines
12 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Что сделано с примитивами по электрике
Документ описывает, **из чего и как собраны** наши условные обозначения по электрике в 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:100: марка читается рядом со знаком,
> тип/высота/назначение — строкой ниже. Если для конкретного проекта нужна подпись в строчку
> или со стрелкой-выноской, координаты 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 + слои).
- Собрать из этих блоков ведомость автоматически (по атрибутам `МАРКА`/`ТИП`/`ГРУППА`).