# SVG Редактор — Полный функционал **URL:** https://images.wadevelop.ru/svgeditor **Файл:** /mnt/webdata/www/images.wadevelop.ru/public/svgeditor.html (2099 строк) **API:** server.js — 3 эндпоинта --- ## Интерфейс (как фоторедактор /editor) - **Тулбар** (44px) — горизонтальная панель инструментов сверху - **Панель опций** (36px) — контекстная, показывает настройки активного инструмента - **Вкладки** (30px) — несколько документов одновременно - **Viewport** — тёмный фон (#2c2c30), белый SVG-холст по центру - **Статус-бар** (28px) — размер холста, зум, координаты, кол-во элементов - **Сайдбар** (56px) — навигация по сервисам (как во всех страницах) --- ## Инструменты рисования | Инструмент | Клавиша | Описание | |------------|---------|----------| | Выделение | V | Клик для выделения, drag для перемещения | | Прямоугольник | R | Shift — квадрат | | Эллипс | O | Shift — круг | | Линия | L | Shift — snap к 45° | | Перо | P | Клик по точкам, замыкание на первую точку (красный кружок), двойной клик — открытый путь | | Текст | T | Клик → ввод текста, двойной клик — редактирование | ### После рисования: - Автопереключение на Выделение (V) - Элемент сразу выделен с хэндлами - Панель свойств открывается автоматически --- ## Выделение и трансформация - **Клик** на элемент → выделение + 8 хэндлов (для rect/ellipse/text/group) - **Клик** на линию → 2 хэндла на концах - **Drag за хэндл** → ресайз (для всех типов, включая группы и AI иконки) - **Drag за тело** → перемещение - **Стрелки** ←↑→↓ — перемещение на 1px, Shift+стрелки — на 10px - **Маркиз** — клик на пустое место + drag → пунктирная рамка, выделяет верхний элемент в области - **Proximity selection** — тонкие элементы (линии, outline иконки) ловятся в радиусе 12px - **Уже выделенный элемент** — повторный клик внутри его bounds не сбрасывает выделение - Хэндлы прячутся при `elementFromPoint` чтобы не блокировать клик --- ## Панель опций (контекстная) ### При рисовании (rect/circle/line/path): - Заливка — цвет + вкл/выкл (✓/✗) - Непрозрачность — слайдер 0-100% - Обводка — цвет + вкл/выкл - Толщина обводки — число ### При выделении элемента: - Те же контролы с текущими значениями элемента - Изменения применяются сразу ### При инструменте Текст: - Размер шрифта - Цвет --- ## Панель свойств (правая, автопоказ) - Позиция: X, Y (CX, CY для эллипса, X1/Y1 для линии) - Размер: W, H (RX, RY для эллипса) - Стиль: Fill (цвет), Stroke (цвет), Stroke-width, Opacity - Текст: Font-size - Появляется автоматически при выделении - Скрывается при снятии выделения - Кнопка × для закрытия --- ## Система слоёв - **Слой 1** создаётся автоматически (каждый слой = ``) - Все новые объекты создаются на **активном слое** - Кнопка **«+ Новый слой»** внизу панели - **Активный слой** подсвечен синим с полоской слева - Клик по слою → делает его активным - Каждый слой: видимость (👁), удаление (×) - Объекты внутри слоя: клик для выделения, × для удаления - Группы отмечены 📁 с количеством детей - Минимум 1 слой (нельзя удалить последний) - Очистка холста пересоздаёт Слой 1 --- ## Группировка | Действие | Клавиша | Описание | |----------|---------|----------| | Группировать | Ctrl+G | Все объекты активного слоя → `` | | Разгруппировать | Ctrl+Shift+G | Выделенная группа → отдельные элементы в слой | - Слои (`data-layer`) защищены от разгруппировки - Группа двигается/масштабируется как единый объект - В панели слоёв группа показана как 📁 --- ## Контекстное меню (правая кнопка) - Копировать (Ctrl+C) - Вырезать (Ctrl+X) - Вставить (Ctrl+V) - Дублировать (Ctrl+D) - Удалить (Del) - На передний план - На задний план - Группировать (Ctrl+G) - Разгруппировать (Ctrl+Shift+G) Пункты автоматически деактивируются когда неприменимы. --- ## Вкладки - **Новый** — первая вкладка по умолчанию - **+** — новая вкладка (Ctrl+T) - **×** — закрыть вкладку (минимум 1) - Каждая вкладка сохраняет: SVG-содержимое, размер холста, историю undo/redo --- ## Импорт / Экспорт | Действие | Клавиша | Формат | |----------|---------|--------| | Импорт SVG | Ctrl+O | .svg файл | | Экспорт SVG | Ctrl+S | .svg с CSS-классами (st0, st1...) | | Экспорт PNG | — | .png 800×600 (или текущий размер холста) | | Оптимизировать | — | Очистка через /api/svg-optimize | | Drag & Drop | — | Перетаскивание .svg файла на холст | ### Экспорт SVG: - Inline-атрибуты → CSS-классы в `