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>
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 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.
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:
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.
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.
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 .
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).
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.
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:
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.
JohnB
Lars Ebert
JohnB
Lars Ebert
JohnB
Jackson Hyde