クリエイター手抜きプロジェクト[608]Adobe Illustrator CS6〜2020編 属性パネルの内容検索
── 古籏一浩 ──

投稿:  著者:



今回は、Illustratorの属性パネルに入力することができる、注釈/メモの内容を検索するスクリプトです。Illustratorはオブジェクト(図形)ごとに注釈/メモしておく機能があります(さすがに1文字ごとはできません)。

この機能はIllustrator 88の時からありました。当時は線種や塗りを一括して行なうダイアログの、右下のテキストボックスに入力するようになっていました。現在ではオブジェクトを選択し、属性パネルのテキストボックス内に入力することができます。

入力できる文字は自由なので、場合によっては入力内容をキーにして処理することもできます。スクリプトでもnoteプロパティとして読み書きできる便利な機能です。




ただ、この注釈/メモの内容はIllustratorの検索機能を使うことができません。このため、キーとなる内容を入力しておいても、それを検索して利用することができません。

ということで、注釈/メモの内容を検索するスクリプトです。いずれのスクリプトも、実行すると最初に文字を入力するダイアログが表示されます。

最初は注釈/メモの内容と完全一致した場合に、対象となるオブジェクトを選択するスクリプトです。

// 属性内容を検索して完全一致したオブジェクトを選択
(function(){
var text=prompt("検索する文字を入れてください","");
if(!text){ return; }
app.activeDocument.selection=null; // 選択解除
var pObj=app.activeDocument.pageItems;
for(var i=0; i<pObj.length; i++){
if(text==pObj[i].note){
pObj[i].selected=true;
}
}
})();


次のスクリプトは、文字列のどこか一部分でも一致していれば選択します。

// 属性内容を検索して部分一致したオブジェクトを選択
(function(){
var text=prompt("検索する文字を入れてください","");
if(!text){ return; }
app.activeDocument.selection=null; // 選択解除
var pObj=app.activeDocument.pageItems;
for(var i=0; i<pObj.length; i++){
if(pObj[i].note.indexOf(text)>-1){
pObj[i].selected=true;
}
}
})();


次のスクリプトは、正規表現での検索になります。ただし、正規表現文字列の中で、ワイルドカードを示す「*」は、そのまま入力するとエラーで処理されません。「\\*」と入力する必要があります。

正規表現文字列で「(黒|赤)い四角形」と指定すると(ダイアログで入力すると)、「黒い四角形」か「赤い四角形」の内容に一致したオブジェクトが選択されます。

実際に使うとなると、なかなか微妙なので、次のOR,AND検索のスクリプトの方がよいかもしれません。

// 属性内容が正規表現と一致したオブジェクトを選択
(function(){
var text=prompt("検索する正規表現文字を入れてください","");
if(!text){ return; }
app.activeDocument.selection=null; // 選択解除
var pObj=app.activeDocument.pageItems;
for(var i=0; i<pObj.length; i++){
try{
if(new RegExp(text,"gi").test(pObj[i].note)){
pObj[i].selected=true;
}
}catch(e){
alert("正規表現文字列が不正です");
}
}
})();


次のスクリプトは、複数のキーワードを入力すると、入力したキーワードのいずれか一つにマッチした場合に該当するオブジェクトを選択します。(OR検索)キーワードは全角空白で区切って入力します。例えば「赤 ボックス」や「黒 テキスト 50%」といった具合です。


// 属性内容を検索して複数の単語に1つでも一致したオブジェクトを選択
(function(){
var text=prompt("検索する文字を全角空白区切りで入れてください","");
if(!text){ return; }
var word=text.split(" "); // 全角空白で分割して配列にする
app.activeDocument.selection=null; // 選択解除
var pObj=app.activeDocument.pageItems;
for(var i=0; i<pObj.length; i++){
for(var j=0; j<word.length; j++){
if(pObj[i].note.indexOf(word[j])>-1){
pObj[i].selected=true;
}
}
}
})();

最後のスクリプトは、複数のキーワードを入力すると、入力したキーワードすべてに一致した場合に該当するオブジェクトを選択します。(AND検索)

AND検索の場合、他のスクリプトとは異なり一工夫しないといけません。Illustratorには、オブジェクトのIDを示すプロパティがないためです。内部ではあるのかもしれませんが、スクリプトからはアクセスできません。InDesignではオブジェクトごとにIDが用意されているのですが、最新版のIllustrator 2020でも存在しません。(id, uniqueIDなどがない)

仕方ないので、オブジェクトのX,Y,Z座標値から固有の値を求めています。Illustratorでは図形の重なり(前後)の関係でX,Y,Zが完全に一致することがありません。そこでX座標、Y座標を数10倍にし最後にZ座標を加算しIDとしています。IDさえ作ってしまえば、あとは連想配列(ハッシュ)を使って処理するだけです。

// 属性内容を検索して複数の単語にすべて一致したオブジェクトを選択
(function(){
var text=prompt("検索する文字を全角空白区切りで入れてください","");
if(!text){ return; }
var pList=[]; // AND検索用の配列
var word=text.split(" "); // 全角空白で分割して配列にする
app.activeDocument.selection=null; // 選択解除
var pObj=app.activeDocument.pageItems;
for(var j=0; j<word.length; j++){
for(var i=0; i<pObj.length; i++){
if(pObj[i].note.indexOf(word[j])>-1){
pObj[i].selected=true;
try{
var id=(pObj[i].left*10000000000)+(pObj[i].top*100000)+(pObj[i].zOrderPosition);
id="x"+id; // 文字列に変換
if(!pList[id]){
pList[id]=[1,pObj[i]]; // 初回なので1をセット
}else{
pList[id][0]+=1; // 選択された回数を増やす
}
}catch(e){}
}
}
}
// 該当オブジェクトを選択状態にする
app.activeDocument.selection=null;
for(var i in pList){
if(pList[i][0]==word.length){
pList[i][1].selected=true;
}
}
})();

OR検索、AND検索とも全角空白ではなく、他の文字で区切りたい場合は、以下の行の " " の文字を変更してください。例えば、以下のようにすると半角の,(コンマ)が区切り文字になります。

var word=text.split(" "); // 全角空白で分割して配列にする
 ↓
var word=text.split(","); // ,で分割して配列にする


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


今年はどう見ても水が少ないので、田んぼは半分だけ作る予定。もっとも、人手がないので、一人でも全部できる作付面積にしておかないと後が大変なので。

・みんなのobniz入門
https://www.amazon.co.jp/dp/4865942165/


・InDesign自動化サンプルプログラム逆引きリファレンス上/下
https://www.amazon.co.jp/dp/4844396846/

https://www.amazon.co.jp/dp/4844396854/


・創って学ぼうプログラミング
https://news.mynavi.jp/series/makeprogram


・みんなのIchigoLatte入門 JavaScriptで楽しむゲーム作りと電子工作
https://www.amazon.co.jp/dp/4865940936

[正誤表]
http://www.openspc2.org/book/error/ichigoLatte/


・After Effects自動化サンプルプログラム 上巻、下巻
https://www.amazon.co.jp/dp/4844397591

https://www.amazon.co.jp/dp/4844397605


・IchigoLatteでIoT体験
https://www.amazon.co.jp/dp/B06X3X1CHP

http://digiconcart.com/dccartstore/cart/info/2561/218591


・みんなのIchigoJam入門 BASICで楽しむゲーム作りと電子工作
http://www.amazon.co.jp/dp/4865940332/


・Photoshop自動化基本編
http://www.amazon.co.jp/dp/B00W952JQW/


・Illustrator自動化基本編
http://www.amazon.co.jp/dp/B00R5MZ1PA/


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


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