終了

【Javascript】コピー元のレイヤーにペーストのオンとオフをスイッチさせる

積極的な参加者 ,
Dec 05, 2022 Dec 05, 2022

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

コピー完了

お世話になります。

 

コピー元のレイヤーにペーストを確認する手間が嫌で、スイッチさせるようにしました。

 

var pref = app.preferences ;
var keyName = 'layers/pastePreserve' ;

var originalLayerPreserve = pref.getBooleanPreference(keyName) ;

if(!originalLayerPreserve) { //コピー元のレイヤーにペーストになっていなかったら、チェックする
    pref.setBooleanPreference(keyName, true) ;
    customAlert('コピー元のレイヤーにペーストON', 1);
} else { //コピー元のレイヤーにペーストになっていたら、外す
    pref.setBooleanPreference(keyName,false) ;
    customAlert('コピー元のレイヤーにペーストOFF', 1);
}

function customAlert(message, delaySeconds){
    var alertWindow = new Window('palette');
    var control_text = alertWindow.add('statictext', [0, 0, 250, 30], message, {multiline: true});

    if(delaySeconds == 0){
        var control_close = alertWindow.add('button', undefined, 'Close');       
        control_close.onClick = function(){
            if(alertWindow){
                alertWindow.hide();
            }
        };
    }

    alertWindow.show();
    alertWindow.update();

    if(delaySeconds > 0){
        $.sleep(delaySeconds * 1000);
        alertWindow.hide();
        alertWindow = null;
    }  
}

 

ちょっと重いのと、これだと現在の状態自体は確認できません。

オンとオフをスイッチさせつつ常に状態を見られるようにしたいのですが、どうしたらいいと思いますか?

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

表示

815

翻訳

翻訳

レポート

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

correct answers 2 件の正解

Community Expert , Dec 05, 2022 Dec 05, 2022

こんなかんじですね

var st = app.preferences.getBooleanPreference('layers/pastePreserve');
var w = new Window ('palette', 'panel', undefined);
var rd = [];
rd[0] =w.add('radiobutton', undefined, "ON");
rd[1] =w.add('radiobutton', undefined, "OFF");

if (st) rd[0].value = true;
else rd[1].value = true;
rd[0] .onClick = function(){app.preferences.setBooleanPreference('layers/pastePreserve',true);}
rd[1] .onClick = function(){app.preferences.setBooleanPreference('layers/pastePreserve',false);}
var cl = w.add
...

投票

翻訳

翻訳
Community Expert , Dec 06, 2022 Dec 06, 2022

手鞠先生のは2クリックなので、1クリック版を作ってみましたよ。

Illustratorの「コピー元のレーヤーにペースト」をモーダルウィンドウ上でON/OFFするJavaScript

 

スクリーンショット 2022-12-06 18.12.56.png

投票

翻訳

翻訳
Community Expert ,
Dec 05, 2022 Dec 05, 2022

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

コピー完了

ScriptUIはIllustrator本体のプロセスを消費するのでのパレットはあんまりお奨めではありませんが、やるとしたら、チェックボックスのステートで表示させて単位時間ごとにステートをチェックさせるようなことはやめた方がが良いでしょう。
わたしがやるとしたらCEPパネルを作ってトグルスイッチ表示にします。

投票

翻訳

翻訳

レポート

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

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

コピー完了

illustratorに負担かけてるだろうなとは思ってました(汗)

今回作ったのはやめておきます。

CEPパネルというのは知らなかったので調べてみますが、面倒くさがらずに普通にレイヤーパネルから見た方が一番いい気もします。。

貴重な意見ありがとうございました!

投票

翻訳

翻訳

レポート

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

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

コピー完了

こんなかんじですね

var st = app.preferences.getBooleanPreference('layers/pastePreserve');
var w = new Window ('palette', 'panel', undefined);
var rd = [];
rd[0] =w.add('radiobutton', undefined, "ON");
rd[1] =w.add('radiobutton', undefined, "OFF");

if (st) rd[0].value = true;
else rd[1].value = true;
rd[0] .onClick = function(){app.preferences.setBooleanPreference('layers/pastePreserve',true);}
rd[1] .onClick = function(){app.preferences.setBooleanPreference('layers/pastePreserve',false);}
var cl = w.add("button",undefined, "close")
cl.onClick = function(){w.close();}

w.show();

投票

翻訳

翻訳

レポート

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

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

コピー完了

わざわざ試してもらってありがとうございます!

Illustrator本体のプロセスを消費するとのことでしたので、オンとオフの切り替えがかなり必要な作業の時だけ使ってみようと思います。

