スクリプト

選択順にレーザー線を追加するスクリプト「fakePlexus.jsx」

記事「レーザーの線で繋ぐエクスプレッション」をスクリプト化。

有料プラグインの「Plexus」を模した「レイヤーとレイヤーを線で繋ぐ」スクリプト。本家「Plexus」のように近い距離のポイント全てと繋ぐワケではなく、エフェクト「レーザー」で2点間の繋ぎを連続して行い、フェイクPlexusを実現します。

決まったレイヤー間を線で繋ぐため、折れ線グラフとして使い勝手がいいです。

[概要]

調整レイヤーを生成し、全選択レイヤー分のレーザーを設定する。繋ぐレイヤーをいちいち設定しなくて済むため、かなりの時間短縮が見込める。

[使い方]

  1. 線で繋ぎたいレイヤーを全選択する
  2. スクリプトを実行する

選択順に線が伸びるため、選択順に注意。

[オプション]

  • 調整レイヤーがコントローラーになり、線の太さ、色を一括設定できる
  • 逆に個別に設定を変えたい場合は、エクスプレッションを切ってください

[解説]

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」のレーザーを適用し、調整レイヤーをコントローラーとして

  • 長さ
  • 開始点の太さ
  • 終了点の太さ
  • 内側のカラー
  • 外側のカラー

を一括制御できます。

レイヤーを移動すればレーザー線が追従してきますので、折れ線グラフをアニメーションさせる場合など簡単に実現できます。

ダウンロード

エクスプレッションで一括制御+疑似親子+ミラーリング前のページ

AEでも前方選択するスクリプト「selectForword.jsx」次のページ

ピックアップ記事

  1. amazonのスポンサー商品(広告)を非表示にするブックマークレット「amazO…
  2. なぜ?After Effectsの操作を「スクリプト」で効率化
  3. フリーランスの開業届提出は開業freeeでとにかく簡単に
  4. YouTubeで一時停止中のコントローラーを非表示にするブックマークレット
  5. なぜ?After Effectsのレイヤーをエクスプレッションで効率化

関連記事

  1. スクリプト

    なぜ?After Effectsの操作を「スクリプト」で効率化

    出来る範囲はマウスやキーボードで編集者が直接できる操作に限られますが、…

  2. スクリプト

    選択レイヤーサイズのマスクをシェイプで描くスクリプト「addShapeMask@rect.jsx」

    テキストに合わせたサイズの、さらにサイズ追従するエクスプレッションを仕…

  3. スクリプト

    2つのレイヤー間に他レイヤーを整列するスクリプト「alignBetween2Layer.jsx」

    root(はじめに選んだ)レイヤーとgoal(最後に選んだ)レイヤーを…

  4. スクリプト

    グリッド上に均等配置するスクリプト「posGridAlign.jsx」

    複数のレイヤーをグリッド状に整列させるエクスプレッションを仕込むスクリ…

  5. スクリプト

    リンク切れフッテージのファイルパス一覧をテキストファイル出力するスクリプト「exportDeadLi…

    実行すると、開いているaepファイルと同じフォルダに、ソースが「不明」…

  6. スクリプト

    裏面を非表示にするスクリプト「hideBackface.jsx」

    「3Dレイヤーの裏面を非表示にするエクスプレッション」をスクリプト化…

コメント

  1. この記事へのコメントはありません。

  1. この記事へのトラックバックはありません。

CAPTCHA