忍者ブログ
cerezo OSAKA
いちおす VOC@!!
只今、絶賛ヘビィローテ中のボーカロイドなのです。 アカウントが無い方はサムネで我慢・・・
  運営さ~ん、早くニコ外部プレーヤーに対応してよー
  ( ;゚Д゚)y─┛~~ マッテルンダゼ



  ピノキオP
ほんの一瞬だけ ほんの一瞬だけ.............2009/06/05

  DECO*27P
方程式 A=Lt²(愛=恋×時間の2乗)
(歌ってみた)♪.............2009/05/09

  若干P
一番最初にキミに触れてしまいそう・・・・ (T△T)
(歌ってみた)...............2009/05/02



  ほえほえP
2度目の告白ソング(歌ってみた)♪...............2009/02/27



  DECO*27P
DecoPの神曲を神々が歌ってみた♪.............2009/02/27



  ryoP
もう溜息しかでてこない(歌ってみた)♪..........2009/02/27



  トラボルタP
伝説のRINマスター会心の神曲♪..................2009/01/08



  ずどどんP 掻き鳴らすギター♪..................2008/12/12


  すこっぷP 期待の新人♪.............................2008/12/12


  samfreeP 萌えリン♪...................................2008/12/11


  ここ狭いP 低音レン♪...................................2008/12/11
気付いたら突然増えてると思います・・・
[82] [81] [80] [79] [78] [77] [76] [75] [74] [73] [72]
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

久しぶりの更新です。

前の更新から既に1ヶ月も経ってるのですが、その間にPCのハードディスクが壊れまして
晴れてWindows7にアップグレードとなりました。
おかげで前の記事で公開したアニメーションライブラリが使えなくなっちゃったんですけどね。
windows7でもいろいろ試したんですが、うまくいかなかったのであれはもう忘れようかと思います。

で、それまで書き溜めていたスクリプトのメモ帳なんかも消えちゃったので
最近はちょこちょこと思い出しながら新たに書き起こしてたのですが、
今回はそんな中からソートに関してのお話を。



以前はソートさせるのに結構面倒くさいことをやってまして、今見ると苦労してんなーと
思っちゃうんですが、簡単な方法をサイトで見つけてからは楽に出来る様になりました。
まぁ無知なりにも何とか実現させようとしたその労力は、今に繋がっていますけどね。
たぶん。

で、ソートする時のポイントとしては、ソートさせる情報を連想配列で持っておく
ということです。普通、配列だと

var aaa = [ 1, 2, 3, 4 ];

てな感じですが、これを連想配列にすると

var bbb = [ {val:1}, {val:2}, {val:3}, {val:4} ];

て具合になります。

aaa[0] の値は "1" で、bbb[0].val の値は "1" になります。

連想配列ではそれぞれの値を連想させるプロパティを持たせる感じなので、
例えば複数の値を

var ccc =
[

    { name: "compA", width: 300, height: 200 },
    { name: "compB", width: 200, height: 100 },
    { name: "compC", width: 100, height: 300 },

];

みたいにすると各プロパティで自由に取り出せて整理もしやすいですね。
しかも各プロパティでソートができます。

ソートは sort() を使うのですが、このままではプロパティでソートできません。
オプションで関数を使うことで可能になります。

ccc.sort( smallWidth );

function smallWidth( a, b )
{
    return (a.width > b.width) ? 1 : -1 ;
}


この例では小さい値から大きい値にソート(昇順)します。
a.width > b.width a.width < b.width にすることで降順にでき、
width を他のプロパティに変えることでそれぞれのプロパティでソートできます。
つまり各プロパティごとに関数を用意する必要があるということです。

上の例の場合、ソートする前の ccc[0].name の値は "compA" ですが、
ソート後の ccc[0].name の値は "compC" になります。
この連想配列をいかにうまく作るかで後の苦労がかなり変わってきます。


ここからが本題ですが、例えばコンポ内のレイヤーに対してソートする時に
わざわざ連想配列を作る必要がない場合があります。
レイヤーオブジェクトには複数のプロパティがありますので、取得したままに
ソートできます。

