やりたかった事
1つのシェイプレイヤーで作成した複数のオブジェクト(長方形)をインデックスを参照させて、ポジションにエクスプレッションで整列出来るようにする。
具体的に
複数のオブジェクトを整列させる為には、シェイプレイヤー内の一つ上の長方形オブジェクトのサイズをエクスプレッションで受け取って、ポジションを自動で配置させる。
リピーターも使わず、レイヤーインデックスでも無い方法で考えてみた。
さっそく作業
まず、プロパティにはグループのインデックスしか無いみたいです。(自分で調べた限りでは)
つまり
長方形パス1のインデックスは存在していて、その中のプロパティには存在してないようです。
長方形パス2はインデックス2
長方形パス3はインデックス3
と存在しています。
下記画像
レイヤーインデックス(thisLayer,+1)の様に簡単に出来たらいいですけどね・・・
そこでグループのインデックスを活用すればいい事に気が付いた。
インデックスの参照はこれ
thisProperty.propertyGroup(1).propertyIndex
これを長方形のポジションに活用していく。
最終的なエクスプレッションはこれです。
Num=thisProperty.propertyGroup(1).propertyIndex-1;
x=content("長方形パス "+Num).size[0]*Num+(effect("margin")("スライダー")*Num);
y=value[1];
[x,y]
解説
長方形パス1はベースとなる為ポジションはvalueのまま
長方形パス2のポジションにエクスプレッションを追加する。
まず
Num=thisProperty.propertyGroup(1).propertyIndex-1;
この文で、長方形パス2のインデックスを取得し、マイナス1をする。
この状態でNumは1を持っている状態です。
この文で一つ上のインデックスを拾ってくれる状態です。
あとは計算して複製すれば自動になるように下記のコードを記述(オブジェクト間のマージン用にエクスプレッション制御のスライダーが追加してあります。)
x=content("長方形パス "+Num).size[0]*Num+(effect("margin")("スライダー")*Num);
これで完成です!
長方形パスを複製すればどんどん綺麗に横に並んで行ってくれます。
あとがき
何気に何度もトライしていたんですが、ようやく閃きました。
半年ぐらいは悩んでたかも。。。
パッとすぐ思いつけるぐらいなれたらなぁ~。
2018/06/14追記
プロパティのインデックスについてもう少しわかりやすく
//myNum = thisProperty.propertyIndex;
result = 2
//myNum = thisProperty.propertyGroup(1).propertyIndex;
result = 3
//myNum = thisProperty.propertyGroup(1).propertyGroup(1).propertyIndex;
result = 1
[myNum ,myNum ]




