Pages

2015年1月20日火曜日

2015 スクリプト第一弾 も一つおまけのAEスクリプト ”projectOpenerPlus”

年末にちょっと時間が出来たので復習がてら社内で欲しいツールを募集してみたところ、
「Aftereffectsで既存のプロジェクトを開く際に、いちいちファイラーで深い階層まで潜らなくても済むツール」
というオーダーがありました。

そもそも深い階層にファイルを置かざるをえない仕様がどうなのよ、てのはありますが、 自分一人だと普段思いつかない機能だったのでこれ幸いとひとつ作ってみました。
とりあえず、動作に問題は無さそうだったのでこちらでも公開してみようと思います。

 ”projectOpenerPlus” 

何気に初めてのUI付スクリプトだったりします。
基本的にはAdobeデフォルトのpromptで十分だと思っているのですが、今回はドロップダウンリストを使ったほうが便利かな、というのもありましたし、
そろそろUI周りの作法もひと通り抑えておいたほうが良いかと思ったので、半分勉強も兼ねて…という感じです。

UI周りの参考資料は信頼のAEP PROJECT,ほぼこちらのページの引き写しです。

以下簡単に機能を説明します。

・LaunchPadから起動して、データベース内のフォルダを列挙、直接ファイルを開けるようにします  (ファイルメニューから起動しても問題無いとは思いますが…ひとまず、LaunchPad用アイコンも用意しました)
  データベース(要は普通のテキストデータです)への読み書きを行うので、Afterefects環境設定での「スクリプトによるファイルの読み書き」は必須です。

・指定場所に置かれた、特定書式で記述されたテキストファイルを読み込み、確認できたフォルダをリスト表示。
  そこからドロップダウンリストで選択されたフォルダを開き、AEPファイルのオープンダイアログを起動します。
  スクリプトUIからデータファイルを開くこともできるので、ファイラーに戻らなくても、良く使うプロジェクトのリストを整理することができるかと思います。

・検証はAftereffectsCS6で行っています。
  ファイルの削除などは行わないので危険性は相当低いかと思いますが、念の為使用は自己責任ということでお願いします。
  バグなどございましたらお気軽にご連絡下さい。

さて、以下に毎度恒例のスクリプト本文直貼り。
今回は目新しいところではUI周りくらいでしょうか。
お気づきの方はすぐに分かるかと思いますが、ほとんど上記参考ページのままです。
(古橋様、いつもお世話になっております) 

データベーステキストファイルのパスは、スクリプト自身のパスを基準に取得しようとしたのですが、 LaunchPadからの起動だと上手く取得できなかったためアプリのセッティングパラメータから引っ張ってきました。
 (”app.settings.getSetting("Adobe", "launchPad_scriptsFolder")”) 
その他、リロードの際にドロップダウンリストを一度削除してからもう一度配置するなど、あまりクレバーではない気もするのですが、 どなたか解決策などお持ちではないでしょうか。


(function(){
    /*Main Function---------------------------------------------------------------------------------*/
    function showDialog(){
        
        //1:データベースファイルを読み込む
        var dbFileName="projectOpenerPlus_db.txt";
        var dbFilePass=app.settings.getSetting("Adobe", "launchPad_scriptsFolder")+"/"+dbFileName;
        var dbFileObj=new File(dbFilePass);
        if(dbFileObj.exists){            
            var selectedIndex=-1;
            var db=readDb(dbFileObj);
            //2:フォルダの存在が確認できたデータからだけ、リストを作成する
            var dList=checkFolderExistence(db);
            if(dList.length<1 10="" 240="" 250-10="" 250-b1w="" 250="" 40="" 50="" alert="" amp="" b1h="" b1t="" b1w="" b2h="" b2t="" b2w="" btncancel="w.add(" btndbedit.onclick="function(){" btndbedit="w.add(" btnok="w.add(" btnreload.onclick="function(){" btnreload="w.add(" button="" cancel="" dbfileobj.execute="" dbfileobj.open="" ddl.items="" ddl.onchange="function(){" ddl.selection.tostring="" ddl="w.add(" dialog="" dlist="" dropdownlist="" e="" edit="" else="" g="" if="" name:="" ok="" projectopenerplus="" rdb="readDb(dbFileObj);" rdlist="" reload="" replace="" return="" s="" selected="true;" selectedindex="" split="" this.result="function(){return" this.show="function(){return" var="" w.center="" w.remove="" w.show="" w="new" window="">=0));}

        }else{
            alert("スクリプトと同階層にデータベースファイルを確認して下さい(`・ω・´)ゞ");
            return;
        }        
    }

 /*Sub Functions--------------------------------------------------------------------------------------*/
    function readDb(fileObj){
        if (fileObj.open("r")){
            var dbText=new Array();
            while(!fileObj.eof){
                var tText=fileObj.readln();
                if(tText.charAt(0)=="*"){
                    dbText.push(tText);
                }
            }
            fileObj.close();
            return dbText;
        }else{
            alert("データベースファイルが開けませんでした(´・ω・`)");
            return;
        }
    }
 /*---------*/
 function checkFolderExistence(list){
        var checkedList=new Array();
        for(var i=0; i>> Entry Point
    /*---------------------------------------------------------------------------------------------------------*/
    var dlg=new showDialog;
    if(dlg.show!=undefined){
        if (dlg.show()==true){
            var parentFileObj=new Folder(dlg.result());
            if(parentFileObj.exists){
                var result=parentFileObj.openDlg("Select the aep file", "*.aep");
                if(result!=null){
                    var openFileObj=new File(result);
                    app.open(openFileObj);
                }
            }else{
                alert("選択したプロジェクトのファイルパスが合致しません(´・ω・`)");
            }
        }
    }
})();
こんな感じです。
僕は現状仕事では3案件同時並行中だったりしますが、チェックしたり作業したり、ローカルだったりネットワーク上だったりと作業データ代わりと散らかっているので何気にこのスクリプトを重宝しています。
やればそこそこ出来るじゃないか。 

ちなみに、オーダーをくれた子がその後このスクリプトを使ってくれているかどうか…あまり現場を見た記憶がありません(´・ω・`)
宜しくば、一度お手にとってみて下さい。

それでは、今年も思いついた頃にまたスクリプトネタを上げていくかと思いますので、お付き合い頂ければ幸いです。
そろそろ、CINEMA4DやFusionのスクリプトも書けるようになりたいですね。

ではまた、いつかの次回に。


恒例のダウンロードはこちらからどうぞ。
いつの間にかBox.netのUIも洗練されてきてますね。
(15/01/24 肝心のダウンロードリンク先間違ってたので修正(´・ω・`))
 

0 件のコメント:

コメントを投稿