終了

【Javascript】複合パスの名前は変更できても、パスの名前は変更できない

積極的な参加者 ,
Oct 30, 2023 Oct 30, 2023

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

コピー完了

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

 

とあるスクリプトに、パスに名前をつけるという動作をいれたのですが、複合パスには名前はつけられるのに、ただのパスには名前をつけられない場合がありました。

 

chatGPTに聞いてみたら、

-----------------------------------------------------------------

通常のパスに名前を設定できない理由の一つとして、通常のパスが通常のパスであり、その性質が単純なベクトルデータを表現することにある可能性があります。通常のパスは、例えば線や曲線のセグメントなど、単純な図形を構成するために使用されます。このようなパスは、通常は名前が設定されないことが多いため、名前を変更できないことがあります。

一方、複合パスは、複数のパス要素が組み合わさったもので、通常のパスよりも複雑な形状を表現するために使用されます。複合パスに名前を設定できる理由の一つは、それがより複雑な構造を持つため、名前を設定して識別しやすくする必要性があるからです。

-----------------------------------------------------------------

と言われました。こういうことってあり得るのでしょうか?

 

var sel = app.activeDocument.selection;
var nameArr = ['りんご', 'ごりら', 'ラッパ', 'パセリ'];

for (var i = 0; i < sel.length; i++) {
    sel[i].name = nameArr[i];
}

これならパスでも変更は出来るけど、

var sel = app.activeDocument.selection;
var nameArr = ['りんご', 'ごりら', 'ラッパ', 'パセリ'];
var changeArr = [];

for(w=0; w<sel.length; w++){
    changeArr.push(sel[w]);
}

for (var i = 0; i < changeArr.length; i++) {
    changeArr[i].name = nameArr[i];
}

例えば上記のように一旦配列にいれたものに対してつけようとすると出来ない、みたいなイメージです。

(ちなみに上記のコードは複合パスでもパスでもちゃんと名前は変更できます。)

 

同じ作りなんですが、このコードの前後にいろいろな動作が組み合わさっている時、なぜかよく分からないけどパスのものだけ名前が変更できない場面があります。

 

上のコードは動くので、単純に私が書いたスクリプトのどこかがおかしい可能性が大きいのですが、全部のコードを載せるといろいろ問題があるので載せられません・・・。

 

実際のコードじゃないと分からないと思うんですが、

可能性として何がおかしいとかってわかりますでしょうか・・・。

ふわっとした質問で申し訳ございません。

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

表示

334

翻訳

翻訳

レポート

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

correct answers 3 件の正解

Community Expert , Oct 30, 2023 Oct 30, 2023

回答書いて戻ったら被ったのでやめますけど、こと、ExtendScriptに関してはChatGTP-3.5に聞いてはいけません。ほぼ正しい回答が出てきません。

パスアイテムであってもnameプロパティが存在し、正しく扱えば取得できます。

ChatGTPに聞くよりPropertyExplorerでオブジェクトやメソッドを洗い出す方が効率は良いように思います。

投票

翻訳

翻訳
積極的な参加者 , Oct 30, 2023 Oct 30, 2023

↑を書いた後にいろいろやってみました。

 

コードでは元々グループアイテムだったものを複合パスやパスにした後に名前を変更しているので、おかしな感じになっていたのかもです。

 

複合パスやパスにした後のものを空配列に突っ込んで、それに同じように名前をつけたら普通に複合パスもパスもちゃんと変更ができました!

スマートなやり方じゃないと思うんですが、ちゃんと出来ました(涙)

投票

翻訳

翻訳
Community Expert , Oct 30, 2023 Oct 30, 2023

〈元〉selection配列をそのまま使用

〈後〉リネーム対象を配列化して使用

ということですね。なっとくなっとく。

投票

翻訳

翻訳
Community Expert ,
Oct 30, 2023 Oct 30, 2023

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

コピー完了

最初に言うことですが、ChatGPTを頼るのはきっぱりおすすめしません…

注文の付け方が上手だったりでたまたま正解が出ることはありますが、スクリプティングって調査力も必要だと思うので…

 

今回の件は、ループ内で名前を付ける直前にchangeArr[i]とnameArr[i] 双方の値を出力してみるなどしてデバッグしてみましょう。

開発環境は何を使っていますか?(前に聞いたかもしれません…)

投票

翻訳

翻訳

レポート

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

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

コピー完了

ありがとうございます。

この前ChatGPTにコードを聞いたら絶対動かないようなものを頂いたのでさすがにコードはやめときましたが、ちょっとした知識なら正しいの教えてくれるかと思っていました。

やっぱりダメですよね・・・。

 

開発環境はVisual Studio Codeです。ExtendScript Debuggerっていうのを使ってます。

名前をつける直前、changeArr[i]がCompoundPathItemやPathItemではなくGroupItemとして出力されていました。名前をつけた後も「GroupItem 名前」って感じで出力されています。関係ありそうですが、どう直して良いのか分からないです・・・。

投票

翻訳

翻訳

レポート

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

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

コピー完了

↑を書いた後にいろいろやってみました。

 

コードでは元々グループアイテムだったものを複合パスやパスにした後に名前を変更しているので、おかしな感じになっていたのかもです。

 

複合パスやパスにした後のものを空配列に突っ込んで、それに同じように名前をつけたら普通に複合パスもパスもちゃんと変更ができました!

スマートなやり方じゃないと思うんですが、ちゃんと出来ました(涙)

投票

翻訳

翻訳

レポート

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

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

コピー完了

配列に入れてからリネームするほう走らせてみました。

単独パス、複合パス、グループ、すべて正常に名前つきますね。

スクリーンショット 2023-10-31 9.22.28.png

仮に、グループの子オブジェクト(<長方形>2つ)に名前をつけたい、という話であれば

だいぶ直すところがあるんですが。

投票

翻訳

翻訳

レポート

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

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

コピー完了

激しく入れ違いましたが…

 

>コードでは元々グループアイテムだったものを複合パスやパスにした後に名前を変更している

グループ解除したという意味ですかね?

投票

翻訳

翻訳

レポート

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

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

コピー完了

すみません・・・

 

元々グループにパスが入っているものを、パスが複数だったら複合パスにして、一つだけならグループ解除するだけという動作をします。

その後に出来たパスや複合パスに名前をつけるって感じです。

投票

翻訳

翻訳

レポート

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

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

コピー完了

別のアカウントでコメントしてしまいましたが・・・。

投票

翻訳

翻訳

レポート

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

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

コピー完了

最新

〈元〉selection配列をそのまま使用

〈後〉リネーム対象を配列化して使用

ということですね。なっとくなっとく。

投票

翻訳

翻訳

レポート

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

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

コピー完了

回答書いて戻ったら被ったのでやめますけど、こと、ExtendScriptに関してはChatGTP-3.5に聞いてはいけません。ほぼ正しい回答が出てきません。

パスアイテムであってもnameプロパティが存在し、正しく扱えば取得できます。

ChatGTPに聞くよりPropertyExplorerでオブジェクトやメソッドを洗い出す方が効率は良いように思います。

投票

翻訳

翻訳

レポート

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

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

コピー完了

ありがとうございます。

chatGPTは使っていて、デザインの提案とかそっち方面ならまだ面白いなって思うことはありましたが、こういうことは聞くのやめた方がいいみたいですね。

 

パスアイテムにグループアイテムとして名前をつけてしまってるのかもしれません。

それぐらいしか可能性がありそうな問題が見つかりませんでした・・・。

 

投票

翻訳

翻訳

レポート

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