Импорт векторных данных в иллюстратор

У меня есть программа, которая генерирует тысячи векторных точек (просто координаты), формат не фиксирован, но это может быть что-то вроде этого:

(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>
Отдельные точки, импортированные в Illustrator, будут бесполезны, так как из них ничего не будет визуализировано. Являются ли все эти точки частью одной большой полилинии? И если да, то они уже в правильном порядке?
Они не являются частью линии, это отдельные точки. Поэтому, возможно, каждая координата должна быть линией с идентичными начальной и конечной точками в Illustrator, чтобы они отображались. Или есть лучший способ отрисовать точку, размер которой можно изменить позже?
Хм, насколько я знаю, линия с одинаковыми начальной и конечной точками все равно не будет отображаться. Я думаю, что я бы попробовал разместить небольшой эллипс с центром в каждой точке. Затем вы можете изменить стиль в Illustrator. Способ сделать это - работать с SVG.
Я только что проверил. Имея линию с нулевой длиной и придавая ей обводку и закругленные концы, мы получаем симпатичную маленькую круглую точку.
Отлично, не подумал об этом! Не могли бы вы отредактировать свой вопрос, упомянув программу, которую вы используете, чтобы улучшить возможности поиска для всех, кто пытается это сделать?
Рад, что это сработало!

Ответы (3)

В качестве альтернативы SVG вы можете создать EPS- файл, он менее подробный, чем SVG , и содержит меньше предостережений. Вот краткое введение:

http://paulbourke.net/dataformats/postscript/

Генерация EPS

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 в Illustrator.

Теперь каждый раз, когда вы редактируете файл EPS и возвращаетесь к иллюстратору, он будет спрашивать вас, хотите ли вы обновить его. Если вы нажмете «Да», вы получите мгновенную обратную связь, а если у вас есть ошибка, вы получите пустое изображение. Вы можете расширить его, когда будете готовы.

Другие источники

  1. Онлайн-справочник постскриптума 2
  2. Ghostscript — программный движок PostScript для отладки, преобразования в PDF и т. д.

Альтернативные функции в 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- файл, который все еще просто работает. Забавный пример использования этого феномена можно найти здесь .

Я думаю, это будет работать так же хорошо. Но поскольку я создаю файл автоматически, и необходимый синтаксис довольно прост, как вы можете видеть в моем отредактированном вопросе.
Я рассматривал EPS, но недостаток знаний (по крайней мере, по сравнению с SVG) помешал мне рекомендовать его. Определенно стоит посмотреть пример, который вы упомянули, особенно если будущие читатели не умеют работать с SVG.
@LarsEbert EPS гораздо проще создать. И примерно на 30 символов меньше данных на точку.
+1 за эффективность EPS - если вы работаете с любым форматом на основе XML, он, вероятно, не будет эффективным! :)
Спасибо за дополнительную информацию. Теперь я разрываюсь между этим и ответом Джексона, который нужно принять. Есть ли способ принять оба, так как они оба работают отлично. SVG более удобочитаем, а EPS более эффективен.

Самый простой способ, который я могу придумать, это отформатировать ваше приложение для вывода изображения в формате SVG . Illustrator может работать с графикой SVG несколькими способами .

Стоит отметить, что на вашем изображении вы показываете больше, чем просто облако точек. Похоже, что ваши точки либо были преобразованы с течением времени (чтобы создать эффект «следа»), либо соединены для создания путей. Простой вывод облака координат не воспроизведет этот эффект, вам нужно будет работать со спецификацией координат SVG (в частности, преобразованиями координат).

Точки на скриншоте сгенерированы мной процедурно, я могу экспортировать те же координаты точек и импортировать их в иллюстратор, так что должен получиться тот же результат, не так ли? Я попробую экспортировать точки в формате SVG, спасибо за совет!
Ах да, при ближайшем рассмотрении я вижу, что ваше изображение — это просто данные облака точек, извините! Экспорт ваших точек в формате SVG, а затем импорт этого SVG в Illustrator должен дать те же результаты.

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

Программный доступ с COM

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 можно найти по адресу:

Преимущества

  • Нет необходимости в промежуточных файлах
  • Может работать внутри вашей существующей кодовой базы
  • Вы можете вставлять символы вместо точек

Недостатки

  • Работает только на окнах.
  • Поначалу COM может быть трудно изучить, но оно того стоит.
  • Нужна копия Illustrator на машине по сравнению, скажем, с EPS .

Использование движка Adobes javaScirpt

То же самое можно сделать с 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.

Преимущества

  • Вы можете вставлять символы вместо точек
  • работает на всех платформах

Недостатки

  • javaScript все равно каким-то образом понадобятся данные
  • Нужна копия Illustrator на машине.