記事「レーザーの線で繋ぐエクスプレッション」をスクリプト化。
有料プラグインの「Plexus」を模した「レイヤーとレイヤーを線で繋ぐ」スクリプト。本家「Plexus」のように近い距離のポイント全てと繋ぐワケではなく、エフェクト「レーザー」で2点間の繋ぎを連続して行い、フェイクPlexusを実現します。
決まったレイヤー間を線で繋ぐため、折れ線グラフとして使い勝手がいいです。
[概要]
調整レイヤーを生成し、全選択レイヤー分のレーザーを設定する。繋ぐレイヤーをいちいち設定しなくて済むため、かなりの時間短縮が見込める。
[使い方]
- 線で繋ぎたいレイヤーを全選択する
- スクリプトを実行する
選択順に線が伸びるため、選択順に注意。
[オプション]
- 調整レイヤーがコントローラーになり、線の太さ、色を一括設定できる
- 逆に個別に設定を変えたい場合は、エクスプレッションを切ってください
[解説]
function fakePlexus(){
var Itm = app.project.items; //全てのアイテムを取得
var actCmp=app.project.activeItem;
var selItmAll=actCmp.selectedLayers;
//smartAdjust
var adjustLyr=actCmp.layers.addSolid([1, 1, 1], "ホワイト 平面 1", 1920, 1080, 1.0);
adjustLyr.adjustmentLayer=true;
adjustLyr.name="レーザー";
for(var i=1;i<=Itm.length;i++){
//[平面]、[ヌル]の両方とも "[object SolidSource]" なのでこれで判別
if( (Itm[i].mainSource == "[object SolidSource]")&&(Itm[i].name=="ホワイト 平面 1") ){
adjustLyr.replaceSource(Itm[i],true);
break;
}
}
for(i=Itm.length;i>=1;i--){
//[平面]、[ヌル]の両方とも "[object SolidSource]" なのでこれで判別
if( (Itm[i].mainSource == "[object SolidSource]")&&(Itm[i].name.indexOf("ホワイト 平面")!=-1)&&(Itm[i].name!="ホワイト 平面 1") ){
Itm[i].remove();
}
}//smartAdjust
var nullLyr=actCmp.layers.addNull();
nullLyr.name="fakePlexus Ctrl";
nullLyr.label=11;//オレンジ
var nullFx=[];
for(i=1;i<=Itm.length;i++){
//[平面]、[ヌル]の両方とも "[object SolidSource]" なのでこれで判別
if( (Itm[i].mainSource == "[object SolidSource]")&&(Itm[i].name=="ヌル 1") ){
nullLyr.replaceSource(Itm[i],true);
break;
}
}
for(i=Itm.length;i>=1;i--){
//[平面]、[ヌル]の両方とも "[object SolidSource]" なのでこれで判別
if( (Itm[i].mainSource == "[object SolidSource]")&&(Itm[i].name.indexOf("ヌル")!=-1)&&(Itm[i].name!="ヌル 1") ){
Itm[i].remove();
}
}//smartNuller
nullFx[0]=nullLyr.property("ADBE Effect Parade").addProperty("ADBE Slider Control");
nullFx[0].name="長さ";
nullFx[0](1).setValue(100);
nullFx[1]=nullLyr.property("ADBE Effect Parade").addProperty("ADBE Slider Control");
nullFx[1].name="開始点の太さ";
nullFx[1](1).setValue(2);
nullFx[2]=nullLyr.property("ADBE Effect Parade").addProperty("ADBE Slider Control");
nullFx[2].name="終了点の太さ";
nullFx[2](1).setValue(2);
nullFx[3]=nullLyr.property("ADBE Effect Parade").addProperty("ADBE Color Control");
nullFx[3].name="内側のカラー";
nullFx[3](1).setValue([1,1,1]);
nullFx[4]=nullLyr.property("ADBE Effect Parade").addProperty("ADBE Color Control");
nullFx[4].name="外側のカラー";
nullFx[4](1).setValue([1,1,1]);
for(var j=1;j<selItmAll.length;j++){//調整レイヤー
efRsr=adjustLyr.property("エフェクト").addProperty("レーザー");
efRsr.name="レーザー"+j;
adjustLyr.property("ADBE Effect Parade")("レーザー"+j)(1).expression=
'thisComp.layer("'+selItmAll[j-1].name+'").transform.position';//開始点
adjustLyr.property("ADBE Effect Parade")("レーザー"+j)(2).expression=
'thisComp.layer("'+selItmAll[j].name+'").transform.position';//終了点
adjustLyr.property("ADBE Effect Parade")("レーザー"+j)(3).expression=
'thisComp.layer("'+nullLyr.name+'").effect("長さ")(1)';//長さ
adjustLyr.property("ADBE Effect Parade")("レーザー"+j)(5).expression=
'thisComp.layer("'+nullLyr.name+'").effect("開始点の太さ")(1)';//開始点の太さ
adjustLyr.property("ADBE Effect Parade")("レーザー"+j)(6).expression=
'thisComp.layer("'+nullLyr.name+'").effect("終了点の太さ")(1)';//終了点の太さ
adjustLyr.property("ADBE Effect Parade")("レーザー"+j)(7).setValue(0);//柔らかさ
adjustLyr.property("ADBE Effect Parade")("レーザー"+j)(8).expression=
'thisComp.layer("'+nullLyr.name+'").effect("内側のカラー")(1)';//内側のカラー
adjustLyr.property("ADBE Effect Parade")("レーザー"+j)(9).expression=
'thisComp.layer("'+nullLyr.name+'").effect("外側のカラー")(1)';//外側のカラー
adjustLyr.property("ADBE Effect Parade")("レーザー"+j)(11).setValue(true);
}//for
}
app.beginUndoGroup("fakePlexus");
fakePlexus();
app.endUndoGroup();
選択順に線が繋がるように「レイヤーの数-1」のレーザーを適用し、調整レイヤーをコントローラーとして
- 長さ
- 開始点の太さ
- 終了点の太さ
- 内側のカラー
- 外側のカラー
を一括制御できます。
レイヤーを移動すればレーザー線が追従してきますので、折れ線グラフをアニメーションさせる場合など簡単に実現できます。
この記事へのコメントはありません。