スクリプト

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

エクスプレッションでグリッド上に均等配置する」で作った位置へのエクスプレッション適用をスクリプト化。

[概要]

複数のレイヤーをグリッド状に整列させるエクスプレッションを仕込むスクリプト。X,Yのズレ、折り返す個数を設定可能。

[使い方]

  1. 並べたいレイヤーを全選択する
  2. スクリプトを実行する
  3. コントロールレイヤーの「ズレX」「ズレY」エフェクトで間隔を調整する
  4. 「n個で改行」エフェクトで折り返すまでの個数を設定可能

[オプション]

  • 一番初めに選択したレイヤーがコントローラーとなり、ラベルがオレンジになる。レイヤー名の初めにも”[ctrl]”が追加される。
  • 「n個で改行」が3なら、4レイヤーあれば4つ目は1つ目と同じX位置に来る
  • 「ズレY」は文章でいうと折り返した2行目との間隔
  • 全体の移動は[ctrl]レイヤーを移動させる。
  • その他のレイヤーは個別に移動できるが、グリッドから離れた状態でも「ズレX」「ズレY」は維持される。

[解説]

function f_gridAlign(){
    /*----------コントロール用ヌル設定----------*/
    var Itm = app.project.items; //全てのアイテムを取得
    var actCmp = app.project.activeItem; //選択コンポを取得
    var sel=actCmp.selectedLayers;
    var nullLyr=actCmp.layers.addNull(),nullFx=[];
        nullLyr.moveBefore(sel[0]); // 一旦初めに選択したレイヤーの下に準備

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

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

    nullLyr.name="grid Control";
    nullLyr.label=11;//ラベルをオレンジに
    nullFx[0]=nullLyr.property("ADBE Effect Parade").addProperty("ADBE Checkbox Control");
    // メモリ節約のためにエクスプレッション制御エフェクトは以降も無効化する
    //(数値をエクスプレッションで引っ張るだけなので、エフェクト自体は無効で問題なし)
    nullFx[0].enabled=false;
    nullFx[0].name="タテ並び";
    nullFx[1]=nullLyr.property("ADBE Effect Parade").addProperty("ADBE Slider Control");
    nullFx[1].enabled=false;
    nullFx[1].name="n個で改行";
    nullFx[1](1).setValue(3);
    nullFx[2]=nullLyr.property("ADBE Effect Parade").addProperty("ADBE Slider Control");
    nullFx[2].enabled=false;
    nullFx[2].name="ズレX";
    nullFx[2](1).setValue(100);
    nullFx[3]=nullLyr.property("ADBE Effect Parade").addProperty("ADBE Slider Control");
    nullFx[3].enabled=false;
    nullFx[3].name="ズレY";
    nullFx[3](1).setValue(100);
    
    /*----------整列レイヤー用 位置設定----------*/
    if ( actCmp != null ) {
        for(i=0;i<sel.length;i++){
            sel[i].moveBefore(nullLyr); // 上から下に、選択順に並べ替え
            sel[i].position.setValue([0,0]); // 個別に動かせるようvalueを足すので、元は[0,0]に
            sel[i].position.expression=
            'cLyr=thisComp.layer("'+nullLyr.name+'");\r'+
            'ind=index-cLyr.index-1;\r'+
            'xNum=cLyr.effect("n個で改行")(1);\r'+
            'zureX=(cLyr.effect("タテ並び")(1)==1)?Math.floor(ind/xNum):ind%xNum;\r'+
            'zureY=(cLyr.effect("タテ並び")(1)==1)?ind%xNum:Math.floor(ind/xNum);\r\r'+
            'X=cLyr.effect("ズレX")(1)*zureX;\r'+
            'Y=cLyr.effect("ズレY")(1)*zureY;\r'+
            'value+[cLyr.position[0]+X,cLyr.position[1]+Y];';
        }//for
    nullLyr.moveBefore(sel[0]); //ヌルの上に並べたので、最後にグループの一番上に移動
    }// if
}// f_gridAlign

app.beginUndoGroup("posGridAlign");
    f_gridAlign();
app.endUndoGroup();

コントローラーヌル「grid Control」の位置にその他のレイヤーが追従します。

新規追加されるヌルオブジェクトをコントローラーとして、その他の選択レイヤーの位置を[0,0]にした上でエクスプレッションを追加します。[0,0]にする意味は、位置を「value+整列位置」とすることで、個別に移動ができるようになっています。

適当な位置にばらした後、キーフレームで[0,0]に戻すことで「整列するアニメーション」が手軽に作れます。

注意点

つまり、レイヤーの位置が[0,0]から変わるような処理をした場合、グリッドが崩れます。

例えばスクリプト適用後に、整列レイヤーを他レイヤーの子に設定した場合や、コンポジションサイズを左上固定以外で変更した場合など。

やむを得ずコンポジションサイズを変更する場合は「左上固定」でサイズ変更をするか、それが都合の悪い場合は、変更後に整列レイヤーの位置を[0,0]に直してやると然るべき位置に戻ります。

「n個で改行」は、横書きテキストの要領で行の文字数を設定するイメージです。1なら毎レイヤー折り返され、Yしかズレません。

ダウンロード

エクスプレッションでグリッド上に均等配置する前のページ

これ以上ヌルレイヤーを増やしたくない人へのスクリプト「smartNuller.jsx」次のページ

ピックアップ記事

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

関連記事

  1. スクリプト

    After Effectsのスクリプトの書き方

    After Effectsのスクリプトを作るのに必要なものを紹介します…

  2. スクリプト

    使用エフェクト一覧をテキストファイル出力するスクリプト「exportFxName.jsx」

    実行すると、開いているaepファイルと同じフォルダに、使用エフェクト…

  3. スクリプト

    レイヤーに連番を振るスクリプト「[_nn]seqNumRenamer.jsx」

    タイムライン上で連番管理したいレイヤーを選択した順に連番でリネームする…

  4. スクリプト

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

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

  5. スクリプト

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

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

コメント

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

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

CAPTCHA