Illustratorでのオブジェクトとアートボードの並び替え
先日、次のようなアートワークを作成する機会がありました。
その際、次のような点で困ることがありました。
見た目の並びとアートボードの並びが一致しないため、[アートボードの再配置]を行うと、ナンバリングが狂ってしまう
選択したテキストをナンバリングするスクリプト「Add Texts」を実行すると、願うとおりにナンバリングされない
タイトな進行だったため、その場ではチカラ技でやっつけましたが、改めて調べてみた。
アートボードを見た目どおりにソートする
Adobe Support Communityのillustrator script to Renumber/Reorder the Artboards with there positionというスレッドにて話題になっていました。
Correct answer by m1bのスクリプトを実行すると、次のダイアログボックスが開きますので、望むオプションを選択して実行します。
しかし、多くの場合、「左上から」を選択します。そこで、25行目からを次のように変更するとダイアログボックスをスキップして実行されます。
var settings = {
action: sortArtboards,
sortMethod: SortMethod.POSITION_TOP_LEFT,
decimalPlaces: 3,
showUI: false
};
ありがたい。
オブジェクトの重ね順をソートする
Adobe Support CommunityにてAuto-arrange per Y value (position)というスレッドが立っていました。
Correct answer、および別案のスクリプトともに自分の環境では動きませんでした。
ChatGPTに聞いてみたところ、動くスクリプトを書いてくれました。
現在アクティブなアートボードのアイテムを見た目の順番通りに再配置するためのJavaScript
// ドキュメントとアクティブなアートボードを取得
var doc = app.activeDocument;
var artboard = doc.artboards[doc.artboards.getActiveArtboardIndex()];
// アクティブなアートボード上の全てのアイテムを取得
var items = [];
for (var i = 0; i < doc.pageItems.length; i++) {
var item = doc.pageItems[i];
if (artboard.artboardRect[0] <= item.position[0] &&
artboard.artboardRect[1] >= item.position[1] &&
artboard.artboardRect[2] >= item.position[0] + item.width &&
artboard.artboardRect[3] <= item.position[1] - item.height) {
items.push(item);
}
}
// アイテムをy座標の降順にソート
items.sort(function(a, b) {
return b.position[1] - a.position[1];
});
// アイテムの重ね順を更新
for (var i = 0; i < items.length; i++) {
items[i].zOrder(ZOrderMethod.BRINGTOFRONT);
}
alert("アイテムの重ね順が更新されました。");
複数のアートボードにまたがるオブジェクト全てを対象する場合
// ドキュメントを取得
var doc = app.activeDocument;
// 全てのアイテムを取得
var items = [];
for (var i = 0; i < doc.pageItems.length; i++) {
items.push(doc.pageItems[i]);
}
// アイテムをy座標の降順にソート
items.sort(function(a, b) {
return b.position[1] - a.position[1];
});
// アイテムの重ね順を更新
for (var i = 0; i < items.length; i++) {
items[i].zOrder(ZOrderMethod.BRINGTOFRONT);
}
alert("アイテムの重ね順が更新されました。");
アイテムのx座標を基にソートして再配置:アイテムをx座標の昇順(左から右)にソート
// ドキュメントを取得
var doc = app.activeDocument;
// 全てのアイテムを取得
var items = [];
for (var i = 0; i < doc.pageItems.length; i++) {
items.push(doc.pageItems[i]);
}
// アイテムをx座標の昇順にソート
items.sort(function(a, b) {
return a.position[0] - b.position[0];
});
// アイテムの重ね順を更新
for (var i = 0; i < items.length; i++) {
items[i].zOrder(ZOrderMethod.BRINGTOFRONT);
}
alert("アイテムの重ね順が更新されました。");
数字での並び替え
Adobe Support CommunityのSort Objects by number scriptというスレッドにて、レイヤー名を使ってのソートが話題になっていました。
自分の環境では動きませんでした。
Randomill
Randomillという非常に多機能なプラグイン(有料:39ドル)があります。
その中の「Arrange and Sort Layer Order Illustrator Script」を利用することができます。
レイヤーのフィルタリング
2023年6月リリースのIllustrator 2023(27.6.1)からレイヤーのフィルタリングができるようになりました。
この中に「非表示」というフィルターがあります。
一番下の[非表示]を使ってフィルタリングすると、次の図のように非表示のオブジェクトのみが[レイヤー]パネルに表示されます。
ユースケースとしては“逆”で、アートボード上で表示されているオブジェクトのみを[レイヤー]パネルに表示したいと思うですよね…
番外編
レイヤーの重なり順を逆順にするスクリプト
見た目の並びを逆にするスクリプト
※すぐれものです。人生変わる。
ダウンロード
ここから先は
DTP Transit 定期購読マガジン
マガジン限定記事やサンプルファイルをダウンロードできます。
定期マガジンを購読されるとサンプルファイルをダウンロードいただけます。 https://note.com/dtp_tranist/m/mebd7eab21ea5