//選択中のレイヤーを取得
var ddd = app.project.activeItem.selectedLayers;


AfterEffectsでは、items, layers, selectedLayers などを使ってアイテムを
配列で取得した場合、その配列は全て "1番目" から始まる仕様になってます。
これはプロジェクト内やコンポ内には "0番目のアイテム" という概念がないからですが
普通、配列といえば "0番目" から始まるので、AEスクリプトを書き始めの頃は
何が何だかわからずに非常に悩ましかった記憶があります。
で、このままだと後々都合が悪いので "0番目"から始まる配列に置き換えます。

//0番目からのオブジェクトに置き換え
var selLys = new Array();
for(var i=1;i<=ddd.length;i++){
    selLys.push( ddd[i] );
}

//ソート
selLys.sort( smallPosX );

//ソート用関数(X座標 昇順)
function smallPosX( a, b )
{
    return (a.position.value[0] > b.position.value[0]) ? 1 : -1 ;
}


と、これでレイヤーのX座標でのソートができます。


まだ全てを試した訳ではないのですが、トランスフォームプロパティに対しては
そのままでもソート出来るようです。
他の indexinPoint などのプロパティは、別で連想配列を作ってやらないとダメでした。
まぁ、それでも連想配列さえ用意すれば比較的楽にソートできると思います。


さて、やっとこさタイトルにもありますがスクリプトの紹介ですよっと。

sort_Layers_01


コンポ内の選択レイヤーを各プロパティでソートし並び替えるスクリプトです。
コンポ内にカメラレイヤーがある場合(複数可)は、レイヤーが3Dレイヤーかどうかは関係なく
対象のカメラからの距離で並び替えできます。
(カメラから遠いレイヤーから順番に下から並べるとか)

1つ問題がありまして、スクリプトで取得できるのはローカル座標なので、もし親子関係になってたり
する場合、意に反する結果になる
と思います。
これを解決するには何かしらワールド座標を取得する必要があるのですが、今回は入れていません。
今後、使用していく中で必要を感じるようなら考えます。
あと、今回ウインドウはダイアログで作ってます。
閉じないとAE側に触れないのですが、気分でそうしちゃいました。
これに関しても使ううちにイライラするようなら変更するかもしれませんです。


sort_Layers.jsx (zip)    ← 右クリックでDL

=動作確認=
AfterEffects CS4  / windows7  &    mac OS 10.6.8
AfterEffects CS5.5  / windows7



======追記=======
書き忘れましたが、カレントフレームでの値でソートしているので、
キーが打たれてある場合はカレントフレームの位置によって並びが変化しますよっと。




投票ボタン付けてみました。

blogram投票ボタン       べ、べつに押したっていいんだからねっ! s(●'へ'●)2


PR

コメント


コメントフォーム
お名前
タイトル
文字色
メールアドレス
URL
コメント
パスワード
  Vodafone絵文字 i-mode絵文字 Ezweb絵文字


忍者ブログ [PR]
カレンダー
10 2024/11 12
S M T W T F S
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
カウンター
プロフィール
HN:
curryegg
性別:
非公開
自己紹介:
たま~にしか更新しないです。たぶん・・・・

最近メールアドレスが変わりました。
ご意見、ご要望などありましたら

curryeggs@gmail.com


までお願いします。


Twitter :


http://twitter.com/curry_eggs

Twitpic :

http://twitpic.com/photos/curry_egg
Scripts & Applications
これまでに公開した、
稚拙スクリプト&アプリです。


AfterEffects CS4~ Scripts

レンダーキュー追加スクリプト改訂版
setRenQ_CC



AfterEffects CS6~ Scripts

演出支援 コンテ撮用スクリプト集
conte_Compositor



AfterEffects CC Scripts

AE CC 2014対応 テキストレイヤーフォント一括編集&フォントリスト作成スクリプト
fontChanger_CC



AfterEffects CC Scripts

