神速シリーズで紹介されました。

ごごごごごごぶさたしております。

1月15日(水)に発売される「神速Illustratorグラフィックデザイン編]」にて何点かスクリプトの紹介を頂きました。
のでこちらでも紹介させていただきます。

イラストレーターを使ってるかたは一度手に取ってみてください。

神速Illustrator [グラフィックデザイン編] CC対応

神速Illustrator [グラフィックデザイン編] CC対応

神速InDesign

神速InDesign

神速Photoshop [グラフィックデザイン編]

神速Photoshop [グラフィックデザイン編]

スクリプトが動かないよー」とかいう質問が大量にくると困るので補足ページを貼っておきます。

スクリプトの紹介ページ
イラストレーターのテキストフレームを行ごとに分割したり統合したり
イラストレーターでブラシをランダムに適用する
正規表現を使ってテキストをいじる3.0

補足ページ:
doEx.jsxについての簡単な説明
doEx.jsxについての簡単な説明2
doEx.jsxのチートシート

名もないテクノ手:スクリプトの使い方(種類・保存・利用)

私的illustraotスクリプトの整理と実行

スクリプトは目的別にフォルダに分けます。


それぞれのフォルダの中にあるスクリプト
アルファベット+説明分で構成します。


ここまで整頓すればあとは気持ちよく実行するだけです。


例えばテキストの連結がしたいと思ったら


例えば続けてアートボードをフィットさせたいと思ったら


と、こんな感じでほぼ何も考えないでスクリプト実行することが出来ます。
なれると気持ちいいですよ。
私的illustraotスクリプトの整理と実行でした。


【追記】
Windowsだと直前に使用したフォルダを覚えてくれないのでうまくいきません。orz
OSXでもLionはFinderがヌルっとして全然気持ちよくない。MountainLionは改善されたので大丈夫。

BridgeTalkのonReceiveの正体がようやく判ったよ

夏の暑さも和らいで かなり過ごしやすくなってきた今日この頃
みなさまはいかがお過ごしでしょうか。
さてデバックが面倒で敬遠されがちなBridgeTalk。
いままで気になってはいたのですがようやくBridgeTalk.onReceive関数の使い方が判りました。

いままで、BridgeTalkといえば見送ったあとはonResult関数で帰還を待つしか手段がないと思っておりました
が…実はonReceive関数で何度も顔を覗きに戻ってこれるようなのです。
実際のソースは以下の通り。

InDesign側からBridgeTalkを一回だけ投げたあとは、
Photoshop側から何度もBridgeTalkでInDesign側に顔を出す仕掛けです。
そこで重要になるのがonReceive関数。
あっちにいったりこっちにいったりとなかなか落ち着きのない子なのですが
使い方によっては面白いことが出来るかもしれません。

#target 'indesign';
//
var data = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20]; 


//photoshop側の処理をまとめたもの
var PS = {
    "init" : function() { 
                   PS.RECEIVE(); /*indesignへBridgeTalkで返信*/
                   return "ID.end()"; /* InDesign側のbt.onResult関数に値が渡る */
   },

   "RECEIVE": function (){
                    var bt = new BridgeTalk(); 
                    bt.target = "indesign"; 
                    bt.onResult = function(rbt){ /* InDesign側のonReceive関数から返値が来る */
                                try{
                                    /*  結果にtrueが帰ってきたら。続けて返信 */
                                    if(eval(rbt.body)){
                                            PS.RECEIVE(); 
                                    }else{
                                    
                                    };
                                }catch(e){
                                    
                                }
                    };
                    bt.onError = function(ebt){PS.DEBUG("PS Error : "+ebt.body)};
                    bt.onTimeout = function(){PS.DEBUG("timeout...")}
                    bt.body = "ID.getDATA()"; 
                    bt.send(20);  /* InDesign側のonReceive関数に送信される */
    },

    /* 何かの処理    true か false を返す*/
    "EXE" :  function (d){
        d || d = false;
        $.sleep(300);
        PS.DEBUG(d);
        return d ? true : false;
    },
    /* */
    "DEBUG" : function(mes){
               $.writeln(mes);
    }
};



//BridgeTalk先からさらきBridgeTalkで返信が来た場合の処理;
BridgeTalk.onReceive = function( msg ) { try{  return eval(msg.body);}catch(e){return e;} }


