見出し画像

Illustratorで「選択しているオブジェクトを新規レイヤーに移動し、そのレイヤーを最背面に移動してロック」までを1ストロークで実行する

自分の場合、Illustratorでの制作物では基本的にレイヤー分けしません。
その理由は[オブジェクトを前面に/背面に移動する]コマンドがレイヤー内のみで有効なため。

その一方、ドキュメント全体に背景色を付けるようなケースでは、別レイヤーにしておかないと、背景色を付けたオブジェクトの下に回り込んでしまって不便です。

次の作業を1ストロークで実行する方法について考えてみました。

  1. 新規レイヤーを作成し、レイヤー名を「bg」に変更する

  2. 選択しているオブジェクトを「bg」レイヤーに移動する

  3. 「bg」レイヤーを最背面に移動し、ロックする

  4. 選択しているオブジェクトが元々あったレイヤーをアクティブに

アクション

手順1、手順2はアクションで実行できます。

そのままだと毎回ダイアログボックスが開いてしまうため、
アイコンをクリックして非表示にしておく

「選択しているオブジェクトを「bg」レイヤーに移動する」には[オブジェクト]メニューの[重ね順] → [選択しているレイヤーに移動]を使います。

スクリプト

こんな感じで動きました。

  • 「bg」レイヤーが存在する場合には、そのレイヤーのロックを解除、選択オブジェクトを移動、さらに、そのオブジェクトを最背面に移動

var doc = activeDocument;
var currentLayer = doc.activeLayer; // 現在のレイヤーを保存

// "bg" レイヤーが既に存在するか確認
var bgLayer;
try {
    bgLayer = doc.layers.getByName("bg");
    bgLayer.locked = false; // ロックを解除
} catch (e) {
    bgLayer = doc.layers.add(); // 新しいレイヤーを作成
    bgLayer.name = "bg"; // レイヤー名を「bg」に設定
}

var selectedObjects = doc.selection; // 選択されたオブジェクト

// 選択されたオブジェクトを「bg」レイヤーに移動
for (var i = selectedObjects.length - 1; i >= 0; i--) {
    selectedObjects[i].move(bgLayer, ElementPlacement.PLACEATBEGINNING);
    selectedObjects[i].zOrder(ZOrderMethod.SENDTOBACK); // オブジェクトを最背面に移動
}

bgLayer.zOrder(ZOrderMethod.SENDTOBACK); // 「bg」レイヤーを最背面に移動
bgLayer.locked = true; // 「bg」レイヤーをロック

doc.activeLayer = currentLayer; // 元のレイヤーをアクティブに戻す

次のブログ記事を参考にしました。

お礼

選択オブジェクトが複数あるとき、前後関係が狂ってしまうようで、ご指摘と修正案をいただきました。

あるふぁ(仮)さん、ものかのさん、あぢ(z-)そよ風邪さん、ありがとうございます!!!


ダウンロード

Keyboard Maestroのマクロです。MaestroPackが必要です。

2023年1月31日17:30に修正しました。

ここから先は

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

DTP Transit 定期購読マガジン

¥100 / 月 初月無料

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

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