AE CC 2014対応 カスタマイズ・スクリプトランチャー
CustomLauncher_Extra_CC_2014



AfterEffects CC Scripts

AE CC用 エクスプレッション・エディタ
EXP_Editor_CC



AfterEffects CC Scripts

AE CC ポップアップインターフェイス テストスクリプト
test_popupUI_CC



AfterEffects CC & CS6 Scripts

AE CC & CS6 タイムシートスクリプト 正式版
timesheetAE_CC



AfterEffects CC Scripts

AE CC版 タイムシートスクリプト ベータ版
timesheetAE_CC_beta



AfterEffects CC Scripts

AE CC対応 カスタマイズ・スクリプトランチャー
CustomLauncher_Extra_CC ver3.0



AfterEffects CC Scripts

AE CS6版 タイムシートスクリプト ベータ版
timesheetAE_beta



AfterEffects CS4~6 Scripts

テキストレイヤー一括編集
font_Changer



AfterEffects CS6 Scripts

CS6用 エクスプレッション・エディタ
EXP_Editor



AfterEffects CS4&CS5.5 Scripts

選択レイヤーを各プロパティでソートし並び替えるスクリプト
sort_Layers



AfterEffects CS4 Scripts

AE CS4用 パスのポイントに合わせて配置スクリプト
PathToCrowd



AfterEffects CS4 Scripts

AE CS4用 scale & starttime ランダムスクリプト
ramdom_Collection_Lite



AfterEffects CS4 Scripts

AE CS4用 複数フッテージ 置き換えスクリプト
ReplaceFiles_SameDirectory



AfterEffects CS3 Scripts

AE CS3用 カスタマイズ・スクリプトランチャー
CustomLauncher_Extra_CS3



AfterEffects CS4 Scripts

AE CS4用 レイヤーマネージャー テストスクリプト
LayerManager_test



AfterEffects CS4 Scripts

AE CS4用 ポップアップUI テストスクリプト
popupUI_test



AfterEffects CS4 Scripts

AE CS4用 ブラインドパネルUI サンプルスクリプト
blindPnlUI_sample



AfterEffects CS4 Scripts

AE CS4用 カラーピッカー サンプルスクリプト
pickerUI_beta



AfterEffects CS4 Scripts

AE CS4用 パラ/フレア 高速オペレーションスクリプト
FP-Launcher_CC



AfterEffects CS4 Scripts

AE CS4用 レンダーキュー追加スクリプト
setRenQ



AfterEffects CS4 Scripts

AE CS4用 カスタマイズ・スクリプトランチャー
CustomLauncher_Extra



AfterEffects 6.5 Scripts

AE 6.5用 複数コンポエディットスクリプト
EditComps_for6_5



AfterEffects 6.5 & CS4 Scripts

AE レイヤーソートスクリプト
CompLayers_Sorting



AfterEffects CS4 Scripts

AE CS4用 複数コンポエディットスクリプト
EditComps_forCS4



AfterEffects CS4 Scripts & Applications

AE CS4スクリプト&タイムシートアプリ
TimeSheet_CS4_forWin(Mac)



AfterEffects 6.5 Scripts & Applications
AE 6.5スクリプト&タイムシートアプリ
TimeSheet_forWin(Mac)

AE 6.5 タイムリマップ サンプルスクリプト
タイムリマップ Sample Script



Java Applications

アニメーション作画・演出支援ツール
eseQ_Tools
(eseQAR & eseQScan)




PhotoShop CS2 Scripts

複数レイヤーのレイヤーカラーを一気に変更
SelLyColor_Chg_EXX(jsx)

レイヤー名変更プリセット
LyReName_Set(jsx)

複数ファイル統合ドロップレット
Drop_Import_Files_Delux(jsx)

ブログ内検索
最新コメント
[09/28 Scottlor]
[09/27 MarquisVeT]
[09/26 スーパーコピー時計]
[09/05 高級時計コピー]
[08/30 スーパーコピーブランド専門店]
最新トラックバック
アクセス解析
バーコード
どろんぱ