Skip to main content
Inspiring
April 2, 2022
Answered

Illustrator スクリプト: 選択しているオブジェクトが入っているレイヤーを取得するには

  • April 2, 2022
  • 4 replies
  • 2424 views

お世話になっております。

 

選択しているオブジェクトが入っているレイヤーを取得したいのですが、

 

var parent=app.activeDocument.selection.parent;

 

これでは親レイヤー取得できないみたいでした。

色々調べてみたのですがお手上げ状態です。

 

よろしくお願いします。

This topic has been closed for replies.
Correct answer Ten A

ストレートに参照を得る場合はこうですね。

app.activeDocument.layers.getByName(app.selection[0].parent.name)

4 replies

Ten A
Community Expert
Community Expert
April 2, 2022

あと、最初のやつがダメだったのはselectionは選択範囲コレクションでこの配列自体は親を持たないためです。親を参照するには配列の各要素を見ないとダメです。

nekkonekoAuthor
Inspiring
April 2, 2022

配列で返っていたんですね。失念してました。

 

ちなみにですがドキュメントが複数開いている場合、各ドキュメントのレイヤーを取得したくて

 

var doc = app.documents ;
var list = [];

var photoLayer = app.selection[0].layer ;

for(i=0; i<doc.length;i++){
    list.push(doc[i]);
}

for(i=0; i<list.length; i++){ 
    app.activeDocument = list[i];
    alert(photoLayer);
}

 

こう書いてみたのですが、最初のアクティブドキュメントのレイヤーしか取得出来ませんでした。

以前質問した時のように書く順番がおかしいのか、app.selection[0].layerがアクティブドキュメントのレイヤーを対象としてないからなのか?と思って色々試したのですが出来ませんでした・・・。

 

何が問題でしょうか。

Ten A
Community Expert
Community Expert
April 2, 2022

selectionは選択範囲のコレクションですから当然、アクティブなドキュメントのものです。

書き方としてはapp.documents[0].selectionで1番目のドキュメントの選択範囲となりますが、予め選択範囲を設定したドキュメントを複数用意するような処理の仕方は効率が良くない場合が多いかと思います。

 

Ten A
Community Expert
Community Expert
April 2, 2022

単純な話、オブジェクトの親はレイヤーなので最短は「app.selection[0].parent」になるんですが、階層構造と名前引きの手順の組み合わせはよく利用される使い方なので覚えておくと良いかと思います。
あと、オブジェクト周りの調査にはPropertyExplorer使うと良いです。

 

https://exchange.adobe.com/creativecloud.html?zpluginId=1170

Ten A
Community Expert
Ten ACommunity ExpertCorrect answer
Community Expert
April 2, 2022

ストレートに参照を得る場合はこうですね。

app.activeDocument.layers.getByName(app.selection[0].parent.name)
nekkonekoAuthor
Inspiring
April 2, 2022

ありがとうございます!

こんな簡単に出来るんですね・・・使ってみます。

nekkonekoAuthor
Inspiring
April 2, 2022

すみません、自己解決しました。

 

.hasSelectedArtwork
を使って出来ました。