クリエイター手抜きプロジェクト[389]Adobe Illustrator CS3〜CC編 レイヤーを名前順に並び替える/古籏一浩

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


今回は、Illustratorでレイヤーを名前順に並び替えるスクリプトです。レイヤー名を、昇順または降順に並び替えることができます。


以下のスクリプトを使うと、最初の階層のレイヤーを並び替えます。レイヤー内にさらにレイヤーがある場合、その中のレイヤーは並び替えません。

Illustratorではレイヤー名に数字を使用していると、layers[]で正しく参照できないことがあるので、一時的にレイヤー名を文字列にしてから処理をして、最後に元に戻しています。

同様に、ロック状態や不可視状態にあるとエラーになるので、これらの状態も最初に保存しておいて、最後に戻すようにしています。


// レイヤーをソートする
(function sortLayer(layObj){
var nameList = []; // 名前を入れる配列
var lockList = []; // ロック状態を入れる配列
var visibleList = []; // 表示状態を入れる配列
for(var i=0; i<layObj.length; i++){
layObj[i].name = "_"+layObj[i].name;
// 名前とロック状態、可視状態を保存しておく
nameList[i] = layObj[i].name;
lockList[nameList[i]] = layObj[i].locked;
layObj[i].locked = false;
visibleList[nameList[i]] = layObj[i].visible;
layObj[i].visible = true;
}
// レイヤーを昇順に並べ替え
nameList = nameList.sort();
var flag = confirm("降順にしますか?");
if (flag == true){
// レイヤー名を降順に並べ替える
nameList.reverse();
}
// 挿入基準のレイヤーを一番上に移動する
var baseLayObj = layObj[nameList[0]];
baseLayObj.move(layObj[0], ElementPlacement.PLACEBEFORE);
// レイヤーを並べ替え
for(var i=1; i<nameList.length; i++){
var aLay = layObj[nameList[i]];
aLay.move(baseLayObj, ElementPlacement.PLACEBEFORE);
}
// 最初のレイヤーを移動
baseLayObj.move(layObj[0], ElementPlacement.PLACEBEFORE);
// 名前とロック状態、可視状態を元に戻す
for(var i=0; i<layObj.length; i++){
layObj[i].locked = lockList[nameList[i]];
layObj[i].visible = visibleList[nameList[i]];
layObj[i].name = layObj[i].name.substr(1, 99999);
}
})(activeDocument.layers);


Illustratorのレイヤーには、さらにレイヤーを内包することができます。以下のスクリプトはレイヤー内にレイヤーがある場合、その内部のレイヤーを並び替えます。ただし、選択したレイヤーの下の階層のみ並べ替えを行うだけで、さらに深い階層のレイヤーは並べ替えません。


// 選択されたレイヤーセット内のレイヤーをソートする
function sortLayer(layObj){
var nameList = []; // 名前を入れる配列
var lockList = []; // ロック状態を入れる配列
var visibleList = []; // 表示状態を入れる配列
for(var i=0; i<layObj.length; i++){
layObj[i].name = "_"+layObj[i].name;
// 名前とロック状態、可視状態を保存しておく
nameList[i] = layObj[i].name;
lockList[nameList[i]] = layObj[i].locked;
layObj[i].locked = false;
visibleList[nameList[i]] = layObj[i].visible;
layObj[i].visible = true;
}
// レイヤーを昇順に並べ替え
nameList = nameList.sort();
var flag = confirm("降順にしますか?");
if (flag == true){
// レイヤー名を降順に並べ替える
nameList.reverse();
}
// 挿入基準のレイヤーを一番上に移動する
var baseLayObj = layObj[nameList[0]];
baseLayObj.move(layObj[0], ElementPlacement.PLACEBEFORE);
// レイヤーを並べ替え
for(var i=1; i<nameList.length; i++){
var aLay = layObj[nameList[i]];
aLay.move(baseLayObj, ElementPlacement.PLACEBEFORE);
}
// 最初のレイヤーを移動
baseLayObj.move(layObj[0], ElementPlacement.PLACEBEFORE);
// 名前とロック状態、可視状態を元に戻す
for(var i=0; i<layObj.length; i++){
layObj[i].locked = lockList[nameList[i]];
layObj[i].visible = visibleList[nameList[i]];
layObj[i].name = layObj[i].name.substr(1, 99999);
}
}
(function (){
if(activeDocument.activeLayer.layers.length == 0){
alert("サブレイヤーがあるレイヤーを選択してください");
return;
}
sortLayer(activeDocument.activeLayer.layers);
})();


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

来週6月2日(月)に「データビジュアライゼーションのためのD3.js徹底入門」が出ます。D3.jsでデータビジュアライゼーションを実現したいと思っていている方はぜひどうぞ。

D3.jsは以下のような表現ができるJavaScriptライブラリです。(頑張れば、の話ですが)

・D3.jsギャラリー(こんなビジュアル表現ができます)
< https://github.com/mbostock/d3/wiki/Gallery >

Flashはスマートフォンでは動作しない時代になって、JavaScriptでどうグラフを表現するか困っている人には役立つはずです。書籍ではWebGL (3D) での表示に関しても多少解説しています。


・データビジュアライゼーションのためのD3.js徹底入門
< http://www.amazon.co.jp/dp/4797368861 >

・D3.js例文辞典
< http://www.openspc2.org/reibun/D3.js/ >

・ExtendScript Toolkit(ESTK)基本編
< http://www.amazon.co.jp/dp/B00JUBQKKY/ >

・ExtendScript Toolkit(ESTK)基本編(紙バージョン)
< http://www.amazon.co.jp/dp/4844396137/ >

・ExtendScript Toolkit(ESTK)基本編(iBooks)
< https://itunes.apple.com/jp/book/extendscript-toolkit-estk/id868057300 >

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

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

・Adobe CS2〜CS6,CC JavaScriptリファレンス&ライブラリ
< http://www.openspc2.org/reibun/AdobeJS/index.html >

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

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

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

・Adobe Illustrator CS3 + JavaScript 自動化サンプル集
< https://www.ddc.co.jp/estore/cgi/item/start.cgi?m=DetailViewer&record_id=243 >
吉田印刷所の「印刷の泉」でも購入できるようになりました。