AEScript　コピペ集まとめていきます記事。

#はじめにこの記事は・・・
AEで私が使ったコードを素早くコピペで使えるようにこの記事で追記していきます。

追記していった分はジャンル分けして目次に追加していきます。

目次
サイズ関連
L　シェイプまたはテキストレイヤーのサイズを取得

シェイプレイヤー関係
L　シェイプレイヤーのパス座標と接線を取得

便利なFunction
L imgのスケールをコンポジションサイズに合わせる
L テキストレイヤーの高さを取得

コンポジションセッティング
L　フレームレート一括設定 (2018/11/29更新)

レイヤー関係
L　レイヤーの開始時間をランダムに
L　レイヤーの置き換え

#レイヤー関係
###レイヤーの開始時間をランダムに設定する
```jsx
var myLay = app.project.activeItem.selectedLayers;

app.beginUndoGroup("");
    for (var i=0; i<myLay.length; i++){
        myLay[i].startTime = Math.random(15)
    }
app.endUndoGroup();
```

###レイヤーの置き換え
コンポ１に複数のレイヤーがありそれを、プロジェクトアイテムにあるアイテムを指定して置き換える。
まずは元となるプロジェクトアイテムを選択状態にして、次に置き換えたいレイヤーを指定する。
プロジェクトアイテムの選択数とレイヤーの選択数が同じじゃないと、エラーが起きるはず。

```jsx
var n = app.project.selection.length;
var projectItem = []
var myLay = app.project.activeItem.selectedLayers;

for (var i=0; i<n ; i++){
    projectItem.push(app.project.selection[i])
}

for (var i=0; i<myLay.length; i++){
    myLay[i].replaceSource(projectItem[i],false)
}
```

#サイズ関連
###シェイプまたはテキストレイヤーのサイズを取得（戻り値は配列）

```jsx
function get_layer_size(targetComp,targetLayer){ //Result = array [ left width top height ]
        var curTime = targetComp.time;
        var tw =targetLayer.sourceRectAtTime(curTime, false).width; //テキストの全体の幅
        var th = targetLayer.sourceRectAtTime(curTime, false).height; //テキスト全体の高さ
        var tl = targetLayer.sourceRectAtTime(curTime, false).left; //テキストの左側の座標
        var tt = targetLayer.sourceRectAtTime(curTime, false).top;//テキスト上の座標
        return  [tw,th,tl,tt] ;
}

/*
get_layer_size(targetComp,targetLayer)の
第１引数（targetComp）はターゲットとなるコンポジション
第２引数（targetLayer）はターゲットとなるレイヤー　例（シェイプレイヤーやテキストレイヤー
戻り値は配列になっており、width / height / left / top　の順で格納されています。

var myComp =  app.project.activeItem;
var myLayer = myComp.selectedLayers[0];
$.writeln(get_layer_size(myComp,myLayer));

```

また小数点が細かいので、プログラムでAEに適用したら弾かれる場合があるのでその場合は

```jsx
function roundFloat(target,n) { //第１引（数値)・第２引数(小数点の数) 例え)　roundFloat(1.55555,2) 戻り値は　= 1.56となる
var _pow = Math.pow( 10 , n );
return Math.round( target * _pow ) / _pow;
}
で小数点第n位まで出してくれるメソッドを使っています。
```




#シェイプレイヤー関係
###シェイプレイヤーのパス座標と接線を取得
　

```jsx
var selectedShape = app.project.activeItem.selectedProperties[0].path.value.vertices; //ベクターパスの座標取得
var inTan = app.project.activeItem.selectedProperties[0].path.value.inTangents; //接線インの座標取得
var outTan = app.project.activeItem.selectedProperties[0].path.value.outTangents; //接線アウトの座標取得

//確認用
//取得した座標を確認する
function arrCheck (target){
    for (var i = 0 ; i < target.length ; i ++ ){
                $.writeln(target[i]);
    }
}

$.writeln('■')
arrCheck (selectedShape)
$.writeln('▼')
arrCheck (inTan)
$.writeln('●')
arrCheck (outTan)

/*　result
■
-19.5,-16
19.5,-8
18.5,16
▼
1.10491943359375,26.583984375
-7.00799560546875,-0.3436279296875
0,0
●
15.9326171875,12.5942993164063
0,19.0562133789063
0,0
*/

```

#Function関連
###imgのスケールをコンポジションサイズに合わせる

```jsx
//コンポジションにフィットさせるためスケールを計算
function ScallSize(targetComp,targetLayer){
    var setw = targetComp.width/targetLayer.source.width*100;
    var seth =  targetComp.height/targetLayer.source.height*100;
    if (targetLayer.source.width > targetLayer.source.height){
        return [setw,setw];
    }
    else if(targetLayer.source.width < targetLayer.source.height){
        return [seth,seth];
    }
    else if (targetLayer.source.width == targetLayer.source.height){
        return [setw,setw];
    }
}
```

###テキストレイヤーの高さを取得
引数にはコンポジションオブジェクトとターゲットとなるレイヤーのオブジェクトを入れる

```jsx
function layerheight(targetComp,target){
    var curTime = targetComp.time;
    var temp = target.sourceRectAtTime(curTime, false).height;

    var _pow = Math.pow( 10 , 4 );
    return Math.round( temp * _pow ) / _pow;

}
```

#コンポジションセッティング
###フレームレート一括設定

```jsx
var myItems = app.project.selection;
var targetFrameRate = 24;
for (var i = 0; i < myItems.length; i++) {
	if (myItems[i] instanceof CompItem) {
		myItems[i].frameRate = targetFrameRate;
		}
	}
```