Как получить положение выбранного PathItem Illustrator в пикселях, используя? - PullRequest
4 голосов
/ 30 января 2011

У меня есть простая проблема, но, похоже, я не могу ее обойти: у меня есть PathItem, и Illustrator указывает, что она находится в позиции (781px, 250px).

Как я могу их получитьзначения в jsx?

Я заметил, что PathItem наследует свойство position от PageItem , а position это Point , но когдаЯ пытаюсь напечатать значения, я получаю undefined :

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

Если я опускаю .x из строки выше, я получаю это напечатано в консоли:

521,510

Что это за значения?Это координаты x, y?В каком блоке?Как я могу преобразовать в пиксели?

Почему я не могу получить доступ к свойствам x, y / top, left?

Я использую Illustrator CS5.

Ответы [ 3 ]

5 голосов
/ 26 марта 2011

@ ответ bradido полезен, он неполон.

Кажется, у Illustrator разные системы координат: система координат документа и система координат монтажной области. Один из них имеет источник в центре документа, а другой - в левом верхнем углу. Кроме того, значения Y увеличиваются.

Целесообразно сначала проверить систему координат, используя свойство app.coordinateSystem, и при необходимости есть функция преобразования (doc.convertCoordinate), которая обрабатывает смещение от центра.

Вот фрагмент кода, который демонстрирует, как получить значения x, y для символов в Illustrator, которые впоследствии можно будет использовать в ActionScript (с использованием преобразования системы координат):

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

Подробнее см. В этой теме на форумах Adobe .

2 голосов
/ 25 июля 2012

Приведенный выше пример хорош, но для очень конкретной задачи. Вот функция, которая сделает правильное преобразование координат и вернет центр:

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

Вы должны передать пункт не суть. И я должен сказать: необходимость сделать это не очень хорошая идея.

1 голос
/ 15 февраля 2011

Точка - это массив позиций. Итак, чтобы получить координаты:

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

y = app.activeDocument.selection[0].position[1];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...