Files

45 lines
4.3 KiB
Python

"""Генерирует базовый набор иконок оборудования (SVG) в app/static/icons. Запуск: python tools/make_icons.py"""
from pathlib import Path
OUT = Path(__file__).resolve().parent.parent / "app" / "static" / "icons"
S = 'fill="none" stroke="#fff" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"'
F = 'fill="#fff"'
ICONS = {
# имя: (цвет фона, содержимое)
"pump": ("#2563eb", f'<circle cx="28" cy="34" r="12" {S}/><path d="M28 34l7-7M40 34h14M8 34h8M28 22V12h14" {S}/><rect x="14" y="46" width="28" height="6" rx="2" {F}/>'),
"motor": ("#0f766e", f'<rect x="12" y="20" width="32" height="24" rx="4" {S}/><path d="M44 32h10M18 20v24M24 20v24M30 20v24M36 20v24M16 50h24" {S}/>'),
"compressor": ("#7c3aed", f'<rect x="10" y="30" width="36" height="18" rx="9" {S}/><path d="M22 30V18h12v12M18 18h20M50 39h6M14 54h4M38 54h4" {S}/><circle cx="28" cy="13" r="3" {F}/>'),
"conveyor": ("#b45309", f'<rect x="8" y="30" width="48" height="12" rx="6" {S}/><circle cx="14" cy="36" r="2.5" {F}/><circle cx="32" cy="36" r="2.5" {F}/><circle cx="50" cy="36" r="2.5" {F}/><rect x="18" y="18" width="10" height="10" rx="1" {F}/><rect x="34" y="20" width="8" height="8" rx="1" {F}/><path d="M16 42l-4 12M48 42l4 12" {S}/>'),
"boiler": ("#c2410c", f'<rect x="18" y="10" width="28" height="44" rx="6" {S}/><path d="M32 46c-5 0-7-4-5-8 1 3 3 3 3 0s2-6 4-7c-1 4 5 6 3 11-1 2-3 4-5 4z" {F}/><path d="M24 18h16" {S}/>'),
"fan": ("#0284c7", f'<circle cx="32" cy="32" r="22" {S}/><circle cx="32" cy="32" r="4" {F}/><path d="M32 28c-2-8 2-14 8-12-1 6-4 9-8 12zM36 33c8-1 12 4 9 9-5-2-8-5-9-9zM29 35c-4 7-11 8-12 2 5-3 8-3 12-2z" {F}/>'),
"crane": ("#ca8a04", f'<path d="M14 56V12l36 6M14 18l36 0M20 12l-6 8M50 18v14" {S}/><path d="M46 32h8l-2 6h-4z" {F}/><path d="M8 56h16" {S}/>'),
"press": ("#475569", f'<path d="M14 10h36v8H14zM20 18v20M44 18v20M10 54h44M18 48h28v6H18z" {S}/><rect x="24" y="28" width="16" height="10" rx="1" {F}/>'),
"tank": ("#15803d", f'<path d="M16 16c0-4 32-4 32 0v32c0 4-32 4-32 0z" {S}/><path d="M16 16c0 4 32 4 32 0M16 32c0 4 32 4 32 0M22 54v4M42 54v4" {S}/>'),
"valve": ("#be123c", f'<path d="M8 28v16l24-8zM56 28v16l-24-8zM32 36V18M24 14h16" {S}/><circle cx="32" cy="36" r="3" {F}/>'),
"generator": ("#d97706", f'<rect x="8" y="20" width="48" height="28" rx="4" {S}/><path d="M34 24l-8 12h8l-4 10 10-14h-8l4-8z" {F}/><path d="M14 48v6M50 48v6" {S}/>'),
"transformer": ("#9333ea", f'<rect x="14" y="18" width="36" height="34" rx="3" {S}/><path d="M22 18v-8M32 18v-8M42 18v-8M20 28h24M20 36h24M20 44h24" {S}/>'),
"lathe": ("#334155", f'<path d="M8 44h48M12 44v10M52 44v10M12 24h12v20H12zM44 30h8v14h-8zM24 34h20" {S}/><circle cx="18" cy="34" r="3" {F}/>'),
"forklift": ("#ea580c", f'<path d="M10 48V22h18l6 14v12M34 36h4M44 12v40h12M38 22h6" {S}/><circle cx="16" cy="50" r="5" {S}/><circle cx="32" cy="50" r="5" {S}/>'),
"panel": ("#1d4ed8", f'<rect x="14" y="8" width="36" height="48" rx="3" {S}/><path d="M36 20l-7 11h6l-4 10 9-13h-6l4-8z" {F}/><circle cx="44" cy="48" r="2" {F}/>'),
"hvac": ("#0891b2", f'<rect x="8" y="16" width="48" height="20" rx="4" {S}/><path d="M14 30h36M20 42c0 4-4 4-4 8M32 42c0 4-4 4-4 8M44 42c0 4-4 4-4 8" {S}/>'),
"mixer": ("#4d7c0f", f'<path d="M14 24h36l-4 30H18zM32 8v38M24 44h16M10 24h44" {S}/><path d="M26 40l12-4" {S}/>'),
"furnace": ("#b91c1c", f'<path d="M12 56V20l20-10 20 10v36zM22 56V38h20v18" {S}/><path d="M32 54c-4 0-6-3-4-7 1 2 2 2 2 0s2-5 3-5c0 3 4 5 3 8-1 3-2 4-4 4z" {F}/>'),
"gear": ("#57534e", f'<path d="M32 12l4 6 7-2 1 7 7 2-3 7 5 5-6 4 1 7-7 1-2 7-7-3-5 5-4-6-7 1-1-7-7-2 3-7-5-5 6-4-1-7 7-1 2-7 7 3z" {S}/><circle cx="32" cy="34" r="7" {S}/>'),
"robot": ("#0369a1", f'<path d="M10 54h20M20 54V42l12-14 14 8M46 36l6-8M46 36l8 4" {S}/><circle cx="20" cy="42" r="3" {F}/><circle cx="32" cy="28" r="3" {F}/>'),
}
def main():
OUT.mkdir(parents=True, exist_ok=True)
for name, (bg, body) in ICONS.items():
svg = (f'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64" width="64" height="64">'
f'<rect width="64" height="64" rx="14" fill="{bg}"/>{body}</svg>\n')
(OUT / f"{name}.svg").write_text(svg, encoding="utf-8")
print(f"{len(ICONS)} иконок -> {OUT}")
if __name__ == "__main__":
main()