![見出し画像](https://assets.st-note.com/production/uploads/images/70623344/rectangle_large_type_2_cb2c8443dd646cf00774bc6f95fe8acc.png?width=1200)
【PhotoshopScript】ActionDiscriptorをちゃんと理解して使いたい
まだちゃんと理解はできていないです
ActionDescriptorとは
ScriptingListenerを使ってスクリプトを記録したときに雨後の竹の子のように出てくるアレです。
ScriptingListenerを使えば、ExtendScriptを書けなくても、もしくはExtendScriptでは実現できない処理でも、スクリプト化することができて非常に便利です。
でも雨後の竹の子のように出てくるんだよ
自動生成コードなのでもう、死ぬほど見づらいです。どこに何の設定が書いてあるのか判読するの超大変。
と言うことでちょっと整理してみよう
自動記録したスクリプトを見てみると、あっちにもこっちにも
var desc12 = new ActionDescriptor();
っていうのがあります。
ActionDescriptorというものの新しいインスタンスを作っているようです。
で、さらに見ていくと、このdesc12に対して
desc12.putUnitDouble( idLeft, idPxl, x1 );
とか
desc12.putUnitDouble( idtopRight, idPxl, 0.000000 );
とか、どんどんputナントカputカントカ……と情報をputしていって、最終的に
executeAction( idMk, desc12, DialogModes.NO );
で実行する、という手順で動いて居るようです。
それ以外によく出てくるのは
var idUsng = charIDToTypeID( "Usng" );
とか
var idnull = charIDToTypeID( "null" );
のような、idナントカ = charIDtoTypeID("ナントカ") という命令。
こちらは、英語で示されたIDをTypeIDとやらに変換している様です。(英語で示されたIDは、必ず4文字になるように省略、もしくは半角スペースが足されていますが、なんとなく何がしたいかは分かりそうな感じです)
で、その用意したidは何に使っているかというと、ActionDescriptorにputして使っています。
この二つを使いこなすことができれば、ActionDescriptorを自在に操れそうです。
とりあえず自動生成の変数名を具体的な名前に変える
自動生成では、desc12とかdesc16とかの連番がついているだけの変数になってしまっているので、これを、putされているidの中身から「なんか……色の設定してるっぽい……」とか「サイズを……設定している……?」とか推測して、具体的な名前を付けて上げます。
それだけでもちょっと見通しが立ちます。
あるActionDescriptorの構成を指定している部分をfunctionとして切り出す
自動生成のスクリプトをよくよく見ていくと、
新しいdescAを作って、情報を足して足して足して、最後に別のdescBの引数としてdescAを渡して、descAについての記述はそこまで
という部分がちょこちょこ見つかります。
その部分をfunctionとして切り出してあげれば、一つ一つのfunctionが短くできます。
重複している変数宣言を消す
var idnull = charIDToTypeID( "null" );
とか
var idTop = charIDToTypeID( "Top " );
とか、汎用感あるidは、何度もvarで再宣言されまくっています。
一回宣言すれば十分なので、重複するものは消しますばいばい。
この、idを宣言しちゃ次の行でdescの引数に渡し、宣言しちゃ渡し、のせいでfunctionが長くなるんですけど、最初にまとめて宣言して後から使うんだとどれ宣言してあるかわからなくなっちゃうとかあるんで、美しく収める方法は模索中です。
ActionDescriptorを使った操作を実装しようとするとどうしてもソースが増長になってしまうので、少しでもマシにしたいところです。
この記事が気に入ったらサポートをしてみませんか?