Журнал LinuxFormat - перейти на главную

LXF79:Inkscape

Материал из Linuxformat
Перейти к: навигация, поиск

На последнем уроке Дмитрий Кирсанов расскажет о расширениях Inkscape – дополнительных командах, создающих подчас действительно необычные эффекты.

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

Примеры таких приложений, ставших платформами, хорошо известны – это ранний Netscape с его JavaScript и подключаемыми модулями, нынешний Firefox с его бесчисленными расширениями или же Adobe Photoshop, чьи расширения образуют целый огромный мир. Inkscape сделал только первые шаги в этом направлении, но, похоже, намеревается стать настоящей платформой в области векторной графики и SVG. Эффекты (расширения) Inkscape, пусть пока и немногочисленные, уже вполне заслуживают вашего внимания.

Команды, собранные в меню «Эффекты» (Effects), вызывают сценарии (скрипты), написанные на языках Python (чаще всего), Perl или Ruby. Каждый такой сценарий берет SVG-файл на входе и выдает другой SVG-файл на выходе. Inkscape передаёт сценарию тот документ, который вы в данный момент редактируете, а вместе с ним – параметры командной строки, специфические для каждого эффекта. Значения этих параметров пользователь устанавливает в специальном диалоговом окне перед запуском эффекта.

Сценарии эффектов должны быть самодостаточными – после запуска Inkscape не оказывает им никакой поддержки. Эффекты не имеют доступа ни к памяти Inkscape, ни к его внутренним функциям. (Расширения другого типа, глубже интегрированные с Inkscape, сейчас находится в стадии разработки).

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

Возможность запускать сценарий прямо из редактора, сразу же видеть результаты его работы, при необходимости отменять изменения и запускать его снова с другими параметрами – все это делает эффекты весьма удобными. Большинство эффектов, включенных в последнюю версию Inkscape (0.43), написаны на Python и работают с контурами. Некоторые из них предназначены для узкоспециальных, редко возникающих нужд и, похоже, навсегда обречены быть именно расширениями. Другие, напротив, реализуют базовые функции, которые пока отсутствуют в ядре Inkscape – но, вероятно, со временем будут туда добавлены и перестанут быть расширениями.

На этом занятии я покажу вам, как работают некоторые из эффектов и для чего они могут пригодиться.


Включение эффектов

Img 79 87 1.jpg

В версии Inkscape 0.43 меню «Эффекты» (Effects) по умолчанию недоступно. Откройте «Настройки Inkscape» (Inkscape Preferences) и на закладке «Прочее» (Misc) установите флажок «Включить эффекты» (Enable Scripts Effects). Перезапустите программу, и вы увидите это меню со списком всех доступных эффектов. В Linux, при установленных Python и PyXML, они работают сразу; наладить эффекты в Windows-версии пока несколько труднее. В версии 0.44 эффекты, по уверениям разработчиков, будут работать сразу и на любой платформе.

Спрямление сегментов

Img 79 87 2.jpg

Попробуем для начала простой эффект, пропорционально укорачивающий все манипуляторы Безье в контуре. Выделите объект (я нарисовал спираль соответствующим инструментом (F9), затем превратил её в контур нажатием Ctrl+Shift+C) и выберите в меню «Эффекты > Спрямитель сегментов» (Effects > Segment Straightener). Можно выбрать как степень, так и алгоритм спрямления: один из них просто укорачивает манипуляторы, а второй укорачивает и поворачивает их к следующему узлу, превращая гладкие узлы в ломаные.

Эффект интерполяции

Img 79 87 3.jpg

Другой эффект предназначен для создания плавного перехода (интерполяции) между двумя контурами. Нарисуйте пару линий инструментами «Перо» или «Карандаш». Теперь, выбрав «Эффекты > Интерполяция» (Effects > Interpolation), вы можете получить множество промежуточных контуров, постепенно превращающих один объект в другой. В диалоговом окне можно выбрать количество шагов интерполяции и «экспоненту» – число, определяющее равномерность интервалов между ступенями.

Выбор метода

Img 79 87 4.jpg

Интерполяция хорошо работает с контурами, которые и без того достаточно похожи и не имеют субконтуров (например, дыр). Метод 1 сохраняет существующие узлы и больше подходит для простых линий. Метод 2 в случае необходимости добавляет новые узлы и хорош для более сложных случаев (А). В некоторых случаях одну из линий приходится реверсировать (В). Опция смешивания стилей – цветов заливки, толщины линий, прозрачности – хоть и заявлена как экспериментальная, но работает вполне удовлетворительно (С).

Конверт

Img 79 88 1.jpg

