2012年3月25日日曜日

わけわかめのオブジェクトモデル図 その1

4月からの働き口が無事見つかりましたので、再びjavascriptの写経開始。
DTP Booster035に向けての予習です。
まぁ、こちらはIllustratorなんですけどね。

随分、間が空いたんですけど、
・ガイドラインを削除する
・ヘアライン(0.04mm以下の線幅)を0.04mmにする
の2つだけは覚えてました^^ ちなみに自分が暗記していたscriptは最小限のもので
ガイドラインを削除するのは
var guideobj=app.activeDocument.guides;
for(var g=guideobj.length-1; g>=0; g--){
guideobj[g].remove();
}
0.04mm以下の線幅を0.04mmにするのは
var lineObj=app.activeDocument.graphicLines;
for(var g=0; g<lineObj.length; g++){
if(lineObj[g].strokeWeight<0.04){
lineObj[g].strokeWeight=0.04
}
}
※ちなみに0.1mmではなく0.04にしてるのはアチキのこだわり。
ゲラより太い線になっては可笑しいでしょ。


これを元にオブジェクトモデル図を帰納法的に理解していく経過メモ。
まずガイドを削除したいを例にとる。
InDesign Object Model CS-CS5.5を開き、control+Fで「ガイド」と入力。8つの候補が出てくる。《ページオブジェクト》のガイドがいかにもそれっぽい。↓【図1】


この左端の線を上にたどるとDocument[文書]にたどり着く。
だからapp.activeDocument.guidesのパスが成立すると勝手に理解。
guideがguidesと複数になるのは、そういうもんだと納得するしかない。

ところがガイドのプロパティ(オブジェクト)を見るとparentにDocumentがあるのはver.3~5まで、6以降にDocumentはない。↓【図2】
前述のscriptはCS4(ver.6)で動作しただけに、【図1】にあるようにCS以降の全バージョンに対応しているのかもしれない。

次は線幅。「線幅」と入力してもヒットしない。
「線」で入力。34の候補が現れる。
次々クリックしてみると[線の効果][線種][直線]に大まかに分けられていることに気付く。《ページオブジェクト》の直線を開き、「幅」で検索。
strokeWeight(線幅)がヒット。↓


だからapp.activeDocument.graphicLines.strokeWeightのパスが成立。
ところがこいつもプロパティ(オブジェクト)でparentを見るとわけわかめなんですよ。↓



そんなわけで写経するばかりでなく、オブジェクトモデル図を理解していこうとする初日。
先は長いですww


追記:流星さんからアドバイスをいただきました^^
@zi_chao ちなみにですがCS4でのGuidesのparentは、マスター上・レイヤーを変えて2つ用意してみましたが、どちらも同じくPageのクラスになっていました。各versionで得られるクラスが異なるので、同じプロパティでも分けて表記されているのだと思います。

カタカナ用語が苦手なりにググってみました。クラス、オブジェクト、インスタンス、メソッドについて。
こいつにプロパティや値が加わるのですが。。。自分なりのベストアンサーは
私の経験でいわせて頂くと
クラスその他の概念は概念から入ると失敗します。
私はこれで1年くらいを無為に過ごしました。

結局のところCなりJAVAなりのプログラムを実際に動かして、
あとで概念のつじつまを合わせていく方がいいようです。

なお、概念としてはデザインパターン関係の本が優れていると
多くの人が指摘しています。
今回もこの問題から逃げ、麻雀の後ヅケでいきます^^

0 件のコメント:

コメントを投稿