Files
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

47 lines
1.7 KiB
Python

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""Инвентаризация DXF: блоки, атрибуты, слои, вставки. Без AutoCAD (ezdxf).
python3 inspect_dxf.py library/электрика_блоки.dxf
python3 inspect_dxf.py examples/plan_el_final.dxf
"""
import sys
import ezdxf
def inspect(path: str) -> None:
doc = ezdxf.readfile(path)
print(f"=== {path}")
print(f" версия DXF: {doc.dxfversion}")
print(f" слои ({len(doc.layers)}): {[l.dxf.name for l in doc.layers]}")
blocks = [b for b in doc.blocks if not b.name.startswith(("*Model", "*Paper"))]
print(f" блоков: {len(blocks)}")
for b in blocks:
kinds = {}
attdefs = []
for e in b:
kinds[e.dxftype()] = kinds.get(e.dxftype(), 0) + 1
if e.dxftype() == "ATTDEF":
attdefs.append(e.dxf.tag)
marker = " (служебный: стрелка/маркер размера)" if b.name.startswith("_") else ""
print(f" {b.name:<12} {kinds}{' атрибуты: ' + str(attdefs) if attdefs else ''}{marker}")
ins_model = [e for e in doc.modelspace() if e.dxftype() == "INSERT"]
print(f" вставок в модели: {len(ins_model)}")
for lay in doc.layouts:
if lay.name == "Model":
continue
n = sum(1 for e in lay if e.dxftype() == "INSERT")
if n:
print(f" вставок на листе «{lay.name}»: {n}")
bad = [b.name for b in blocks if b.name.startswith("*U")]
print(f" анонимных блоков *U: {len(bad)} {bad if bad else ''}")
if __name__ == "__main__":
if len(sys.argv) < 2:
print(__doc__)
sys.exit(1)
for p in sys.argv[1:]:
inspect(p)