¿Cómo obtengo la posición del Pathitem Illustrator seleccionado en los píxeles que usan?

StackOverflow https://stackoverflow.com/questions/4840595

  •  27-10-2019
  •  | 
  •  

Pregunta

Tengo un problema simple, pero parece que no puedo encontrar mi camino a su alrededor: tengo Pathitem e Illustrator señala que está en la posición (781px, 250px).

¿Cómo puedo obtener esos valores en JSX?

He notado que el Patatamento hereda la propiedad de la posición de PageIm, y la posición es un Punto, pero cuando intento imprimir los valores, obtengo indefinido:

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

Si echo de lado .x de la línea anterior, lo impreso en la consola:

521,510

¿Cuáles son estos valores? ¿Son coordenadas X, Y? ¿En qué unidad? ¿Cómo puedo convertir a píxeles?

¿Por qué no puedo acceder a las propiedades X, Y/Top e izquierda?

Estoy usando Illustrator CS5.

¿Fue útil?

Solución

La respuesta de @Bradido es útil, está incompleta.

Parece que Illustrator tiene diferentes sistemas de coordenadas: un sistema de coordenadas de documentos y un sistema de coordenadas de tablero de arte. Uno tiene el origen en el centro del documento, mientras que el otro tiene el origen en la parte superior izquierda. También son los valores Y aumentando hacia arriba.

Es aconsejable verificar primero el sistema de coordenadas utilizando el app.coordinateSystem propiedad, y si es necesario, hay una función de conversión (doc.convertCoordinate) que maneja el desplazamiento desde el centro.

Aquí hay un fragmento que demuestra cómo recuperar valores X, Y para símbolos en Illustrator, que luego se puede usar en ActionScript (utilizando la conversión del sistema de coordenadas):

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

Para más detalles, vea esto hilo en los foros de Adobe.

Otros consejos

El ejemplo anterior es bueno pero es para una tarea muy específica. Aquí hay una función que hará la conversión de coordenadas correcta y devolverá el centro:

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

Debe pasar el artículo, no el punto. Y debo desahogarme: la necesidad de hacer esto no es una buena idea.

El punto es una matriz de las posiciones. Entonces, para obtener las coordenadas:

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

y = app.activeDocument.selection[0].position[1];
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top