Vektordaten in Illustrator importieren

Ich habe ein Programm, das Tausende von Vektorpunkten (nur Koordinaten) generiert, das Format ist nicht festgelegt, aber es könnte so aussehen:

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

Ich kann diese Koordinaten beliebig formatieren/konvertieren.

Meine Frage ist: Wie kann ich diese Koordinatendaten als Vektorpunkte in Illustrator importieren , damit ich richtig mit ihnen arbeiten kann (sie mit einem Strich versehen, skalieren usw.).

Das Ergebnis könnte etwa so aussehen, aber das sind Pixeldaten. Ich möchte etwas Ähnliches, nur als Vektor.

Bearbeiten: Jede Koordinate sollte dazu führen, dass ein Punkt / Kreis in Illustrator gerendert wird, also sollte vielleicht jede Koordinate in Illustrator zu einer Linie mit identischem Anfang und Ende gemacht werden?

Auf dem Screenshot ist es etwas schwer zu erkennen, aber die Linien bestehen tatsächlich aus vielen einzelnen Punkten, die sich nicht immer berühren.

Ich habe die Punktkoordinaten mit einem kleinen Java-Code generiert, wenn jemand daran interessiert ist, einfach eine PN an mich.

Lösung: Jackson Hyde hat in seiner Antwort SVG als mögliches Format vorgeschlagen, was sich als perfekt herausstellt. Ich erzeuge einfach diese SVG-Datei und importiere sie dann in Illustrator. Dort kann ich alle Punkte auswählen und einen Strich hinzufügen und andere ausgefallene Sachen machen.

<?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>
Einzelne in Illustrator importierte Punkte wären nutzlos, da nichts aus ihnen gerendert würde. Sind all diese Punkte also Teil einer großen Polylinie? Und wenn ja, sind sie schon in der richtigen Reihenfolge?
Sie sind nicht Teil einer Linie, sondern einzelne Punkte. Vielleicht sollte also jede Koordinate eine Linie mit identischem Start- und Endpunkt in Illustrator sein, damit sie gerendert werden. Oder gibt es eine bessere Möglichkeit, einen Punkt zu rendern, dessen Größe Sie später ändern können?
Hmm, soweit ich weiß, würde eine Linie mit identischen Start- und Endpunkten immer noch nicht gerendert werden. Ich denke, ich würde versuchen, eine kleine Ellipse zu platzieren, die auf jeden Punkt zentriert ist. Anschließend können Sie das Styling in Illustrator ändern. Der Weg dahin wäre, mit SVG zu arbeiten
Ich habe gerade nachgesehen. Eine Linie mit der Länge Null zu haben und ihr einen Strich und abgerundete Enden zu geben, ergibt einen schönen kleinen runden Punkt.
Super, daran hatte ich nicht gedacht! Würde es Ihnen etwas ausmachen, Ihre Frage zu bearbeiten, um das Programm zu erwähnen, das Sie verwenden, um die Suchfähigkeit für alle anderen zu verbessern, die dies versuchen?
Schön, dass es funktioniert hat!

Antworten (3)

Als Alternative zu SVG könnten Sie stattdessen eine EPS- Datei generieren , die weniger ausführlich als SVG ist und weniger Einschränkungen aufweist. Hier ist eine kurze Einführung:

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

EPS generieren

EPS ist eine gerahmte Form von Postscript, die in andere Postscript-Jobs/Desktop-Publishing-Anwendungen integriert werden soll. Um dies zu handhaben, wird ein Header benötigt, um den Begrenzungsrahmen usw. zu definieren. Der Header würde wie folgt aussehen:

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

Diese Informationen sind für Illustrator absolut nicht erforderlich, da Illustrator eine Postscript-Engine ist. Trotzdem möchten Sie es vielleicht einschließen, damit die Datei unverändert ohne Illustrator verwendet werden kann. Die Verwendung einer Kopfzeile erleichtert auch die Verwendung im Illustrator. Der Begrenzungsrahmen definiert die Größe Ihres Bildmaterials, Koordinaten unten links, oben rechts.

