Two.js предоставляет удобный механизм для экспорта визуальных сцен в формат SVG, что позволяет использовать созданные графические элементы вне браузера или интегрировать их в веб-страницы и документы. SVG (Scalable Vector Graphics) сохраняет информацию о векторных объектах, включая их координаты, цвета, трансформации и слои.
Для начала работы с экспортом необходимо убедиться, что экземпляр
Two.js создан с параметром type: Two.Types.svg, либо
использовать метод makeSVG для получения SVG-контекста
сцены.
const elem = document.getElementById('draw');
const two = new Two({ width: 800, height: 600, type: Two.Types.svg }).appendTo(elem);
const circle = two.makeCircle(200, 200, 50);
circle.fill = '#FF8000';
circle.stroke = '#000000';
circle.linewidth = 5;
two.update();
В этом примере создается сцена с кругом, который можно сразу экспортировать в SVG.
renderer.domElementПосле рендеринга сцены объект two.renderer.domElement
содержит SVG-документ, который можно получить как
строку. Это позволяет сохранить его в файл или вставить в HTML:
const svgString = two.renderer.domElement.outerHTML;
console.log(svgString);
SVG-строка будет содержать все элементы сцены с их атрибутами:
fill, stroke, stroke-width,
transform и др.
makeSVG()Если сцена создавалась в режиме canvas или
webgl, метод makeSVG() позволяет сгенерировать
SVG-реплику текущей сцены:
const svg = two.makeSVG();
document.body.appendChild(svg);
В результате создается полноценный <svg> элемент с
текущими объектами сцены, готовый для вставки в DOM.
Two.js корректно сохраняет группы объектов и их локальные трансформации. Например:
const group = two.makeGroup();
const rect = two.makeRectangle(0, 0, 100, 50);
const ellipse = two.makeEllipse(50, 50, 60, 30);
group.add(rect, ellipse);
group.translation.set(200, 200);
two.update();
const svgGroup = two.makeSVG();
document.body.appendChild(svgGroup);
SVG будет содержать <g> элемент с соответствующими
трансформациями, позволяя сохранять относительное расположение
объектов.
Каждому объекту сцены можно задать специфические атрибуты, которые будут отражены в SVG. Основные из них:
fill — цвет заливкиstroke — цвет контураlinewidth — толщина линииopacity — прозрачностьvisible — видимость элементаДополнительно можно использовать пользовательские атрибуты через
renderer.domElement.setAttribute().
circle.opacity = 0.5;
circle.visible = true;
two.update();
const svgElement = two.renderer.domElement;
svgElement.setAttribute('data-custom', 'example');
Для сохранения в файл в браузере используется комбинация Blob и
ссылки <a>:
const svgBlob = new Blob([two.renderer.domElement.outerHTML], { type: 'image/svg+xml;charset=utf-8' });
const url = URL.createObjectURL(svgBlob);
const downloadLink = document.createElement('a');
downloadLink.href = url;
downloadLink.download = 'scene.svg';
document.body.appendChild(downloadLink);
downloadLink.click();
document.body.removeChild(downloadLink);
URL.revokeObjectURL(url);
Этот подход гарантирует корректное сохранение SVG с сохранением всех свойств сцены.
При изменении объектов сцены экспорт можно выполнять после каждого обновления, что позволяет формировать анимированные последовательности в виде отдельных SVG-файлов:
circle.rotation += 0.05;
two.update();
const svgFrame = two.renderer.domElement.outerHTML;
// svgFrame можно сохранять для последовательной анимации
Two.Text. Шрифты и стили задаются через атрибуты
font-family, font-size и
text-anchor.Two.Types.svg.makeSVG() после two.update().Такой подход обеспечивает точный экспорт любой сцены Two.js в формат SVG с сохранением всех ключевых параметров объектов и их взаимного расположения.