公開日:2017年10月26日
オブジェクトモデルビューアを見るとクラス「PageItem」などのプロパティに「properties」という項目があります。
「これ使えば選択したオブジェクトの線幅とか情報掴めそうじゃない?」ということで
alert(app.activeDocument.selection[0].properties)
のようなコードを書いて動かすと…
それは分かってるんだよ…というアラートが返ってきました(そもそもここで返ってくる「Object」はInDesignでのオブジェクトのことではなくて「スクリプトでのプロパティの集まり」のこと)。じゃあこのproperties、何に使うんだ…というと、「{}でオブジェクトとしてまとめて記述するので、スクリプト中でのカスタマイズが楽になる」利点があります。
「長方形を選択した状態」というケースで、どう動くのかを以降に書いていきます。
1.目的のクラス、プロパティを探す/1’:プロパティとメソッドってこんな感じ/2.選択したアイテムの情報を得る/3.スクリプトで設定した値を反映する
まず、オブジェクトモデルビューアで目的のモノを探します。
app.activeDocument.selection[0]
、つまり「選択した長方形」は「PageItem」なので、「クラス」から「PageItem」を探し、それをクリックします。
ビューア左下の「プロパティとメソッド」タブに、「PageItem」で取り扱うことのできるプロパティとメソッドが表示されます。その中から「properties」を探します。
これで先程のapp.activeDocument.selection[0].properties
を導き出せました。
ざっくりとですが、
「=X」【プロパティ】:スクリプトで掴んでいるオブジェクトの情報(あれっすよキャラAの攻撃力は…みたいにそのオブジェクトが持っている能力値というかなんというか)
「{ }」【メソッド】:スクリプトで掴んでいるオブジェクトに対しメソッドの処理をする
のように私は理解しています。
ただ、冒頭にも書いたように今のままでは線幅などの情報にはたどりつきません。「プロパティとメソッド」タブから別のプロパティに関するコードを加える必要があります。
title=”strokeWeight”/>
例えば、「プロパティとメソッド」タブからstrokeWeight(線幅)を探し、それを加えて記述すると
app.activeDocument.selection[0].properties.strokeWeight
となります。このままでは冗長なので、変数など整理して下記のようにコードを書き直します。
var selObj=app.activeDocument.selection[0];
var prps=selObj.properties.strokeWeight;
alert(prps);
この状態でスクリプトを動かすと、
title=”線幅取得”/>
となります。線幅を取得できています。ちなみに
//これでも同じ結果
var selObj=app.activeDocument.selection[0].strokeWeight;
alert(selObj);
これでも同様の結果になります。じゃあ「properties」いらないじゃないか…となるところですが、「選択したオブジェクトの線幅などを変更する」際に「properties」はとても活躍してくれます。
「properties」には、「strokeWeight」以外にも様々なプロパティがあります。「properties」を使えば、スクリプト内で「strokeWeight」などをひとまとめにして、InDesignで選択しているオブジェクトに反映できます。
var selObj=app.activeDocument.selection[0];
var fumi={
strokeWeight:1, //線幅。単位は指定がなければドキュメントの設定に依存
strokeColor:"C=100 M=0 Y=0 K=0", //線の色。スウォッチ名で指定
visibleBounds:[10,10,30,30], //位置と大きさ
label:"村上先輩", //スクリプトラベル
name:"村上先輩ーーーーー" //レイヤーパネルでのオブジェクト名
//他には…
/*
miterLimit:数値 線パネルの「角の比率」
strokeTint:数値 線色の濃度
fillColor:数値 塗りの色
fillTint:数値 塗りの色の濃度
locked:trueまたはfalse ロックされているか
visible:trueまたはfalse 表示されているかどうか。trueが表示(レイヤーパネルの目アイコン参照)
nonprinting:trueまたはfalse プリント属性パネルの「印刷なし」。trueがチェックあり
overprintStroke:trueまたはfalse 線オーバープリント
overprintFill:trueまたはfalse 塗りオーバープリント
などなど
*/
}
selObj.properties=fumi;//propertiesを使うと、{}でくくった数値を全部反映できる。スクリプト中でのカスタマイズが楽になる
このコードは、「選択したオブジェクトに(1行目)」「各数値を設定して(var prps={~})」「var prps={~}でまとめた値を、選択したオブジェクトのpropertiesに反映する(最終行)」という処理です。
これを「properties」なしで書く場合、一気に反映できないのでselObj.strokeWeight=~、selObj.strokeColor=~、selObj.label=~という具合に同じ文を何度も書かなければならず、また後から数値を書き換えるときも探しづらくなります。
もっと「properties」は使いみちがあるんだと思いますが、現時点では「オブジェクトの数値を整理して記述できるので、修正や判読が楽になる」ことが利点です。
選択していた長方形はどうなったかというと、スクリプトで設定していた部分は下記画像の値になりました。
title=”結果”/>