Importar datos vectoriales a Illustrator

Tengo un programa que genera miles de puntos vectoriales (solo coordenadas), el formato no es fijo, pero podría ser algo como esto:

(2.4785|77.01)
(78.8|9.88)
(45.33|0.2)

Puedo formatear/convertir estas coordenadas de la forma que sea necesaria.

Mi pregunta es: ¿ Cómo puedo importar estos datos de coordenadas en Illustrator como puntos vectoriales , para poder trabajar con ellos correctamente (darlos un trazo, escalarlos, etc.).

El resultado podría ser algo como esto, pero estos son datos de píxeles. Quiero algo similar a eso, solo que como vector.

Editar: cada coordenada debería dar como resultado un punto/círculo que se representa en Illustrator, por lo que tal vez cada coordenada debería convertirse en una línea con un comienzo y un final idénticos en Illustrator.

Es un poco difícil de ver en la captura de pantalla, pero las líneas en realidad consisten en muchos puntos individuales que no siempre se tocan.

Generé las coordenadas de puntos con un pequeño código Java, si alguien está interesado en él, solo envíeme un mensaje privado.

Solución: Jackson Hyde sugirió SVG como posible formato en su respuesta, que resultó funcionar perfectamente. Solo genero este archivo SVG y luego lo importo a Illustrator. Allí puedo seleccionar todos los puntos y agregar un trazo y hacer otras cosas sofisticadas.

<?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>
Los puntos individuales importados a Illustrator serían infructuosos ya que no se representaría nada a partir de ellos. Entonces, ¿todos estos puntos son parte de una gran polilínea? Y si es así, ¿ya están en el orden correcto?
No forman parte de una línea, son puntos individuales. Entonces, tal vez cada coordenada debería ser una línea con un punto inicial y final idéntico en Illustrator, para que se representen. ¿O hay una mejor manera de representar un punto cuyo tamaño puede cambiar más adelante?
Hmm, hasta donde yo sé, una línea con puntos de inicio y final idénticos aún no se representaría. Creo que intentaría colocar una pequeña elipse centrada en cada punto. A continuación, puede modificar el estilo en Illustrator. La forma de hacerlo sería trabajar con SVG
Acabo de verificar. Tener una línea con la longitud cero y darle un trazo y extremos redondeados da como resultado un pequeño y bonito punto redondo.
Excelente, no había pensado en eso! ¿Le importaría editar su pregunta para mencionar el programa que está usando para mejorar la capacidad de búsqueda para cualquier otra persona que intente hacer esto?
¡Me alegro de que haya funcionado!

Respuestas (3)

Como alternativa a SVG , podría generar un archivo EPS , es menos detallado que SVG y tiene menos advertencias. Aquí hay una introducción rápida:

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

Generando EPS

EPS es una forma enmarcada de postscript destinada a ser incluida en otros trabajos de postscript/aplicaciones de publicación de escritorio. Para manejar esto, necesita un encabezado para definir el cuadro delimitador, etc. El encabezado se vería de la siguiente manera:

%!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

Esta información no es estrictamente necesaria para Illustrator, ya que Illustrator es un motor de postscript. Sin embargo, es posible que desee incluirlo para que el archivo se pueda usar tal como está sin ilustrador. El uso de un encabezado también facilita su uso en Illustrator. El cuadro de delimitación define el tamaño de su obra de arte, coordina abajo a la izquierda, arriba a la derecha.

A continuación, debe manejar sus datos con facilidad, es posible que desee agregar una rutina simple para dibujar un solo punto:

/P {newpath 1 0 360 arc fill} def %draw circle with radius of 1

Ahora todo lo que necesita es definir cada punto de la siguiente manera:

15.23 2.25 P
8.1234 7.85 P
...

Finalmente, su eps necesita un marcador final como este

%%EOF

Hecho. En general, EPS es uno de los formatos más fáciles de generar, en realidad podría omitir todas las llamadas P iterando sobre una matriz, archivo o datos binarios, pero lo dejaré como está por el momento.

flujo de trabajo

Aquí hay un truco que puede usar para visualizar los datos mientras desarrolla el archivo EPS . Después de todo, algo puede salir mal y es útil tener algunos comentarios:

  • Coloque el archivo EPS en Illustrator

Ahora, cada vez que edite el archivo EPS y regrese a Illustrator, le preguntará si desea actualizar. Si hace clic en Sí, obtendrá comentarios instantáneos y, si tiene un error, obtendrá una imagen en blanco. Puedes expandirlo cuando estés listo.

Otros recursos

  1. Postdata en línea 2 referencia
  2. Ghostscript, un motor de postscript de software , para depuración, conversión a PDF , etc.

Funciones alternativas en EPS

La función podría ser reemplazada por:

1 setlinecap
/P {newpath moveto 0 0 rlineto stroke} def

para el mismo tipo de enfoque de línea de tamaño 0. puedes agregar un:

