Adobe Illustrator CS5〜CC編 アートボード別にSVG保存する(2)

今回はIllustratorのアートボードのネタです。以前作成したスクリプトはアクティブになっているアートボードが対象でしたが、作成するものによっては複数のアートボードにまたがることがあります。

このような場合、複数のアートボードからはみ出しているパス/テキストだけを削除したい場合があります。とはいっても、いきなり削除されてしまうと怖いものがあるので、今回はすべてのアートボードからはみ出しているパス/テキストだけを選択するようにしました。

このスクリプトを実行すると、アートボードから完全にはみ出しているパス/テキストが選択されます。削除したい場合は、そのままdeleteキーを押せばOKです。

ということでスクリプトは以下のようになります。結構面倒だったので、今回はこれだけです。

// アクティブになっているアートボード内にあるパスだけ残す
// 最初に全ての選択を解除しておく
for(var i=0; i<activeDocument.pathItems.length; i++){
activeDocument.pathItems[i].selected = false;
}
for(var i=0; i<activeDocument.textFrames.length; i++){
activeDocument.textFrames[i].selected = false;
}
// ドキュメント全体から該当パスを選択
removePath(activeDocument.pathItems);
// ドキュメント全体から該当テキストフレームを選択
removePath(activeDocument.textFrames);

// パスを削除する関数
function removePath(p){
for(var i=p.length-1; i>=0; i--){
// アートボードの数だけ繰り返す
var flag = 0;
for(var artNo=0; artNo<activeDocument.artboards.length; artNo++){
// アートボードをアクティブにする
app.activeDocument.artboards.setActiveArtboardIndex(artNo);
// アクティブなアートボードのサイズを求める
var rect = app.activeDocument.artboards[artNo].artboardRect;
var ax1 = rect[0];
var ay1 = -rect[1];
var ax2 = rect[2];
var ay2 = -rect[3];
// パスの座標を読み出す
var geo = p[i].geometricBounds;
if (!geo){ break; }
var x1 = geo[0];
var y1 = -geo[1];
var x2 = geo[2];
var y2 = -geo[3];
// アートボード内に完全に座標値が収まっているか調べる
if (x2 < ax1){ continue; }
if (x1 > ax2){ continue; }
if (y2 < ay1){ continue; }
if (y1 > ay2){ continue; }
// アートボード内に収まっているのでフラグを立てる
flag = true;
}
p[i].selected = flag;
}
}


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