AEいじっていて思いついたことを書いていきます(´・ω・`)

Expression偏

1.コンポジションのサイズやレイヤーのサイズを求める

thisComp.width や thisComp.height でコンポジションの横幅と縦幅が求められる。

同様にthisLayer.width や thisLayer.height でそのレイヤーの横幅と縦幅で求められる。
1280 x 720のサイズのコンポジションに1280 x 720の平面を置いて、
平面のトランスフォームの位置に

x = thisComp.width;
y = thisComp.height;
[x, y]

と書くと位置が X:1280,Y:720 に移動する。

2.name.sliceで一個前のレイヤーを指定

レイヤー名
syobo_0
syobo_1
※syobo_0はダミーのレイヤー。(エクスプレッション制御用にするとよい)
syobo_1の回転に

ns = name.slice(6,9) -1;
thisComp.layer("syobo_" + ns).transform.rotation;

とエクスプレッションを書くと前のレイヤーの角度を求められる。

3.別コンポジションを参照する

コンポジション「しょぼーん1」の中のレイヤー「しゃきーん_1」のレイヤーの回転を、
コンポジション「しょぼーん2」の中のレイヤー「ワッフル_1」の回転を同期させたいとき。

「しょぼーん2」の「ワッフル_1」の回転へエクスプレッションを書きます。

comp("しょぼーん1").layer("しゃきーん_1").transform.rotation;

コンポジション「しょぼーん1」でname.slice()などで大量に複製したレイヤーがあって、
それらの位置をコンポジション「しょぼーん2」のレイヤーにも反映させたいとき。

「しょぼーん2」の「ワッフル_1」の位置へエクスプレッションを書きます。

ns = name.slice(5, 9);
comp("しょぼーん1").layer("しゃきーん_" + ns).transform.position;

4.AをBで割ったあまりの数字

A = 17;
B = 13;
C = A % B;

[出力される値] 4

name.slice()を使った例
平面レイヤーをコンポに入れてレイヤー名「Layer_1」とする。
エクスプレッションを書くプロパティはとりあえず回転とする。

ns = name.slice(6, 9);
ns % 2

上記のエクスプレッションを書いてレイヤーをCtrl + Dで複製していくと、

Layer_1の回転は「1」
Layer_2の回転は「0」
Layer_3の回転は「1」
Layer_4の回転は「0」
Layer_5の回転は「1」

と、出力される。
これを応用すれば偶数レイヤーと奇数レイヤーで分けることができる。

5.try{}catch(err)とfor文、を使ってレイヤーのMAX枚数を出力する

平面レイヤーをコンポに入れてレイヤー名「Layer_1」とする。
エクスプレッションを書くプロパティはとりあえず回転とする。

try {
for (i = 1; i <= 11; i++)
thisComp.layer("Layer_" + i).transform.rotation;
}
catch(err)
{i - 1}

上記のエクスプレッションを書いてレイヤーをCtrl + Dで複製していくと、
複製していくにつれて角度が1°ずつ全レイヤーが増えていきます。
「Layer_11」まで増やすと

thisComp.layer("Layer_11").transform.rotation;

とtry{}内の条件が成立するので「Layer_11」のrotationのプロパティを参照して0°となります。
それ以上増やしたい場合は

i <= 101

など、値を変えてください。

解説するとtry{}catch(err){}は最初の括弧で囲った内のプログラムを処理します。
何にも問題が無かったらそのまま数値等を出力します。

エラーだった場合はcatch(err)の括弧内のプログラムを処理して出力します。

for文では「i = 1」、「i <= 11」になるまでi + 1を繰り返しなさいとしています。
出力される最初のiは「1 + 1 = 2」となります。

これを

thisComp.layer("Layer_" + i).transform.rotation;

このiに代入すると

thisComp.layer("Layer_2").transform.rotation;

となります。
tryした結果「Layer2」なんて無いからエラーだよとなり、
catch(err)の方の処理になります。

catch(err)内では

{i – 1}

となっているのでiに2を代入して

2 – 1 = 1

となります。
これでレイヤーを複製するだけで「Layer_x」が何枚使われてるかを出力することができます。

使う場面は少ないけど今日使いたいって思ったけど、
どのaep見ても書いてなくて困ったから久しぶりにメモに書いた。

現在コメントは受け付けていません。