1 -1 scale 

y use un cuadro delimitador negativo para las direcciones de medición de la parte superior izquierda.


Otros formatos

Además de EPS y SVG, otro formato fácil de transferir es DXF . La especificación DXF se puede encontrar aquí:

PDF también es relativamente fácil de generar en este caso específico. Aunque la forma más fácil sería destilar el EPS con acrobat o script fantasma. Generar las tablas de datos y las sumas de verificación es un poco de trabajo adicional, pero aparte de eso, es casi tan sencillo como generar un archivo EPS. PDF Spec se puede encontrar aquí:

Una muestra en pdf creada manualmente , utiliza la misma idea que se describe en las respuestas EPS y SVG que contienen los 2 puntos de demostración. Busque % graphics here for the relevant section(si pega esto en un archivo de texto que tiene PDF configurado como extensión, debería funcionar).

El problema con PDF es generar las longitudes de las secciones para la tabla XREF, lo cual es un poco complicado de hacer a mano. Es por eso que evito PDF en casos rápidos como este. Por supuesto, Adobe ignorará las etiquetas si el PDF es solo una página. Entonces, al ignorarlos, puede generar un archivo PDF técnicamente incorrecto que aún funciona. Puede encontrar un ejemplo divertido que explota este fenómeno aquí .

Supongo que esto funcionaría igual de bien. Pero como estoy generando el archivo automáticamente y la sintaxis necesaria es bastante sencilla, como puede ver en mi pregunta editada.
Consideré EPS, pero mi falta de conocimiento (en comparación con SVG de todos modos) me impidió recomendarlo. Definitivamente valdría la pena ver el ejemplo que mencionaste, especialmente si los futuros lectores no pueden trabajar con SVG.
@LarsEbert EPS es mucho más sencillo de generar. Y unos 30 caracteres menos de datos por punto.
+1 para la eficiencia de EPS: si está trabajando con cualquier tipo de formato basado en XML, ¡probablemente no sea eficiente! :)
Gracias por la información adicional. Ahora estoy dividido entre esto y la respuesta de Jackson para aceptar. ¿Hay alguna forma de aceptar ambos, ya que ambos funcionan perfectamente? SVG es más legible por humanos y EPS es más eficiente.

La forma más fácil que se me ocurre es formatear su aplicación para generar una imagen con formato SVG . Illustrator puede trabajar con gráficos SVG de varias maneras .

Vale la pena señalar que en su imagen está mostrando más que solo una nube de puntos. Parece que sus puntos se han transformado con el tiempo (para dar un efecto de 'rastro') o están conectados para crear caminos. Solo generar una nube de coordenadas no replicará este efecto, deberá trabajar con la especificación de coordenadas SVG (transformaciones de coordenadas en particular).

Los puntos en la captura de pantalla son generados por procedimientos por mí, puedo exportar las mismas coordenadas de puntos e importarlas en Illustrator, por lo que debería producir el mismo resultado, ¿no? Intentaré exportar los puntos como SVG, ¡gracias por el consejo!
Ah, sí, en una inspección más cercana, veo que su imagen es solo datos de nubes de puntos, ¡disculpas! Exportar sus puntos como SVG y luego importar ese SVG a Illustrator debería producir los mismos resultados.

Dado que los datos en esta pregunta ya están disponibles dentro de un programa, también puede tener sentido usar una interfaz de programación que evita la necesidad de un archivo.

Acceso programático con COM

COM es una tecnología de Windows que permite que casi cualquier lenguaje de programación interactúe directamente con las aplicaciones de Windows existentes. Adobe llama a esto la API de VB, pero funcionaría con solo ligeras modificaciones en la mayoría de los lenguajes de propósito general como C, C++, Python, etc. También está integrado en los lenguajes .Net. Por ejemplo, una fuente de python que usa el módulo comtypes (para la alternativa de win32com, consulte aquí ) se vería de la siguiente manera:

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) )

Eso es todo, use el idioma que desee, esto le ahorra tener que volcar los datos en un formato intermedio. Las descripciones de la API se pueden encontrar en:

Beneficios

  • Sin necesidad de archivos intermedios
  • Puede funcionar dentro de su base de código existente
  • Podrías insertar símbolos en lugar de puntos

Desventajas

  • Solo funciona en windows.
  • COM puede ser difícil de aprender al principio, pero vale la pena el esfuerzo.
  • Necesita una copia de Illustrator en la máquina en comparación con, por ejemplo, EPS .

Uso del motor JavaScirpt de Adobe

Se podría hacer lo mismo con javaScript usando las extensiones de Adobe. El código quedaría de la siguiente manera:

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]) );
}

Que es casi idéntico al código COM de Python .

Beneficios

  • Podrías insertar símbolos en lugar de puntos
  • funciona en todas las plataformas

Desventajas

  • javaScript todavía necesitaría los datos de alguna manera
  • Necesita una copia de Illustrator en la máquina.