//InDesign側の処理をまとめたもの
var ID = {
    "init" : function(){
            /*  PhotoShopへBridgeTalk */
            var bt = new BridgeTalk(); 
            bt.target = "photoshop"; 
            bt.body = "eval('var PS = "+PS.toSource()+"');PS.init();"; /* PSオブジェクトを渡して PS.initを実行 */
            bt.onResult = function( bt ) {return eval(bt.body);}; 
            bt.onError = function( bt ) {ID.DEBUG("ID Error : " + bt.body );}; 
            bt.onTimeout = function(){ID.DEBUG("timeout..")};
            bt.send(30000);
    },
    /* dataを返す */
    "getDATA" : function(){
            $.sleep(500);
            return "PS.EXE("+data.shift().toSource()+");";
            },
    /*  最後の一言 */
    "end"  : function(){ID.DEBUG("終了"); },
    
    "DEBUG" : function(mes){
               $.writeln(mes);
    }
}


ID.init();


JSONP風味な感じでやりとりするのがマイブームだったりします。
けっこう読みやすくてイケてるような気がするのですがどうでしょうか?

1番目と2番目の差を計算して数字や文字を推測して補完するスクリプト

こんな感じで動作します。

数字だと思われる場合は、差分を足し算で計算。
文字の場合は文字コードの差分から計算します。

ダウンロード

doEx.jsxのチートシート

完全に自分用ですが。

コメントを頂いたので追記:

Startup Scriptsフォルダに起動時に見込みたいファイルをコピー(エイリアスも可)することで
#includepathと#includeが必要なくなります。
"CS6"の部分はバージョン名で置き換えて下さい。

Windowsの場合
"C:\Program Files\Adobe\Adobe Illustrator CS6\Startup Scripts\doEx.jsx"
MacOSXの場合
"/Library/Application\ Support/Adobe/Startup\ Scripts\ CS6/Illustrator/"

イラストレーターのテキストフレームを行ごとに分割したり統合したり

イラストレーターのテキストフレームを行ごとに分割したり統合したりする作業ってありますよね。あるんです。
そこでスクリプトを何個か書いたので公開しておきます。
まずは定番の
複数行をバラバラにするスクリプト

ダウンロード

バラバラの行を統合するスクリプト

ダウンロード

バラバラのテキストを間隔を保ったまま一行に統合するスクリプト

ダウンロード

このスクリプトのキモは
this.textRange.duplicate(any.textRange)みたいなことが出来るのに気がついて今まで一文字毎に処理していたのが一気に簡略に書けたってことろです。
以上

大量のアンドゥが発生して嫌なスクリプトはラッパを作って幸せになろう計画

夏休みが終わってしまいました。
あれほど子供の時は長く感じた夏休みも大人になってしまえば「あ」っという間です。
子供に「宿題は終わったのか?」「進んでいるのか?」と夏休み中、何度も何度も言ってしまいました。
あれ程、子供の頃は五月蠅く感じた親の言葉をついつい口走っている自分。
ようやくあの時の親の気持ちが判りかけてきましたw
ってまだ宿題が全部終わってないとは…やれやれです。
蛙の子はやはり蛙の子なのでしょうか。

さて話は変わりますがInDesignスクリプトはみなさんお使いでしょう。
通常スクリプトを実行するだけだとスクリプトの命令毎にアンドゥが発生してしまいます。
いざスクリプト実行前の状態に戻そうと思ってもなかなか大変だったりしませんか?
大変ですよね?
ということで、インデザインCS4から実装されたUndoModesを使ってアンドゥ回数を制御するスクリプトを作ってみようと思ったのですが…
これdoScriptを絡ませないといけないみたいで、これまたいちいちスクリプト毎に書くのが面倒くさい…
のでラッパースクリプトを生成するスクリプトを作りました。
たぶんこれで幸せになれるはず。
ダウンロード

使い方:
1.実行すると実行したスクリプトを聞いてくるので選択。
2.選択したスクリプトが実行されます。
3.「FAST_ENTIRE_SCRIPT」というフォルダが作られます。
4.その中にラッパースクリプトが生成されます。
5.次からはそのラッパースクリプトを使えば幸せに。
6.そんな感じ。