Другой эффект, который, надеюсь, со временем станет частью ядра Inkscape – «Конверт» (Envelope). Чтобы воспользоваться им, нужно выделить два контура, причём один из них должен иметь ровно четыре узла (А) – он послужит конвертом для вставки второго (В). К сожалению, пока этот эффект не вносит перспективных искажений и не может использовать криволинейные конверты. Чтобы восполнить пробел, Inkscape нужна помощь талантливых программистов!

Добавление узлов

Img 79 88 2.jpg

Как правило, чем больше узлов имеет контур, тем естественнее выглядит результат работы эффекта. Конечно, можно добавлять узлы вручную при помощи инструмента редактирования узлов (F2), но есть и более удобное средство: эффект «Добавление узлов» (Add Nodes). Вы можете задать максимальное расстояние (в единицах SVG) между узлами по контуру, и эффект создаст столько узлов, сколько необходимо для соблюдения этого расстояния, распределив их по возможности равномерно. Форма контура при этом не меняется.

Рандомизация

Img 79 88 3.jpg

После добавления узлов попробуем «растрясти» контур эффектом «Случайное смещение» (Radius Randomize). Задайте радиус (максимальное смещение) и выберите, к чему вы хотите применить смещение – только к узлам, к их рукояткам или к тем и другим одновременно. Применение только к узлам сохраняет гладкость узлов (А), тогда как смещение рукояток делает контур зазубренным (В). Вручную меняя плотность узлов на разных участках контура, можно регулировать степень его «огрубления».

Фестоны

Img 79 88 4.jpg

Эффект «Фестоны» (Kochify) заменяет каждый отрезок контура (между двумя узлами) соответствующим образом масштабированным и развёрнутым образцом. Понятно, что и в этом случае на результат эффекта прямо влияет количество узлов в контуре: чем чаще идут узлы, тем мельче будут вставленные между ними образцы. Прежде всего, необходимо выбрать образец командой «Эффекты > Фестоны (Загрузить)» (Effects > Kochify (Load)) (А). Затем выделите контур, к которому будет применён эффект (В), и выберите «Эффекты > Фестоны» (Effects > Kochify) (С).

Завихрения

Img 79 89 1.jpg

Эффект «Вихрь» (Whirl) закручивает все узлы контура вокруг некоего центра, увеличивая угол отклонения пропорционально радиусу. Этот эффект лучше всего смотрится с центрально-симметричными фигурами, такими как звёзды, и становится тем выразительнее, чем больше узлов вы добавите (закончив работу, лишние узлы можно убрать командой «Упростить», Simplify). Координаты центра вращения нужно указывать численно (0,0 соответствует левому верхнему углу), что немного неудобно, но зато даёт возможность поиграть с эксцентрическими завихрениями.

Графики функций

Img 79 89 2.jpg

Эффект «График функции» (Function Plotter) позволяет нарисовать график любой математической функции. Прежде чем вызывать его, выделите прямоугольник, в который будет вписан график. Формулы записываются по правилам Python и могут содержать вызовы любых библиотечных функций из модулей Math или Random. Первая производная (она нужна для определения угла манипуляторов) может быть задана аналитически пользователем или вычисляться самой программой. Можно также указать количество отображаемых 2pi -периодов и количество точек на период (т.е. разрешение графика).

Визуализация контуров

Img 79 89 3.jpg

Иногда могут быть полезны эффекты «Показать манипуляторы» (Draw Handles) и «Цепочка точек» (Connect The Dots). Первый из них создает новый контур, соответствующий рукояткам всех узлов выделенного контура (А). Второй эффект заменяет контур пронумерованной последовательностью круглых точек, по одной на узел (размеры этих точек и шрифт номеров можно менять). Заметьте, что в замкнутом контуре начальная/конечная точка будет иметь двойную нумерацию – так, в (В) номер 1 накладывается на 10, а 11 на 15.

Рекурсивные фигуры

Img 79 89 4.jpg

Последние два эффекта, поставляемые с Inkscape, создают красивые фракталы при помощи рекурсивных алгоритмов. Первый, «Случайное дерево» (Random Tree) (А) рисует ветвистое дерево со случайными углами наклона и длиной ветвей; параметр «Минимальный размер» (Minimum size) относится к размеру веток и определяет глубину ветвления. Другой эффект, Lindenmayer (В), не использует элемент случайности, но позволяет точно управлять движением пера на каждом шаге рекурсии при помощи L-системы (подробнее об этом см. L-system).

Напоследок...

Закончено последнее занятие этой серии. Возможно, скоро мы встретимся снова, а пока – играйте с Inkscape, пробуйте этот новый инструмент в реальных проектах. Комментарии к настоящей серии и идеи для будущей принимаются по адресу: letters@linuxformat.ru.

Персональные инструменты
купить
подписаться
Яндекс.Метрика