Pixelmator Pro上でオープン中の2つの書類のレイヤー表示状態をシンクロさせるAppleScriptです。
ちょうど、「ゆっくりAppleScript解説」の続刊を作成中で、レイヤー別に部品が分かれている書類(すべてのレイヤー名は同じ)の表情を「同じ状態」にするのが面倒です。
正直なところ、表情名を入力すると該当するレイヤーを表示状態にしてほしいぐらいです。
そこまで行かないにせよ、1つの書類に対して行ったレイヤー表示操作を、もう一度別の書類に対して行わなくてはならないのは大変です(2つの書類を統合して、キャラクター別の差異をレイヤーで吸収するという手もありますが、、、)。
そこで、2つの書類をオープンしておき、最前面の書類のレイヤー表示状態(=表情の操作)を他方の書類に反映させるAppleScriptを書いてみました。
Pixelmator Proバージョン3.3.6に対してレイヤーの取得を指令してみましたが、なかなか大変です。再帰処理で一番上から末端まで、表示状態になっているレイヤーだけを抽出できるかと考えていたのですが、そうもいきません。
再帰処理がダメなので、もうレイヤー名を決め打ちで指定するようにして(つまり、この用途以外には使えないものと割り切って)、各レイヤーグループ内を走査するように記述しました。
AppleScript名:同一名、同一構造の2つの書類のレイヤー表示状況をシンクロ.scpt |
— – Created by: Takaaki Naganoya – Created on: 2023/06/06 — – Copyright © 2023 Piyomaru Software, All Rights Reserved — use AppleScript version "2.4" — Yosemite (10.10) or later use framework "Foundation" use scripting additions tell application "Pixelmator Pro" set allD to {} set dList to name of every document –> {"ゆっくり素材れいむ.pxd", "ゆっくり素材まりさ.pxd"} tell front document set d1Name to name of it if d1Name contains "れいむ" then set d2Name to retAnItemByCond(dList, "れいむ") of me else set d2Name to retAnItemByCond(dList, "まりさ") of me end if tell layer "root" tell layer "顔" set dList to every layer repeat with i in dList set j to contents of i tell j set ddList to (name of every layer whose visible is true) if ddList is not equal to {} then set aCon to contents of first item of ddList set the end of allD to {"root", "顔", name of j, aCon} end if end tell end repeat end tell end tell end tell tell document d2Name repeat with i in allD copy i to {L1, L2, L3, L4} tell layer L3 of layer L2 of layer L1 set tmpL to name of every layer repeat with ii in tmpL set jj to contents of ii tell layer jj if jj = L4 then set visible to true else set visible to false end if end tell end repeat end tell end repeat end tell end tell on retAnItemByCond(aList, aParam) repeat with i in aList set j to contents of i if j does not contain aParam then return j end if end repeat end retAnItemByCond |
More from my site
(Visited 55 times, 1 visits today)