本当にありがとうございました!

投票

翻訳

翻訳

レポート

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

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

コピー完了

コレぐらいならそんなに負荷はかからないんですけど、スクリプトエンジンって本体に比べると脆弱なんで別プロセスで、動くCEPにした方が安定します。

拡張機能はいくつかの手段が存在しますが、適切に使い分けるのが安定性の向上につながります。

単純にオン/オフそれぞれのスクリプトを作成してショートカットで実行するようにしても効率は良いのではないかと思います。

投票

翻訳

翻訳

レポート

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

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

コピー完了

パレットで作ったのがいくつかあるんですけど、多分それも負荷かかってるんだろうなぁ・・・と思ってます。。

最初はオンとオフのスクリプトでやってたんですが、なんか欲張っちゃいました(笑)

投票

翻訳

翻訳

レポート

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

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

コピー完了

手鞠先生のは2クリックなので、1クリック版を作ってみましたよ。

Illustratorの「コピー元のレーヤーにペースト」をモーダルウィンドウ上でON/OFFするJavaScript

 

スクリーンショット 2022-12-06 18.12.56.png

投票

翻訳

翻訳

レポート

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

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

コピー完了

ありがとうございます!

すごく分かりやすいです。

時間ある時じっくり見させてもらいます、勉強させていただきます!

投票

翻訳

翻訳

レポート

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

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

コピー完了

実は過去にまったく同じものを作ってみたことがありますw

結果、複数ドキュメントを開いてアクティブドキュメントをとっかえひっかえしていると全くだめでした。

CEPならドキュメントのアクティベートにイベントハンドラ仕込めるので確かに可能性あるかも。

 

ちなみに、プロパティのBoolean値をトグルするには、^=1 でいけますよ。

var bool = true;
bool ^= 1;
alert(bool);

 If文なしですっきり書けます。

投票

翻訳

翻訳

レポート

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

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

コピー完了

同じこと考えてる人は意外といらっしゃるんですね〜

それこそ、複数ドキュメントでやってたらめちゃくちゃでした・・。

ありがとうございます!

投票

翻訳

翻訳

レポート

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

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

コピー完了

ロジックはともかく、ScriptUIは邪魔ですね。やはり、CEPのドッキング可能なパネルの方が使い勝手は良さそうです。

投票

翻訳

翻訳

レポート

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

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

コピー完了

めちゃくちゃ苦戦しながら作成中です。。笑

投票

翻訳

翻訳

レポート

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

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

コピー完了

ドキュメントのスイッチに追随させるにはイベントを捉えるためのプラグインが必要です。

投票

翻訳

翻訳

レポート

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

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

コピー完了

トグルスイッチは出来たのですが、いろいろいじってみてもよく分かりませんでした・・・。

イベントを捉えるためのプラグイン?とやらはどこにありますでしょうか?

 

というか、CEPについて説明されてあるサイトとかってありますか?調べてみたのですがなかなか調べ切れませんでした。。

投票

翻訳

翻訳

レポート

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

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

コピー完了

自作CEPエクステンションのmain.jsに仕込んだやつ置いておきます。

いつの日か参考になれば。

new CSInterface().addEventListener( //ドキュメント出現時のイベントリスナー
    "documentAfterActivate", 
    function(event){
        csInterface.evalScript("getCSK ();", 
            function(val){
                document.getElementById("mv").value = val;
            })
    }
)

new CSInterface().addEventListener( //アプリケーションアクティブ時のイベントリスナー
    "applicationActivate", 
    function(event){
        csInterface.evalScript("getCSK ();", 
            function(val){
                document.getElementById("mv").value = val;
            })
    }
)      

 アクティブドキュメントを切り替えたとき、アプリケーションがアクティブになったとき、のイベントハンドラです。

設定をレイヤーパネルメニューから手動で切り替えたときだけはプラグインじゃないと捕まえようがないでした。

 

CEPについて説明されてあるサイト、

 Googleなどで「Adobe CEP」とか検索するとあれこれ出てきますね。

自分はこちらだいぶかなりすごく参考にさせてもらいました。

https://kawano-shuji.com/justdiary/?s=CEP

 

APIをまとめた電子書籍を販売されている方もいます。

投票

翻訳

翻訳

レポート

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

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

コピー完了

最新

ありがとうございます。

いつの日かが何十年後になることやら・・・笑

とりあえず何も分からないので自分が作りたいものを作るのはやめて、いろんな方が作ったりされてるCEPエクステンションを観察するところから始めようと思います。

情報ありがとうございました!

投票

翻訳

翻訳

レポート

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