クリエイター手抜きプロジェクト[372]Adobe Illustrator CS4〜CC編 アクティブなアートボード外のパスを削除する/古籏一浩

投稿:  著者:  読了時間:7分(本文:約3,100文字)


Illustrator CS4以降では複数のアートボードを持つことができます。CS3までは一枚のアートボードだったのが複数になっただけでなく、自由に配置できるようになりました。

CS4以降では複数のアートボードが使えるようになり便利になりました。しかし、プログラムで何か処理しようとすると、アートボード関係の処理は面倒な部分もあります。用意されている命令が少ないというのもありますが、どのアートボードがアクティブなのかによって、読み出されるパスの座標が変わってしまうからです。


ということで本題です。いろいろ描いていると、最後にアートボードからはみだしているパスなどを削除したい場合があります。そんな時に便利なのが以下のスクリプトです。アクティブになっているアートボードに、完全に収まっていないパス/テキストを一括して削除します。


// アクティブになっているアートボード内にあるパスだけ残す
// ドキュメント全体から該当パスを削除
removePath(activeDocument.pathItems);
// ドキュメント全体から該当テキストフレームを削除
removePath(activeDocument.textFrames);
// パスを削除する関数
function removePath(p){
// アクティブにアートボードのインデックス番号を求める
var abIndex = app.activeDocument.artboards.getActiveArtboardIndex();
// アクティブなアートボードのサイズを求める
var rect = app.activeDocument.artboards[abIndex].artboardRect;
var ax1 = rect[0];
var ay1 = -rect[1];
var ax2 = rect[2];
var ay2 = -rect[3];
for(var i=p.length-1; i>=0; i--){
var geo = p[i].geometricBounds;
if (!geo){ continue; }
var x1 = geo[0];
var y1 = -geo[1];
var x2 = geo[2];
var y2 = -geo[3];
// アートボード内に完全に座標値が収まっているか調べる
if((x1>=ax1) && (y1>=ay1)&&(x2<=ax2)&&(y2<=ay2)) {
// アートボード内に収まっている場合に処理したい場合は、ここで何か行う
}else{
// 削除する
p[i].remove();
}
}
}


作成するデータは、完全にアートボードに収まっていないこともあります。そこで、完全にアクティブなアートボードからはみだしているパス/テキストを削除するのが、以下のスクリプトです。


// アクティブになっているアートボード内にあるパスだけ残す
// ドキュメント全体から該当パスを削除
removePath(activeDocument.pathItems);
// ドキュメント全体から該当テキストフレームを削除
removePath(activeDocument.textFrames);
// パスを削除する関数
function removePath(p){
// アクティブにアートボードのインデックス番号を求める
var abIndex = app.activeDocument.artboards.getActiveArtboardIndex();
// アクティブなアートボードのサイズを求める
var rect = app.activeDocument.artboards[abIndex].artboardRect;
var ax1 = rect[0];
var ay1 = -rect[1];
var ax2 = rect[2];
var ay2 = -rect[3];
//$.writeln("artboard:("+ax1+","+ay1+")-("+ax2+","+ay2+")");
for(var i=p.length-1; i>=0; i--){
var geo = p[i].geometricBounds;
if (!geo){ continue; }
var x1 = geo[0];
var y1 = -geo[1];
var x2 = geo[2];
var y2 = -geo[3];
//$.writeln("("+x1+","+y1+")-("+x2+","+y2+")");
// アートボード内に少しでも座標値が収まっているか調べる
if (x2 < ax1){ p[i].remove(); continue; }
if (x1 > ax2){ p[i].remove(); continue; }
if (y2 < ay1){ p[i].remove(); continue; }
if (y1 > ay2){ p[i].remove(); continue; }
// 完全にアートボード内なので何か処理したい場合は、以下に何か入れる
}
}


【古籏一浩】openspc@alpha.ocn.ne.jp
< http://www.openspc2.org/ >

Kindle Fire HDXのネタにしようかと思ったのですが、それほど使ってないので来年のネタにでも。もうひとつ、月末にネタになるタブレットが来るのですが、それもまた来年に。とにかく後は何でも来年に先送り……。

いや〜、そこまでKoboに注力するとは、さすがですね楽天。

・球場名は「楽天Koboスタジアム」に
< http://www3.nhk.or.jp/news/html/20131214/k10013827721000.html >

ただ、私のサイトの電子書籍関係のアクセス数見ると方向性はあっているんで、とにかく購入できる本を増やさないとどうしようもないかな、と。老人でも使えるように最初から設定してから売ればいいのに。キャリアと契約して売ればいいと思うのですけど……ということでKobo aura使い方辞典も用意してみました。

・Kobo aura 使い方辞典
< http://www.openspc2.org/reibun/kobo/aura/ >

しょうもないのを考えたけど、また編集長にカッコつきで何か書かれそうだけど、思いついたので載せるだけ載せておきます。

幽霊に取り憑かれやすい人とかけて、公衆でのスマートフォンととく……その心は「音量(怨霊)に気をつけています」

ということで、また来年(の前、大晦日に何か書くのがあったなあ)

・Sony Reader T3S使い方辞典
< http://www.openspc2.org/reibun/Sony/Reader/PRS-T3S/ >

・Adobe JavaScriptリファレンス
< http://www.amazon.co.jp/dp/4844395955 >

・ハイビジョン映像素材集
< http://www.openspc2.org/HDTV/ >

・Nexus 7(アンドロイドタブレット)使い方辞典
< http://www.openspc2.org/reibun/Android/Nexus7/ >

・JavaScript逆引きハンドブック
< http://www.amazon.co.jp/dp/4863541082 >

・クリエイター手抜きプロジェクト
< http://www.openspc2.org/projectX/ >

・Adobe Illustrator CS3 + JavaScript 自動化サンプル集
< http://www.openspc2.org/book/PDF/Adobe_Illustrator_CS3_JavaScript_Book/ >
吉田印刷所の「印刷の泉」でも購入できるようになりました。