4

我有一个简单的问题,但似乎找不到解决方法:我有 PathItem,Illustrator 指出它在位置 (781px,250px)。

如何在 jsx 中获取这些值?

我注意到PathItem 从 PageItem继承了 position 属性,并且 position 是一个Point,但是当我尝试打印这些值时,我得到undefined

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

如果我从上面的行中省略 .x,我会在控制台中打印出来:

521,510

这些价值观是什么?它们是 x,y 坐标吗?在什么单位?如何转换为像素?

为什么我不能访问 x,y/top,left 属性?

我正在使用 Illustrator CS5。

4

3 回答 3

5

@bradido 的回答很有帮助,但不完整。

似乎 Illustrator 有不同的坐标系:一个整体文档坐标系和一个基于当前活动画板的第二个坐标系(您可能定义了几个,但一次只有一个是“活动的”。)一个的原点位于画板的中心文档,而另一个文档的原点位于左上角。它的 Y 值也向上增加。

首先使用app.coordinateSystem属性检查坐标系是明智的,如果需要,有一个转换函数 ( doc.convertCoordinate) 来处理与中心的偏移。

这是一个片段,演示了如何在 Illustrator 中检索符号的 x,y 值,稍后可以在 actionscript 中使用(使用坐标系转换):

var doc = app.activeDocument;
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 = doc.convertCoordinate(sel[i].position, app.coordinateSystem, CoordinateSystem.ARTBOARDCOORDINATESYSTEM);
    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);

有关更多详细信息,请参阅Adob​​e 论坛上的此主题

于 2011-03-26T19:11:23.720 回答
2

Point 是一个位置数组。所以要获得坐标:

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

y = app.activeDocument.selection[0].position[1];
于 2011-02-14T21:06:35.367 回答
2

上面的示例很好,但适用于非常具体的任务。这是一个将进行正确的坐标转换并返回中心的函数:

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

您必须通过项目而不是重点。我必须发泄:需要这样做不是一个好主意。

于 2012-07-24T22:48:12.053 回答