Adobe Illustratorにて、JavaScript経由で取得したオブジェクトの
の2点について詰まったのでメモを残しておきます。
document.pageItemsなどの*Itemsコレクションとselection配列は、重ね順でソート済みです。 ユーザーが後からソートする必要はありません。
Adobe IllustratorにはJavaScriptによる操作が可能です。
定型処理をスクリプト化しておくことで、作業効率を向上させることができます。
このスクリプト上では、さまざまなIllustrator上の情報の確認と操作ができます。
たとえば
activeDocument.selection
で現在選択しているオブジェクトの配列を取得できます。
activeDocument.pageItems
ならばドキュメント上のすべてのアートアイテム(レイヤーを除くテキスト、シェイプ、画像など)を取得できます。
selection以外の〇〇Itemsクラスは、コレクションであり配列ではありません。 そのためfor文で中身を取得することはできますが
という違いがあります。
コレクションに対してArray.prototype関数を利用したい場合は、要素をforループで取り出し新規の配列にpushで詰め直すなどの処理が必要になります。
これらの配列およびコレクションは取得した段階で、重ね順の最前面から順にソートされています。 ユーザー側が明示的にソートする必要はありません。 最前面からの処理が必要な場合はforループで、最背面からの処理が必要な場合はデクリメントのforループで処理ができます。
アートアイテムのインスタンスには、zOrderPosition
という変数が設定されていることがあります。これは同一のグループ / レイヤー内での重ね順を示すものです。
最背面にあるアートアイテムにはzOrderPosition自体がありません。undefinedではなくプロパティ自体が存在しないため、アクセスするとエラーでスクリプトが停止します。zOrderPositionにアクセスする場合はtry構文でエラーを避けるか、プロパティ自体にはアクセスせずにzOrder関数を経由して操作することをオススメします。
配列およびコレクションの順序がオブジェクトの重ね順であるということがリファレンスに明示されていないため、しばらく詰まりましたが処理は不要でした。
以上、ありがとうございました。