如何使用以像素为单位获取所选Illustrator PathItem的位置?

时间:2011-01-30 01:25:11

标签: adobe-illustrator jsx

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

如何在jsx中获取这些值?

我注意到 PathItem PageItem 继承了position属性,并且位置 是,但是当我尝试打印值时,我得到 undefined

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

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

521,510

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

为什么我无法访问x,y / top,left属性?

我正在使用Illustrator CS5。

3 个答案:

答案 0 :(得分:5)

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

Illustrator似乎有不同的坐标系:文档坐标系和画板坐标系。一个原点位于文档的中心,而另一个原点位于左上角。此外,它的Y值也会增加。

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

这是一个片段,演示了如何在Illustrator中检索符号的x,y值,以后可以在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);

有关详细信息,请参阅此thread on the Adobe Forums

答案 1 :(得分: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;
}

你必须通过ITEM而不是重点。我必须发泄:这样做的必要性不是一个好主意。

答案 2 :(得分:1)

Point是一系列职位。所以要获得坐标:

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

y = app.activeDocument.selection[0].position[1];