Als nächstes müssen Sie Ihre Daten zur Vereinfachung handhaben. Möglicherweise möchten Sie eine einfache Routine zum Zeichnen eines einzelnen Punkts hinzufügen:

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

Jetzt müssen Sie nur noch jeden Punkt wie folgt definieren:

15.23 2.25 P
8.1234 7.85 P
...

Schließlich braucht Ihr Eps einen Endmarker wie diesen

%%EOF

Fertig. Im Allgemeinen ist EPS eines der am einfachsten zu generierenden Formate. Sie könnten tatsächlich alle P-Aufrufe weglassen, indem Sie über ein Array, eine Datei oder binäre Daten iterieren, aber ich belasse dies vorerst so, wie es ist.

Arbeitsablauf

Hier ist ein Trick, mit dem Sie die Daten beim Entwickeln der EPS- Datei visualisieren können. Schließlich kann etwas schief gehen und es ist nützlich, Feedback zu haben:

  • Legen Sie die EPS- Datei in Illustrator ab

Jedes Mal, wenn Sie die EPS- Datei bearbeiten und zurück zum Illustrator springen, werden Sie gefragt, ob Sie aktualisieren möchten. Wenn Sie auf Ja klicken, erhalten Sie sofortiges Feedback, und wenn Sie einen Fehler haben, erhalten Sie ein leeres Bild. Sie können es erweitern, wenn Sie bereit sind.

Andere Ressourcen

  1. Online-Postscript 2-Referenz
  2. Ghostscript eine Software-Postscript-Engine zum Debuggen, Konvertieren in PDF usw.

Alternative Funktionen in EPS

Die Funktion könnte ersetzt werden durch:

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

für die gleiche Art von 0-Linien-Ansatz. Sie können Folgendes hinzufügen:

1 -1 scale 

und verwenden Sie einen negativen Begrenzungsrahmen für die Messrichtungen oben links.


Andere Formate

Neben EPS und SVG ist DXF ein weiteres einfaches Übertragungsformat . Die DXF- Spezifikation finden Sie hier:

PDF ist auch in diesem speziellen Fall relativ einfach zu erzeugen. Der einfachste Weg wäre, das EPS mit Acrobat- oder Ghost-Skript zu destillieren. Das Generieren der Datentabellen und Prüfsummen ist ein bisschen zusätzliche Arbeit, aber ansonsten ist es fast so einfach wie das Generieren einer EPS-Datei. PDF- Spezifikation finden Sie hier:

Ein manuell erstelltes PDF- Beispiel , das dieselbe Idee verwendet, wie in den EPS- und SVG- Antworten beschrieben, die die 2 Demopunkte enthalten. Suchen Sie nach % graphics here for the relevant section(wenn Sie dies in eine Textdatei einfügen, für die PDF als Erweiterung festgelegt ist, sollte es einfach funktionieren).

Das Problem mit PDF ist das Generieren der Längen der Abschnitte für die XREF-Tabelle, was von Hand etwas mühsam ist. Deshalb vermeide ich PDF in schnellen Fällen wie diesem. Zugegeben, Adobe ignoriert die Tags, wenn das PDF nur eine Seite ist. Wenn Sie diese ignorieren, erzeugen Sie möglicherweise eine technisch inkorrekte PDF- Datei, die immer noch funktioniert. Ein lustiges Beispiel, das dieses Phänomen ausnutzt, finden Sie hier .

