Для работы с SVG в Two.js требуется создать экземпляр библиотеки и
связать его с HTML-элементом, обычно с <div> или
<canvas>. Основной объект Two.js управляет всеми
фигурами и сценой. Инициализация выглядит следующим образом:
const elem = document.getElementById('drawing');
const two = new Two({ width: 800, height: 600 }).appendTo(elem);
Здесь width и height задают размеры холста,
а метод appendTo добавляет рендеринг на страницу. После
этого можно приступать к парсингу SVG.
Two.js поддерживает импорт SVG через метод
Two.Utils.getSVG. Этот метод получает SVG как строку или
URL и преобразует её в объекты Two.js:
Two.Utils.getSVG('icon.svg', function(svg) {
const shape = two.interpret(svg);
two.add(shape);
two.update();
});
getSVG — загружает SVG по URL.interpret — превращает DOM-элемент SVG
в фигуры Two.js.add — добавляет фигуру на сцену.update — обновляет рендеринг для
отображения новых объектов.Метод interpret автоматически распознаёт элементы
<path>, <circle>,
<rect>, <polygon> и преобразует их
в соответствующие объекты Two.js, такие как Two.Path,
Two.Circle, Two.Rectangle и
Two.Polygon.
После парсинга SVG каждый элемент становится объектом Two.js. Это позволяет изменять свойства фигуры:
shape.children.forEach(child => {
child.fill = '#3498db';
child.stroke = '#2c3e50';
child.linewidth = 2;
});
two.update();
fill — цвет заливки.stroke — цвет контура.linewidth — толщина линии.При работе с SVG важно учитывать иерархию: элементы могут быть
сгруппированы через <g>. В Two.js это соответствует
Two.Group, и доступ к дочерним элементам осуществляется
через group.children.
Two.js позволяет анимировать любые фигуры, включая импортированные из SVG:
two.bind('upd ate', function(frameCount) {
shape.rotation += 0.01;
}).play();
Метод bind привязывает функцию к циклу обновления
Two.js. Для SVG важно помнить, что rotation,
translation и scale применяются к объектам
Two.js, а не напрямую к исходному DOM-элементу.
SVG часто содержит сложные <path> с кривыми Безье
и линиями. Two.js интерпретирует их как Two.Path с массивом
вершин (vertices). Каждая вершина имеет координаты
x, y и кривизну через controlX,
controlY:
const path = shape.children[0]; // допустим, это Two.Path
path.vertices.forEach(v => {
v.x += 5; // смещаем вершину
v.y += 5;
});
two.update();
Эта возможность позволяет создавать динамическое изменение формы SVG и применять эффекты морфинга.
После парсинга можно применять комплексные стили и трансформации:
shape.translation.se t(x, y)shape.scale = 1.5shape.rotation = Math.PI / 4const group = two.makeGroup(shape1, shape2)Two.js автоматически учитывает все трансформации при рендеринге, что позволяет создавать сложные сцены из импортированных SVG.
При работе с большими SVG-файлами важно учитывать производительность:
SVG можно передавать не только через URL, но и через строку:
const svgString = '<svg><rect x="0" y="0" width="100" height="50" /></svg>';
const domParser = new DOMParser();
const svgDoc = domParser.parseFromString(svgString, 'image/svg+xml');
const shape = two.interpret(svgDoc.documentElement);
two.add(shape);
two.update();
Это удобно для генерации динамических графических элементов без загрузки внешних файлов.
Импортированный SVG интегрируется в сцену так же, как любые фигуры Two.js, что позволяет:
Two.Circle,
Two.Line и другими фигурами.Two.Utils.getSVG или строку
SVG.interpret.add.Такой подход позволяет легко интегрировать сложные графические элементы SVG в динамические и интерактивные сцены на основе Two.js.