終了

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

積極的な参加者 ,
Apr 01, 2022 Apr 01, 2022

リンクをクリップボードにコピー

コピー完了

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

 

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

 

var parent=app.activeDocument.selection.parent;

 

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

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

 

よろしくお願いします。

キーワード
スクリプティング

表示

1.6K

翻訳

翻訳

レポート

レポート
コミュニティガイドライン
他のユーザーへの思いやりを持ち、敬意を払いましょう。コンテンツの出典を明記し、投稿する前に内容が重複していないか検索してください。 さらに詳しく
community guidelines

correct answers 1 件の正解

Community Expert , Apr 01, 2022 Apr 01, 2022

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

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

投票

翻訳

翻訳
積極的な参加者 ,
Apr 01, 2022 Apr 01, 2022

リンクをクリップボードにコピー

コピー完了

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

 

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

投票

翻訳

翻訳

レポート

レポート
コミュニティガイドライン
他のユーザーへの思いやりを持ち、敬意を払いましょう。コンテンツの出典を明記し、投稿する前に内容が重複していないか検索してください。 さらに詳しく
community guidelines
Community Expert ,
Apr 01, 2022 Apr 01, 2022

リンクをクリップボードにコピー

コピー完了

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

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

投票

翻訳

翻訳

レポート

レポート
コミュニティガイドライン
他のユーザーへの思いやりを持ち、敬意を払いましょう。コンテンツの出典を明記し、投稿する前に内容が重複していないか検索してください。 さらに詳しく
community guidelines
積極的な参加者 ,
Apr 01, 2022 Apr 01, 2022

リンクをクリップボードにコピー

コピー完了

ありがとうございます!

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

投票

翻訳

翻訳

レポート

レポート
コミュニティガイドライン
他のユーザーへの思いやりを持ち、敬意を払いましょう。コンテンツの出典を明記し、投稿する前に内容が重複していないか検索してください。 さらに詳しく
community guidelines
Community Expert ,
Apr 01, 2022 Apr 01, 2022

リンクをクリップボードにコピー

コピー完了

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

 

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

投票

翻訳

翻訳

レポート

レポート
コミュニティガイドライン
他のユーザーへの思いやりを持ち、敬意を払いましょう。コンテンツの出典を明記し、投稿する前に内容が重複していないか検索してください。 さらに詳しく
community guidelines
Community Expert ,
Apr 01, 2022 Apr 01, 2022

リンクをクリップボードにコピー

コピー完了

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

投票

翻訳

翻訳

レポート

レポート
コミュニティガイドライン
他のユーザーへの思いやりを持ち、敬意を払いましょう。コンテンツの出典を明記し、投稿する前に内容が重複していないか検索してください。 さらに詳しく
community guidelines
積極的な参加者 ,
Apr 02, 2022 Apr 02, 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がアクティブドキュメントのレイヤーを対象としてないからなのか?と思って色々試したのですが出来ませんでした・・・。

 

何が問題でしょうか。

投票

翻訳

翻訳

レポート

レポート
コミュニティガイドライン
他のユーザーへの思いやりを持ち、敬意を払いましょう。コンテンツの出典を明記し、投稿する前に内容が重複していないか検索してください。 さらに詳しく
community guidelines
Community Expert ,
Apr 02, 2022 Apr 02, 2022

リンクをクリップボードにコピー

コピー完了

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

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

 

投票

翻訳

翻訳

レポート

レポート
コミュニティガイドライン
他のユーザーへの思いやりを持ち、敬意を払いましょう。コンテンツの出典を明記し、投稿する前に内容が重複していないか検索してください。 さらに詳しく
community guidelines
積極的な参加者 ,
Apr 03, 2022 Apr 03, 2022

リンクをクリップボードにコピー

コピー完了

そもそもスクリプトは、こういう場合の処理にはあまり使われないということですかね?だとしたらちょっと勘違いしていました・・・!

投票

翻訳

翻訳

レポート

レポート
コミュニティガイドライン
他のユーザーへの思いやりを持ち、敬意を払いましょう。コンテンツの出典を明記し、投稿する前に内容が重複していないか検索してください。 さらに詳しく
community guidelines
Community Expert ,
Apr 03, 2022 Apr 03, 2022

リンクをクリップボードにコピー

コピー完了

選択範囲って手作業で選択しておくのですよね?
ならば、選択して意図したものが選択した状態なのを確認できた時点でそのままスクリプト当てちゃう事が多いかと思います。選んだ状態でべつのに移っちゃうと本当に正しく選択できているのかが定確認できなくなくなっちゃいますから。そして、結果を確認した上で次ののドキュメントに移ると。
複数のドキュメントに対して処理したいのであれば対象オブジェクトを具体的に、例えば特定のオブジェクトを特定のレイヤーに分けておいてそのレイヤーのオブジェクトに対してスクリプト処理をかけるなど、スクリプト処理前提のデータ構造にしておくのが自動化の上で無用のトラブル発生を抑制する手段となります。
とりとめのない作り方をされたデータの部分に対して行う処理は選択範囲がターゲットになるケースが多いですが、そういったものに対してはスクリプトを手早く適用できる手法、JSXランチャーの様なスクリプトランチャーやアクション経由でショートカットを適用できるようにするような手段が有効かと思います。

投票

翻訳

翻訳

レポート

レポート
コミュニティガイドライン
他のユーザーへの思いやりを持ち、敬意を払いましょう。コンテンツの出典を明記し、投稿する前に内容が重複していないか検索してください。 さらに詳しく
community guidelines
積極的な参加者 ,
Apr 03, 2022 Apr 03, 2022

リンクをクリップボードにコピー

コピー完了

最新

そうですね。手作業で選択しておくというか、このスクリプトを実行する前の段階で開いているドキュメントに対して必ず行う作業があって(他のスクリプト含む)、結果として“AというレイヤーのBというオブジェクトを選択している”という形になっています。ドキュメントの構造はほぼ同じ感じです。

 

ただ、その前作業の段階でミスが起こり得る可能性が0%ではないので、ミスを直す手間を考えると確かに結果的に効率悪くなってしまいますね。それを考えてスクリプトを作っていくべきでした。

投票

翻訳

翻訳

レポート

レポート
コミュニティガイドライン
他のユーザーへの思いやりを持ち、敬意を払いましょう。コンテンツの出典を明記し、投稿する前に内容が重複していないか検索してください。 さらに詳しく
community guidelines