При работе с векторной графикой в Paper.js формат SVG является одним из ключевых источников для импорта и экспорта объектов. Однако важно понимать ограничения и особенности, которые влияют на корректность отображения и манипуляции с SVG в Paper.js.
Paper.js поддерживает только подмножество стандартных SVG-элементов. Наиболее часто используемые элементы включают:
<path> – основной элемент для кривых и сложных
форм.<circle>, <ellipse> – простые
геометрические фигуры.<rect> – прямоугольники, включая скругленные углы
через атрибут rx и ry.<line> – простые линии между двумя точками.<polygon> и <polyline> –
многоугольники и ломаные линии.<g> – группы элементов, поддерживающие
иерархическую структуру.Элементы, которые Paper.js не поддерживает напрямую, включают:
<text> – текстовые элементы SVG не конвертируются
в объекты Paper.js; требуется отдельная обработка через
PointText.<use> – повторяющиеся символы и ссылки на другие
элементы SVG игнорируются.<symbol> и <defs> –
определения символов и градиентов поддерживаются частично, чаще всего
через ручное преобразование.<clipPath> и маски – ограниченная поддержка,
часто требуется ручная корректировка.Paper.js частично поддерживает атрибуты стилей SVG:
fill, stroke,
stroke-width, opacity.stroke-dasharray,
stroke-linecap, stroke-linejoin.Особенности:
transform (масштаб, поворот, сдвиг) применяется
корректно для <path> и <g>.transform внутри вложенных
<g> могут давать неожиданный эффект при
импортировании.rgba() поддерживаются, но прозрачность
на уровне групп иногда игнорируется.<g> сохраняются, но
сложные вложенные трансформации могут быть упрощены.<layer> в
SVG, поэтому визуальный порядок может отличаться.A или arc) преобразуются в кривые,
что может слегка изменить исходную геометрию.M, L,
C, Q, Z обрабатываются, но
повторяющиеся команды или сокращенные записи (H,
V, S, T) могут быть преобразованы
в стандартные C/L.project.exportSVG()
создаёт <g> с дочерними <path>
элементами, но не сохраняет слои Paper.js, кроме
структуры объектов.blendMode и
shadow, не конвертируются в SVG.<animate>,
<animateTransform>) не поддерживаются Paper.js.onFrame и
манипуляцию свойствами объектов, что не совместимо с SVG-анимацией.onMouseDown,
onMouseDrag) не экспортируется в SVG.Эти ограничения делают работу с SVG в Paper.js достаточно гибкой для большинства стандартных задач, но требуют внимательного подхода при импорте и экспорте сложных векторных иллюстраций.