Illustrator CS3〜6編 特定の座標範囲内の図形を選択

今回は指定された範囲内にある図形を選択するスクリプトです。自分で作成したデータではなく、相手先からもらうデータの中には、右上にある図形に対して処理を行いたい場合があります。そんな時には特定の座標範囲にある図形だけを選択する必要があります。
以下のスクリプトはCS3/CS4用であらかじめ決められた範囲内にある図形を選択します。


// 特定の座標範囲内の図形を選択
var sx1 = 0; // 選択左座標
var sy1 = 100; // 選択上座標
var sx2 = 300; // 選択右座標
var sy2 = 2000; // 選択下座標
selectItemsXY(sx1, sx2, sy1, sy2);
// 指定された座標内にある図形を選択
function selectItemsXY(sx1, sx2, sy1, sy2){
var items = app.activeDocument.pageItems;
for(var i=0; i<items.length; i++){
var rect = items[i].geometricBounds;
var x1 = rect[0];
var y1 = rect[1];
var x2 = rect[2];
var y2 = rect[3];
if ((x1>=sx1)&&(x2<=sx2) && (y1>=sy1)&&(y2<=sy2)){
items[i].selected = true;
}else{
items[i].selected = false;
}
}
}

毎回入力して範囲を指定したい場合は以下のようになります。これもCS3/CS4用です。

// 特定の座標範囲内の図形を選択
(function(){
var sx1 = prompt("選択開始X座標", 0);
if (!sx1){ return; }
var sy1 = prompt("選択開始Y座標", 10);
if (!sy1){ return; }
var sx2 = prompt("選択終了X座標", 3000);
if (!sx2){ return; }
var sy2 = prompt("選択終了Y座標", 2000);
if (!sy2){ return; }
sx1 = parseFloat(sx1); // 数値型に変換
sx2 = parseFloat(sx2);
sy1 = parseFloat(sy1);
sy2 = parseFloat(sy2);
var items = app.activeDocument.pageItems;
for(var i=0; i<items.length; i++){
var rect = items[i].geometricBounds;
var x1 = rect[0];
var y1 = rect[1];
var x2 = rect[2];
var y2 = rect[3];
if ((x1>=sx1)&&(x2<=sx2) && (y1>=sy1)&&(y2<=sy2)){
items[i].selected = true;
}else{
items[i].selected = false;
}
}
})();

上記のスクリプトはCS5以降では動作はしますが、CS3/CS4の座標系になれた人では感覚的に指定が難しいと思います。CS5以降でも原点が左下にある座標系で指定したい場合は上記のスクリプトを以下のように変更してください。

var x1 = rect[0];
var y1 = rect[1];
var x2 = rect[2];
var y2 = rect[3];

  ↓

var x1 = rect[0];
var y2 = -rect[1];
var x2 = rect[2];
var y1 = -rect[3];

[サンプルをダウンロード]