リンクをクリップボードにコピー
コピー完了
お世話になります。
コピー元のレイヤーにペーストを確認する手間が嫌で、スイッチさせるようにしました。
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;
}
}
ちょっと重いのと、これだと現在の状態自体は確認できません。
オンとオフをスイッチさせつつ常に状態を見られるようにしたいのですが、どうしたらいいと思いますか?
こんなかんじですね
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
...
リンクをクリップボードにコピー
コピー完了
ScriptUIはIllustrator本体のプロセスを消費するのでのパレットはあんまりお奨めではありませんが、やるとしたら、チェックボックスのステートで表示させて単位時間ごとにステートをチェックさせるようなことはやめた方がが良いでしょう。
わたしがやるとしたらCEPパネルを作ってトグルスイッチ表示にします。
リンクをクリップボードにコピー
コピー完了
illustratorに負担かけてるだろうなとは思ってました(汗)
今回作ったのはやめておきます。
CEPパネルというのは知らなかったので調べてみますが、面倒くさがらずに普通にレイヤーパネルから見た方が一番いい気もします。。
貴重な意見ありがとうございました!
リンクをクリップボードにコピー
コピー完了
こんなかんじですね
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();
リンクをクリップボードにコピー
コピー完了
わざわざ試してもらってありがとうございます!
Illustrator本体のプロセスを消費するとのことでしたので、オンとオフの切り替えがかなり必要な作業の時だけ使ってみようと思います。
本当にありがとうございました!
リンクをクリップボードにコピー
コピー完了
コレぐらいならそんなに負荷はかからないんですけど、スクリプトエンジンって本体に比べると脆弱なんで別プロセスで、動くCEPにした方が安定します。
拡張機能はいくつかの手段が存在しますが、適切に使い分けるのが安定性の向上につながります。
単純にオン/オフそれぞれのスクリプトを作成してショートカットで実行するようにしても効率は良いのではないかと思います。
リンクをクリップボードにコピー
コピー完了
パレットで作ったのがいくつかあるんですけど、多分それも負荷かかってるんだろうなぁ・・・と思ってます。。
最初はオンとオフのスクリプトでやってたんですが、なんか欲張っちゃいました(笑)
リンクをクリップボードにコピー
コピー完了
リンクをクリップボードにコピー
コピー完了
ありがとうございます!
すごく分かりやすいです。
時間ある時じっくり見させてもらいます、勉強させていただきます!
リンクをクリップボードにコピー
コピー完了
実は過去にまったく同じものを作ってみたことがありますw
結果、複数ドキュメントを開いてアクティブドキュメントをとっかえひっかえしていると全くだめでした。
CEPならドキュメントのアクティベートにイベントハンドラ仕込めるので確かに可能性あるかも。
ちなみに、プロパティのBoolean値をトグルするには、^=1 でいけますよ。
var bool = true;
bool ^= 1;
alert(bool);
If文なしですっきり書けます。
リンクをクリップボードにコピー
コピー完了
同じこと考えてる人は意外といらっしゃるんですね〜
それこそ、複数ドキュメントでやってたらめちゃくちゃでした・・。
ありがとうございます!
リンクをクリップボードにコピー
コピー完了
ロジックはともかく、ScriptUIは邪魔ですね。やはり、CEPのドッキング可能なパネルの方が使い勝手は良さそうです。
リンクをクリップボードにコピー
コピー完了
めちゃくちゃ苦戦しながら作成中です。。笑
リンクをクリップボードにコピー
コピー完了
ドキュメントのスイッチに追随させるにはイベントを捉えるためのプラグインが必要です。
リンクをクリップボードにコピー
コピー完了
トグルスイッチは出来たのですが、いろいろいじってみてもよく分かりませんでした・・・。
イベントを捉えるためのプラグイン?とやらはどこにありますでしょうか?
というか、CEPについて説明されてあるサイトとかってありますか?調べてみたのですがなかなか調べ切れませんでした。。
リンクをクリップボードにコピー
コピー完了
自作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をまとめた電子書籍を販売されている方もいます。
リンクをクリップボードにコピー
コピー完了
ありがとうございます。
いつの日かが何十年後になることやら・・・笑
とりあえず何も分からないので自分が作りたいものを作るのはやめて、いろんな方が作ったりされてるCEPエクステンションを観察するところから始めようと思います。
情報ありがとうございました!