スクリプト

選択順にレーザー線で繋ぐスクリプト「fakePlexus.jsx」

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

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

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

これ以上ヌルレイヤーを増やしたくない人へのスクリプト「smartNuller.jsx」」の処理も含んでいるためフッテージに無闇にヌルレイヤーを増やしません。

[概要]

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

[使い方]

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

[注意点]

レイヤー選択順に線が伸びるため、レイヤー選択順に注意。

また、最後のレイヤーから最初のレイヤーにも線は循環するため、折れ線グラフで使用する場合は最後のレーザーをOFFにすればOKです。

[オプション]

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

[解説]

function f_fakePlexus(){
    var Itm = app.project.items; //全てのアイテムを取得
    var actCmp=app.project.activeItem;
    var sel=actCmp.selectedLayers;
    var targetNum=0;
    var efRsr;
    var targetProperty;

    var adjustLyr=actCmp.layers.addSolid([1, 1, 1], "fakePlexus 平面", actCmp.width, actCmp.height, actCmp.pixelAspect);
    adjustLyr.adjustmentLayer=true;
    adjustLyr.name="レーザー";

    var nullLyr=f_smartNuller();
        nullLyr.name="fakePlexus Ctrl";
        nullLyr.label=11;//オレンジ
    var nullFx=[];

        nullFx[0]=nullLyr.property("ADBE Effect Parade").addProperty("ADBE Slider Control");
        nullFx[0].name="長さ";
        nullFx[0].enabled=false;
        nullFx[0](1).setValue(100);
        nullFx[1]=nullLyr.property("ADBE Effect Parade").addProperty("ADBE Slider Control");
        nullFx[1].name="開始点の太さ";
        nullFx[1].enabled=false;
        nullFx[1](1).setValue(2);
        nullFx[2]=nullLyr.property("ADBE Effect Parade").addProperty("ADBE Slider Control");
        nullFx[2].name="終了点の太さ";
        nullFx[2].enabled=false;
        nullFx[2](1).setValue(2);
        nullFx[3]=nullLyr.property("ADBE Effect Parade").addProperty("ADBE Color Control");
        nullFx[3].name="内側のカラー";
        nullFx[3].enabled=false;
        nullFx[3](1).setValue([1,1,1]);
        nullFx[4]=nullLyr.property("ADBE Effect Parade").addProperty("ADBE Color Control");
        nullFx[4].name="外側のカラー";
        nullFx[4].enabled=false;
        nullFx[4](1).setValue([1,1,1]);
    
    
    for(var j=1;j<=sel.length;j++){//調整レイヤー
        if(j==sel.length){
            targetNum=sel.length;
        }else{
            targetNum=0;
        }
        efRsr=adjustLyr.property("ADBE Effect Parade").addProperty("ADBE Laser");
        efRsr.name="レーザー"+j;
        targetProperty=adjustLyr.property("ADBE Effect Parade")("レーザー"+j);
        targetProperty(1).expression=
            'thisComp.layer("'+sel[j-1].name+'").transform.position';//開始点
        targetProperty(2).expression=
            'thisComp.layer("'+sel[j-targetNum].name+'").transform.position';//終了点
        targetProperty(3).expression=
            'thisComp.layer("'+nullLyr.name+'").effect("長さ")(1)';//長さ
        targetProperty(5).expression=
            'thisComp.layer("'+nullLyr.name+'").effect("開始点の太さ")(1)';//開始点の太さ
        targetProperty(6).expression=
            'thisComp.layer("'+nullLyr.name+'").effect("終了点の太さ")(1)';//終了点の太さ
        targetProperty(7).setValue(0);//柔らかさ
        targetProperty(8).expression=
            'thisComp.layer("'+nullLyr.name+'").effect("内側のカラー")(1)';//内側のカラー
        targetProperty(9).expression=
            'thisComp.layer("'+nullLyr.name+'").effect("外側のカラー")(1)';//外側のカラー
        targetProperty(11).setValue(true);
    }//for
    adjustLyr.locked=true;
}

function f_smartNuller(){
    var addLyr=app.project.activeItem.layers.addNull(); // nullレイヤー追加

    for(i=1;i<=app.project.items.length;i++){
        //[平面]か[ヌル]であることを判別
        if( (app.project.items[i].mainSource == "[object SolidSource]")&&(app.project.items[i].name=="ヌル 1") ){
            addLyr.replaceSource(app.project.items[i],true);
        break;
        }
    }

    for(i=app.project.items.length;i>=1;i--){
        //使用されていない[ヌル n]のみ削除
        if( (app.project.items[i].mainSource == "[object SolidSource]")&&(app.project.items[i].name.indexOf("ヌル")!=-1)&&(app.project.items[i].name!="ヌル 1")&&(app.project.items[i].usedIn=="") ){
            app.project.items[i].remove();
        }
    }
    return addLyr;
}

app.beginUndoGroup("fakePlexus");
    f_fakePlexus();
app.endUndoGroup();

選択順に線が繋がるように「レイヤーの数-1」のレーザーを適用し、調整レイヤーをコントローラーとして

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

を一括制御できます。

レイヤーを移動すればレーザー線が追従してきますので、折れ線グラフや棒人間の関節などを簡単に表現できます。

ダウンロード

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

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

ピックアップ記事

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

関連記事

  1. スクリプト

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

    ソースが「不明」なリンク切れファイルと、最後にリンクしていたファイルパ…

  2. スクリプト

    1コンポでアニメーションパターンを管理するスクリプト「tRemapPlayer@Selector.j…

    1コンポにまとめたアニメーションパターンの何番目を再生するかキーフレー…

  3. スクリプト

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

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

  4. スクリプト

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

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

  5. スクリプト

    放射状に配置するスクリプト「posCircleAlign.jsx」

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

  6. スクリプト

    パスに沿ってレイヤーを均等配置するスクリプト「posPathAlign.jsx」

    全選択レイヤーをパスに沿って均等配置するスクリプト。…

コメント

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

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

CAPTCHA