リンクをクリップボードにコピー
コピー完了
お世話になっております。
選択しているオブジェクトが入っているレイヤーを取得したいのですが、
var parent=app.activeDocument.selection.parent;
これでは親レイヤー取得できないみたいでした。
色々調べてみたのですがお手上げ状態です。
よろしくお願いします。
リンクをクリップボードにコピー
コピー完了
すみません、自己解決しました。
リンクをクリップボードにコピー
コピー完了
ストレートに参照を得る場合はこうですね。
app.activeDocument.layers.getByName(app.selection[0].parent.name)
リンクをクリップボードにコピー
コピー完了
ありがとうございます!
こんな簡単に出来るんですね・・・使ってみます。
リンクをクリップボードにコピー
コピー完了
単純な話、オブジェクトの親はレイヤーなので最短は「app.selection[0].parent」になるんですが、階層構造と名前引きの手順の組み合わせはよく利用される使い方なので覚えておくと良いかと思います。
あと、オブジェクト周りの調査にはPropertyExplorer使うと良いです。
https://exchange.adobe.com/creativecloud.html?zpluginId=1170
リンクをクリップボードにコピー
コピー完了
あと、最初のやつがダメだったのはselectionは選択範囲コレクションでこの配列自体は親を持たないためです。親を参照するには配列の各要素を見ないとダメです。
リンクをクリップボードにコピー
コピー完了
配列で返っていたんですね。失念してました。
ちなみにですがドキュメントが複数開いている場合、各ドキュメントのレイヤーを取得したくて
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がアクティブドキュメントのレイヤーを対象としてないからなのか?と思って色々試したのですが出来ませんでした・・・。
何が問題でしょうか。
リンクをクリップボードにコピー
コピー完了
selectionは選択範囲のコレクションですから当然、アクティブなドキュメントのものです。
書き方としてはapp.documents[0].selectionで1番目のドキュメントの選択範囲となりますが、予め選択範囲を設定したドキュメントを複数用意するような処理の仕方は効率が良くない場合が多いかと思います。
リンクをクリップボードにコピー
コピー完了
そもそもスクリプトは、こういう場合の処理にはあまり使われないということですかね?だとしたらちょっと勘違いしていました・・・!
リンクをクリップボードにコピー
コピー完了
リンクをクリップボードにコピー
コピー完了
そうですね。手作業で選択しておくというか、このスクリプトを実行する前の段階で開いているドキュメントに対して必ず行う作業があって(他のスクリプト含む)、結果として“AというレイヤーのBというオブジェクトを選択している”という形になっています。ドキュメントの構造はほぼ同じ感じです。
ただ、その前作業の段階でミスが起こり得る可能性が0%ではないので、ミスを直す手間を考えると確かに結果的に効率悪くなってしまいますね。それを考えてスクリプトを作っていくべきでした。