Processing:Библиотеки/SVG Export

Материал из Онлайн справочника
Перейти к навигацииПерейти к поиску


Перевод: Максим Кузьмин
Проверка/Оформление/Редактирование: Мякишев Е.А.


SVG Export[1]

Библиотека SVG дает возможность сохранять SVG-файлы прямо из Processing. Это файлы с векторной графикой, которую можно масштабировать до любого размера, благодаря чему они хорошо подходят для изображений с высоким разрешением. Библиотека SVG умеет «сплющивать» 3D-данные в векторную 2D-графику, но для экспорта 3D-данных используйте библиотеку DXF. Исходный код библиотеки можно скачать на GitHub-репозитории Processing. О найденных багах сообщайте сюда.

Экспорт SVG-файла (без использования дисплейного окна)

Этот скетч-пример рисует в SVG-файл один кадр, а затем завершается. Обратите внимание, что дисплейное окно в процессе не откроется – это полезно при создании больших SVG-изображений, которые гораздо больше размера экрана.

import processing.svg.*;

void setup() {
  size(400, 400, SVG, "filename.svg");
}

void draw() {
  // рисуем тут что-нибудь интересное:
  line(0, 0, width/2, height);

  // выходим из программы:
  println("Finished.");  //  "Завершено."
  exit();
}

Экспорт SVG-файла (с использованием дисплейного окна)

Чтобы нарисовать что-то на экране, одновременно с этим сохраняя SVG-файл, используйте функции beginRecord() и endRecord(). В отличие от визуализатора PDF, визуализатор SVG сохраняет только последний кадр из серии кадров. Это медленнее, но позволяет видеть, что именно происходит на экране во время сохранения файла.

import processing.svg.*;

void setup() {
  size(400, 400);
  noLoop();
  beginRecord(SVG, "filename.svg");
}

void draw() {
  // рисуем тут что-нибудь интересное:
  line(0, 0, width/2, height);

  endRecord();
}

Сохранение одного кадра из анимации (с использованием дисплейного окна)

Эта библиотека также позволяет сохранять один кадр из скетча с двигающимися элементами. Создаем булеву переменную для включения/выключения процесса записи SVG-файла.

import processing.svg.*;

boolean record;

void setup() {
  size(400, 400);
}

void draw() {
  if (record) {
    // обратите внимание, что #### будет заменено на номер кадра:
    beginRecord(SVG, "frame-####.svg");
  }

  // рисуем тут что-нибудь интересное:
  background(255);
  line(mouseX, mouseY, width/2, height/2);

  if (record) {
    endRecord();
	record = false;
  }
}

// используем нажатия на кнопку мыши,
// чтобы не плодить тысячи файлов:
void mousePressed() {
  record = true;
}

Сохранение SVG-файлов из 3D-графики (с использованием дисплейного окна)

Чтобы создать векторы из 3D-данных, воспользуйтесь функциями beginRaw() и endRaw(). Они считывают данные фигур прямо перед тем, как они будут нарисованы на экране. В этот момент вся сцена – это не более, чем просто длинный список линий и треугольников. Это значит, что фигура, сделанная при помощи метода sphere(), будет состоять из сотен треугольников, а не из одного объекта.

Вместе с функциями beginRaw() и endRaw() можно использовать и 2D-, и в 3D-визуализатор. К примеру, использование beginRaw() вместе с библиотекой SVG запишет графику в виде «сплющенных» (т.е. превращенных в 2D-графику) треугольников и линий.

import processing.svg.*;

boolean record;

void setup() {
  size(500, 500, P3D);
}

void draw() {
  if (record) {
    beginRaw(SVG, "output.svg");
  }

  // здесь рисуем графику:
  background(204);
  translate(width/2, height/2, -200);
  rotateZ(0.2);
  rotateY(mouseX/500.0);
  box(200);

  if (record) {
    endRaw();
    record = false;
  }
}

// нажмите «R», чтобы записать текущий кадр:
void keyPressed() {
  if (key == 'r') {
    record = true;
  }
}

Использование createGraphics() для создания SVG-файла

Чтобы сохранить SVG-файл при помощи функции createGraphics() – не используя блоки setup() и draw() – на объекте PGraphics необходимо вызвать функцию dispose(). Это то же самое, что и exit(), но без выхода из программы.

import processing.svg.*;

PGraphics svg = createGraphics(300, 300, SVG, "output.svg");
svg.beginDraw();
svg.background(128, 0, 0);
svg.line(50, 50, 250, 250);
svg.dispose();
svg.endDraw();

Дополнительные примечания к использованию визуализатора SVG

  • Если вам нужны 3D-данные, вместо SVG воспользуйтесь библиотекой DXF.
  • Использование hint(ENABLE_DEPTH_SORT) может улучшить визуальное качество 3D-графики, сохраняемой в 2D-файлы.
  • Многие функции (особенно для работы с пикселями) использовать с визуализатором SVG бессмысленно. Например, loadPixels(), updatePixels(), get(), set(), mask(), filter(), copy(), blend(), save() и image().
  • Опять же, функция exit() очень важна при использовании SVG вместе с size().

См.также

Внешние ссылки