スクリプト

選択順にレーザー線を追加するスクリプト「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. なぜ?After Effectsの操作を「スクリプト」で効率化
  2. なぜ?After Effectsのレイヤーをエクスプレッションで効率化
  3. フリーランスの開業届提出は開業freeeでとにかく簡単に

関連記事

  1. スクリプト

    選択レイヤーのソーステキストを編集するスクリプト「textLayerEditor.jsx」

    選択した全テキストレイヤーのソーステキストを取り込み、テキストエリア上…

  2. スクリプト

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

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

  3. スクリプト

    アイソメトリックビューを簡易的に実現するスクリプト「isometricCamera.jsx」

    インフォグラフィックスにも相性のいいアイソメトリックビュー風カメラを手…

  4. スクリプト

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

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

  5. スクリプト

    レイヤーを自動で拡大・縮小させるスクリプト[auto]scaleAnimator.jsx

    選択レイヤーのインポイントからアウトポイントにかけて、指定した%サイズ…

  6. スクリプト

    セット済みのフェード時間を調整するスクリプト「[batch]@fIn_fOut.jsx」

    既に[auto]fIn_fOut.jsxで追加された自動フェード用のス…

コメント

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

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

CAPTCHA