Frage

Ich habe ein einfaches Problem, kann aber nicht scheinbar umher herum finden: Ich habe Pathitem und Illustrator weist darauf hin, dass es sich an Position befindet (781px, 250px).

Wie kann ich diese Werte in JSX bekommen?

Mir ist aufgefallen, dass die Pathitem erbt die Positionseigenschaft von PageItem, und Position ist a Punkt, aber wenn ich versuche, die Werte zu drucken, bekomme ich nicht definiert:

$.writeln(app.activeDocument.selection[0].position.x);

Wenn ich .x aus der obigen Zeile weglasse, bekomme ich dies in der Konsole:

521,510

Was sind diese Werte? Sind sie X, Y -Koordinaten? In welcher Einheit? Wie kann ich in Pixel konvertieren?

Warum kann ich nicht auf X, Y/Top, linke Eigenschaften zugreifen?

Ich verwende Illustrator CS5.

War es hilfreich?

Lösung

@Bradidos Antwort ist hilfreich, sie ist unvollständig.

Es scheint, dass Illustrator unterschiedliche Koordinatensysteme hat: ein Dokumentkoordinatensystem und ein Kunstboardkoordinatensystem. Einer hat den Ursprung in der Mitte des Dokuments, während der andere den Ursprung am oberen Links hat. Auch die Y -Werte erhöhen sich nach oben.

Es ist ratsam, zunächst nach dem Koordinatensystem zu überprüfen app.coordinateSystem Eigenschaft, und bei Bedarf gibt es eine Konvertierungsfunktion (doc.convertCoordinate) der den Offset von der Mitte ausgeht.

Hier ist ein Snippet, das zeigt, wie Sie X-, y -Werte für Symbole in Illustrator abrufen, die später in ActionScript verwendet werden können (unter Verwendung der Koordinatensystemkonvertierung):

var doc = app.activeDocument;
var hasDocCoords = app.coordinateSystem == CoordinateSystem.DOCUMENTCOORDINATESYSTEM;
var sel = doc.selection;
var selLen = sel.length;
var code = 'var pointsOnMap:Vector.<Vec> = Vector.<Vec>([';
for(var i = 0 ; i < selLen ; i++){
    var pos = hasDocCoords ? doc.convertCoordinate (sel[i].position, CoordinateSystem.DOCUMENTCOORDINATESYSTEM, CoordinateSystem.ARTBOARDCOORDINATESYSTEM) : sel[i].position;
    code += 'new Vec('+(pos[0] + (sel[i].width * .5)).toFixed(2) + ' , ' + Math.abs((pos[1] - (sel[i].height*.5))).toFixed(2);//Math.abs(pos-height) - same for both coord systems ?
    if(i < selLen-1) code +=  '),';
    else                 code +=  ')]);pointsOnMap.fixed=true;';
 }
$.writeln(code);

Weitere Informationen finden Sie in diesem Faden in die Adobe -Foren.

Andere Tipps

Das obige Beispiel ist gut, ist aber für eine sehr spezifische Aufgabe. Hier ist eine Funktion, die die korrekte Koordinatenkonvertierung ausführt und das Zentrum zurückgibt:

function convertPoint(item){
    var pos = doc.convertCoordinate (item.position, CoordinateSystem.DOCUMENTCOORDINATESYSTEM, CoordinateSystem.ARTBOARDCOORDINATESYSTEM);
    pos[0] += item.width * 0.5;
    pos[1] = Math.abs(pos[1] - (item.height * 0.5));
    return pos;
}

Sie müssen den Artikel nicht übergeben. Und ich muss entlüften: Die Notwendigkeit, dies zu tun, ist keine gute Idee.

Der Punkt ist ein Array der Positionen. Also, um die Koordinaten zu erhalten:

x = app.activeDocument.selection[0].position[0];

y = app.activeDocument.selection[0].position[1];
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top