Ich denke, das würde genauso gut funktionieren. Da ich die Datei jedoch automatisch erzeuge und die erforderliche Syntax recht einfach ist, wie Sie in meiner bearbeiteten Frage sehen können.
Ich habe EPS in Betracht gezogen, aber mein Mangel an Wissen (im Vergleich zu SVG sowieso) hat mich davon abgehalten, es zu empfehlen. Es wäre auf jeden Fall sehenswert, das von Ihnen erwähnte Beispiel zu sehen, insbesondere wenn zukünftige Leser nicht mit SVG arbeiten können.
@LarsEbert EPS ist viel einfacher zu generieren. Und etwa 30 Zeichen weniger Daten pro Punkt.
+1 für EPS-Effizienz - Wenn Sie mit einem XML-basierten Format arbeiten, ist es wahrscheinlich nicht effizient! :)
Danke für die Zusatzinfo. Jetzt bin ich hin- und hergerissen zwischen dieser und Jacksons Antwort, die ich akzeptieren soll. Gibt es eine Möglichkeit, beide zu akzeptieren, da beide perfekt funktionieren? SVG ist besser lesbar und EPS ist effizienter.

Der einfachste Weg, den ich mir vorstellen kann, ist das Formatieren Ihrer Anwendung, um ein SVG-formatiertes Bild auszugeben . Illustrator kann auf verschiedene Weise mit SVG-Grafiken arbeiten .

Es ist erwähnenswert, dass Sie in Ihrem Bild mehr als nur eine Punktwolke anzeigen. Es sieht so aus, als ob Ihre Punkte im Laufe der Zeit entweder transformiert wurden (um einen "Trail" -Effekt zu erzielen) oder verbunden wurden, um Pfade zu erstellen. Wenn Sie nur eine Koordinatenwolke ausgeben, wird dieser Effekt nicht repliziert, Sie müssen mit der SVG-Koordinatenspezifikation arbeiten (insbesondere Koordinatentransformationen).

Die Punkte im Screenshot werden prozedural von mir generiert, ich kann genau die gleichen Punktkoordinaten exportieren und in Illustrator importieren, das sollte also das gleiche Ergebnis liefern, oder? Ich werde versuchen, die Punkte als SVG zu exportieren, danke für den Tipp!
Ah ja, bei näherer Betrachtung sehe ich, dass Ihr Bild nur Punktwolkendaten sind, Entschuldigung! Das Exportieren Ihrer Punkte als SVG und das anschließende Importieren dieser SVG in Illustrator sollte zu denselben Ergebnissen führen.

Da die Daten in dieser Frage bereits in einem Programm verfügbar sind, kann es auch sinnvoll sein, eine Programmierschnittstelle zu verwenden, die die Notwendigkeit einer Datei umgeht.

Programmgesteuerter Zugriff mit COM

COM ist eine Windows-Technologie, die es nahezu jeder Programmiersprache ermöglicht, direkt mit bestehenden Windows-Anwendungen zu kommunizieren. Adobe nennt dies die VB-API, aber es würde mit nur geringfügigen Änderungen in den meisten Allzwecksprachen wie C, C++, Python usw. funktionieren. Es ist auch in .Net-Sprachen integriert. Zum Beispiel würde eine Python-Quelle , die das Modul comtypes verwendet (für eine Win32com-Alternative siehe hier ), wie folgt aussehen:

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

Das war's, verwenden Sie eine beliebige Sprache, das erspart Ihnen das Ausgeben der Daten in ein Zwischenformat. Die API-Beschreibungen finden Sie unter:

Vorteile

  • Keine Notwendigkeit für Zwischendateien
  • Kann innerhalb Ihrer bestehenden Codebasis arbeiten
  • Sie könnten Symbole anstelle von Punkten einfügen

Nachteile

  • Funktioniert nur unter Windows.
  • COM kann am Anfang schwer zu lernen sein, aber die Mühe lohnt sich.
  • Benötigt eine Kopie von Illustrator auf dem Computer im Vergleich zu EPS .

Verwenden von Adobes JavaScirpt-Engine

Dasselbe könnte man mit Javascript mit den Erweiterungen von Adobe machen. Der Code würde wie folgt aussehen:

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

Das ist fast identisch mit dem Python- COM- Code.

Vorteile

  • Sie könnten Symbole anstelle von Punkten einfügen
  • funktioniert auf allen Plattformen

Nachteile

  • Javascript würde die Daten trotzdem irgendwie brauchen
  • Benötigt eine Kopie von Illustrator auf dem Computer.