- 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 вставок)
157 lines
12 KiB
Markdown
157 lines
12 KiB
Markdown
# Что сделано с примитивами по электрике
|
||
|
||
Документ описывает, **из чего и как собраны** наши условные обозначения по электрике в 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 + слои).
|
||
- Собрать из этих блоков ведомость автоматически (по атрибутам `МАРКА`/`ТИП`/`ГРУППА`).
|