見出し画像

Illustratorでのオブジェクトとアートボードの並び替え

先日、次のようなアートワークを作成する機会がありました。

その際、次のような点で困ることがありました。

タイトな進行だったため、その場ではチカラ技でやっつけましたが、改めて調べてみた。

アートボードを見た目どおりにソートする

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、および別案のスクリプトともに自分の環境では動きませんでした。

《自分の環境》
・Illustrator 2023(27.8.1)
・macOS Monterey(12.6.8)
・M1

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)からレイヤーのフィルタリングができるようになりました。

この中に「非表示」というフィルターがあります。

一番下の[非表示]を使ってフィルタリングすると、次の図のように非表示のオブジェクトのみが[レイヤー]パネルに表示されます。

ユースケースとしては“逆”で、アートボード上で表示されているオブジェクトのみを[レイヤー]パネルに表示したいと思うですよね…

番外編

レイヤーの重なり順を逆順にするスクリプト

見た目の並びを逆にするスクリプト

※すぐれものです。人生変わる。

ダウンロード


ここから先は

79字 / 2ファイル
月に10-20本くらいの記事を投稿しています。定期購読されると、更新のお知らせを受け取ったり、マガジン限定記事やサンプルファイルをダウンロードできます。 購読を開始した月に更新された記事から読むことができます(初月無料)。

DTP Transit 定期購読マガジン

¥100 / 月 初月無料

マガジン限定記事やサンプルファイルをダウンロードできます。

定期マガジンを購読されるとサンプルファイルをダウンロードいただけます。 https://note.com/dtp_tranist/m/mebd7eab21ea5