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 プロパティにアクセスできないのはなぜですか?

イラストレーターCS5を使用しています。

4

3 に答える 3

5

@bradidoの答えは役に立ちますが、不完全です。

Illustrator にはさまざまな座標系があるようです。ドキュメント全体の座標系と、現在アクティブなアートボードに基づく 2 番目の座標系です (複数定義されている場合がありますが、一度に「アクティブ」になるのは 1 つだけです)。もう一方は原点が左上にあります。また、Y 値は上方に増加します。

最初にプロパティを使用して座標系を確認するのが賢明app.coordinateSystemです。必要に応じdoc.convertCoordinateて、中心からのオフセットを処理する変換関数 ( ) があります。

以下は、Illustrator でシンボルの x、y 値を取得する方法を示すスニペットです。後でアクション スクリプトで使用できます (座標系変換を使用)。

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

詳細については、アドビ フォーラムのこのスレッドを参照してください。

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

ポイントではなくITEMを渡す必要があります。そして、私は発散する必要があります。これを行う必要があるのは良い考えではありません。

于 2012-07-24T22:48:12.053 に答える