У меня есть программа, которая генерирует тысячи векторных точек (просто координаты), формат не фиксирован, но это может быть что-то вроде этого:
(2.4785|77.01)
(78.8|9.88)
(45.33|0.2)
Я могу форматировать/преобразовывать эти координаты любым способом.
Мой вопрос: как я могу импортировать эти данные координат в Illustrator в виде векторных точек , чтобы я мог правильно с ними работать (обводить их, масштабировать и т. д.).
Результат может быть примерно таким, но это данные пикселей. Я хочу что-то похожее на это, только в виде вектора.
Изменить: каждая координата должна отображать одну точку/круг в Illustrator, поэтому, может быть, каждую координату следует превратить в линию с одинаковым началом и концом в иллюстраторе?
На скриншоте это немного сложно увидеть, но на самом деле линии состоят из множества отдельных точек, которые не всегда соприкасаются.
Я сгенерировал координаты точек с помощью небольшого java-кода, если кому-то это интересно, просто напишите мне в личку.
Решение: Джексон Хайд предложил SVG в качестве возможного формата в своем ответе, который отлично работает. Я просто создаю этот файл SVG, а затем импортирую его в Illustrator. Там я могу выделить все точки, добавить обводку и сделать еще какие-нибудь причудливые вещи.
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:ev="http://www.w3.org/2001/xml-events"
version="1.1" baseProfile="full"
width="20px" height="20px">
<line x1="15.23" y1="2.25" x2="15.23" y2="2.25" />
<line x1="8.1234" y1="7.85" x2="8.1234" y2="7.85" />
[...]
</svg>
В качестве альтернативы SVG вы можете создать EPS- файл, он менее подробный, чем SVG , и содержит меньше предостережений. Вот краткое введение:
http://paulbourke.net/dataformats/postscript/
EPS — это фреймовая форма постскриптума, предназначенная для включения в другие постскриптумные задания/приложения для настольных издательских систем. Чтобы справиться с этим, ему нужен заголовок для определения ограничивающей рамки и т. д. Заголовок будет выглядеть следующим образом:
%!PS-Adobe-3.0 EPSF-3.0
%%BoundingBox: 0 0 100 100
%%Title: Demo for GD.SE
%%Creator: Janne Ojala
%%CreationDate: 2014-06-23
%%EndComments
Эта информация строго не нужна для иллюстратора, так как иллюстратор является движком постскриптума. Тем не менее, вы можете включить его, чтобы файл можно было использовать без иллюстратора. Использование заголовка также упрощает использование в иллюстраторе. Ограничивающая рамка определяет размер вашего изображения, координаты внизу слева, вверху справа.
Затем вам нужно обработать ваши данные для простоты, вы можете добавить простую процедуру для рисования одной точки:
/P {newpath 1 0 360 arc fill} def %draw circle with radius of 1
Теперь все, что вам нужно, это определить каждую точку следующим образом:
15.23 2.25 P
8.1234 7.85 P
...
Наконец, вашему eps нужен конечный маркер, подобный этому
%%EOF
Сделанный. В общем, EPS является одним из самых простых форматов для создания, вы можете фактически опустить все вызовы P, перебирая массив, файл или двоичные данные, но я пока оставлю это как есть.
Вот трюк, который вы можете использовать для визуализации данных при разработке файла EPS . В конце концов, что-то может пойти не так, и полезно иметь обратную связь:
Теперь каждый раз, когда вы редактируете файл EPS и возвращаетесь к иллюстратору, он будет спрашивать вас, хотите ли вы обновить его. Если вы нажмете «Да», вы получите мгновенную обратную связь, а если у вас есть ошибка, вы получите пустое изображение. Вы можете расширить его, когда будете готовы.
Функцию можно заменить на:
1 setlinecap
/P {newpath moveto 0 0 rlineto stroke} def
для того же подхода с нулевым размером линии. вы можете добавить:
1 -1 scale
и используйте отрицательную ограничивающую рамку для верхних левых направлений измерения.
В дополнение к EPS и SVG другим удобным форматом передачи является DXF . Спецификацию DXF можно найти здесь:
PDF также относительно легко создать в этом конкретном случае. Самым простым способом было бы перегнать EPS с помощью Acrobat или Ghost script. Создание таблиц данных и контрольных сумм требует дополнительной работы, но в остальном это почти так же просто, как создание EPS-файла. Спецификацию PDF можно найти здесь:
Образец PDF, созданный вручную , использует ту же идею, что описана в ответах EPS и SVG , содержащих 2 демонстрационных пункта. Найдите % graphics here for the relevant section
(если вы вставите это в текстовый файл с расширением PDF , оно должно работать).
Проблема с PDF заключается в создании длин разделов для таблицы XREF, что немного неудобно делать вручную. Вот почему я избегаю PDF в таких быстрых случаях, как этот. Конечно, Adobe будет игнорировать теги, если PDF-файл состоит всего из одной страницы. Поэтому, игнорируя их, вы можете создать технически неверный PDF- файл, который все еще просто работает. Забавный пример использования этого феномена можно найти здесь .
Самый простой способ, который я могу придумать, это отформатировать ваше приложение для вывода изображения в формате SVG . Illustrator может работать с графикой SVG несколькими способами .
Стоит отметить, что на вашем изображении вы показываете больше, чем просто облако точек. Похоже, что ваши точки либо были преобразованы с течением времени (чтобы создать эффект «следа»), либо соединены для создания путей. Простой вывод облака координат не воспроизведет этот эффект, вам нужно будет работать со спецификацией координат SVG (в частности, преобразованиями координат).
Поскольку данные в этом вопросе уже доступны внутри программы, может также иметь смысл использовать программный интерфейс, что позволяет избежать необходимости в файле.
COM — это технология Windows, которая позволяет почти любому языку программирования напрямую взаимодействовать с существующими приложениями Windows. Adobe называет это VB API, но он будет работать с небольшими изменениями в большинстве языков общего назначения, таких как C, C++, Python и т. д. Он также встроен в языки .Net. Например, исходный код Python , использующий модуль comtypes (альтернатива win32com см. здесь ), будет выглядеть следующим образом:
import comtypes.client
# following call is slow to instantiate the first
# time you run it on a new machine as it builds the API
appObj = comtypes.client.CreateObject("Illustrator.Application")
docObj = appObj.Documents.Add()
docObj.DefaultStrokeCap = 2 # round
POINTS = [
(15.23, 2.25),
(8.1234, 8.1234)
#... or whatever database call you want
]
for point in POINTS:
pathItem = docObj.PathItems.Add()
pathItem.SetEntirePath( (point, point) )
Вот и все, используйте любой язык, какой пожелаете, это избавит вас от вывода данных в промежуточный формат. Описание API можно найти по адресу:
То же самое можно сделать с javaScript, используя расширения Adobe. Код будет выглядеть следующим образом:
docObj = app.documents.add()
docObj.defaultStrokeCap = StrokeCap.ROUNDENDCAP
POINTS = Array(
Array(15.23, 2.25),
Array(8.1234, 8.1234)
);
for (i in POINTS){
pathItem = docObj.pathItems.add();
pathItem.setEntirePath( Array(POINTS[i], POINTS[i]) );
}
Который почти идентичен COM- коду Python.
ДжонБи
Ларс Эберт
ДжонБи
Ларс Эберт
ДжонБи
Джексон Хайд