Я хочу создать векторную кривую, симметричную сверху и снизу. Например, в этом значке бейсбола ( Как нарисовать бейсбол в Pixelmator? ), если я попытаюсь написать вектор, как это предлагается в принятом ответе, я закончу тем, что напишу векторную кривую вручную, что означает, что кривая никогда не может быть симметрично между верхом и низом.
Итак, я хочу создать векторную кривую программно, например, указав начальную и конечную точки вектора, а затем указав среднюю точку вектора, а также указав степень кривой, чтобы создать аккуратную кривую. Я не люблю создавать кривую вручную, так как что бы я ни делал, это выглядело довольно ужасно.
Так можно ли создать аккуратную кривую, указав некоторые числа? Я не возражаю против того, какие приложения я должен использовать среди Affinity Designer, Pixelmator, Sketch 3 или Illustrator CC, если это можно сделать программно (связанный пост разработан Pixelmator, FYI).
Этот вопрос содержит две отдельные проблемы,
Для всех намерений и целей они не связаны. Мне кажется, что единственная причина, по которой вы задаете первый вопрос, заключается в том, что вы не знаете, как точно размещать элементы в графическом интерфейсе, но я могу ошибаться. Я буду демонстрировать Adobe Illustrator , потому что он у меня есть под рукой.
Первый способ точно позиционировать объекты — использовать сетку и привязку к сетке . Это концепция графического интерфейса, эквивалентная использованию только x цифр точности при вводе значений. Когда вы уменьшаете количество мест, где вы можете размещать точки, более вероятно, что вы сможете воспроизвести позиционирование в другом месте. Симметричное расположение рукояток приводит к симметричным результатам.
Изображение 1. Привязка к сетке делает позиционирование предсказуемым.
Другой способ - нарисовать ровно половину вашей фигуры и использовать инструмент «Зеркало», чтобы создать симметричную половину. Еще один способ сделать это — использовать маленькую кривую в качестве транспортира, а затем привязываться к ее точкам. Итак, вы видите, что есть много вариантов сделать это, не утруждая себя переходом на уровень сценария.
Adobe предоставляет независимую от платформы реализацию JavaScript под названием ExtendScript. Сценарий, имитирующий то, что делается вручную, будет выглядеть следующим образом:
#target illustrator
var doc = app.activeDocument;
var pathItem = doc.pathItems.add();
pts = [[0,0], [5,0], [5,5], [0,5]]
// match units of drawn document
// convert points to 2 * mm
for(var i=0; i< pts.length; i++) {
for(var j=0; j< pts[i].length; j++) {
pts[i][j] *= 2 * 2.83464567;
}
}
var point1 = pathItem.pathPoints.add();
point1.anchor = pts[0];
point1.leftDirection = point1.anchor;
point1.rightDirection = pts[1];
var point2 = pathItem.pathPoints.add();
point2.anchor = pts[3];
point2.leftDirection = pts[2];
point2.rightDirection = point2.anchor;
pathItem.stroke = true;
pathItem.fill = false;
Просто вставьте это в набор инструментов extendscript для тестирования или поместите в .jsx
файл
Иногда вы хотите использовать произвольную программу для создания векторных рисунков. Разумный выбор выходных форматов, которые могут это сделать:
Из этих форматов EPS и DXF наименее свернуты. SVG также является хорошим выбором, но он слишком многословен и по-прежнему столь же загадочен, как и слои чертежей PDF. PDF также можно сгенерировать, но если у вас нет API для рисования, это дополнительная работа (например, QT или Cairo, но это ни в коем случае не сложно, просто немного запутанно). Я использую EPS , потому что мне иногда нужно писать EPS вручную, так что мне это знакомо.
Рисование вышеуказанной формы в файле EPS будет выглядеть следующим образом:
%!PS-Adobe-3.0 EPSF-3.0
%%BoundingBox: 0 0 40 40
%%Title: Graph Drawing
%%Creator: Janne Ojala
%%CreationDate: 2013-03-23
%%EndComments
% optional stuff to get
% same scale as my settings
/mm {2.83464567 mul} def
2 mm dup scale % 1 unit = 2 mm
1 2 mm div setlinewidth
1 1 translate % offset
% end optional
newpath
0 0 moveto
5 0 5 5 0 5 curveto
stroke
%%EOF
В первых разделах первая строка обязательна, как и последняя %%EOF
. Основная часть рисунка сделана с помощью moveto и кривой туда, где пары чисел являются 4 контрольными точками. Просто поместите это в текстовый файл с .eps
расширением и используйте как обычно.
Сравнивая решения, вы можете видеть, что подход javaScript довольно громоздкий по сравнению с альтернативами.
Изображение 2: Сравнение нарисованной от руки (красный), javaScript (зеленый) и кривой EPS (черный)
Да, можно программно сделать кривую. Однако точность этого не требует. Этот пост содержит 2 подхода к программируемому доступу и одно обсуждение того, как сделать то же самое в графическом интерфейсе.
Если я правильно понял ваш вопрос, вам подойдет коррекция дуги с помощью SH. Я не пробовал это сам, но похоже, что это сработает.
Бласзард
джуджа
Бласзард