いちいちアクティブにしないscriptUIパレット

やれIFAだのPOTだの、一部の下っ端どもにそこそこ好評を頂いておりますが

懸念は、気軽にパシッと操作する為にいちいちパレットをクリックしてアクティブにしてからじゃないと操作できない所にありました。
ファミコン買ってもらった日から半年ぐらいは遊び終わったらいちいち化粧箱に戻してました。姉に触られると癪だったので。だだこねたのは俺だぞ。お前は脇でウンザリ眺めてただけじゃねえか。

閑話休題

scriptUIの手軽さの反面、SDKプラグイン系に大きく遅れを取る厄介な問題であります。ありました。

着火ボタンの代わりにListBoxを置く事で解決しました。
今後、公開済みの大物スクリプトに順次組み込んでゆく予定です。年末進行おさまってからになりますが。。

以下、シンプルなテスト。

#target indesign
#targetengine “session”
dlg=”palette{ text : ‘test_activate’, L : ListBox{}}”;
win=new Window(dlg);
win.L.add(“item”, “ignore”);
win.L.onChange = function(){
if(win.L.selection != null){
win.L.selection = null;
alert(“ハッセルホフ!”);
app.activeDocument=doc;
}
}
doc=app.activeDocument;
res=win.show();
InDesignCS3以上で、ドキュメントを開いた状態でお試しくださいまし。

実行するとこんなのが出ます

リストボックスに、ぽつんとリストアイテム。
このリストアイテム「ignore」を選択すると反応します。パレットが非アクティブ状態でも反応します。
反応した後はアラートを出し、リストアイテムを非選択状態に戻し、アクティブドキュメントに戻します。
これで、上述したようなわずわらし、わずらし、わらわざ、
えー、イヤな感じから解放されます。

課題は、スクロールアロー等のぶんの余分スペースをどう削ぐか。
まあ、なんとかします。


Facebooktwitter

InDesign:アンカーだけに史上最大の手抜き作戦

タイトルの意味がわからない子はおじいちゃんかおばあちゃんに訊いてみよう。
 最近じゃニルヴァーナのカバーもするぜ。

とくにコレで何か作ってみましたーではないけど書き留めておきます。

年末進行が落ち着きしだい、アレとかコレとかに組み込むと気持ちよいです。

transform() はアンカー座標の指定を常にポイントで行う必要がある。
義務でこそないものの、狙った場所でちゃんと動作させるには必要である。

 しかしながら用事のあるドキュメントは得てして他の単位系に設定させている事が多い。シセロだのパイカだのハナゲだの。うそだけど。
多様な「ポイント以外の」単位に対応したスクリプトを書くとなると、一時的にドキュメントのルーラー設定を変えて、用事を済ませたあとササッと戻す、ような事をしてきたわけで。しかしスクリプトの内容が静かな物だった場合(オブジェクトの選択状態の操作だけとか、アンカーポイントの操作だけとか)、ムダにヒストリーが汚れて気持ちよくない。よくなかった。思い直した。考えた。

 多様な、とはいっても片手で数えられるほどの種類しか(二進数で)ないんだから、単位設定に応じた単位を数値のケツにくっつけて文字列を返す関数を用意しておけば済む。距離・座標に関わる入力値は単位つき文字列で受け付けてくれる。でもそれって新しくない。いや、新しくなくても別に構わない。でもつまんない。いや、つまんなくても別に(略

 というわけで、ヒストリーを汚さないで単位ごとの補正倍数を取得してみる。

function revScale(){

awObj=app.activeWindow;
dapObj=awObj.transformReferencePoint; //現状のアンカーポイントを記録。9種のAnchorPoint または座標の Array(x, y)
awObj.transformReferencePoint=[“1pt”,”1pt”]; //アンカー座標を任意位置へ指定
pepsi=awObj.transformReferencePoint; 
awObj.transformReferencePoint=dapObj; //アンカーポイントをもどす
return pepsi; //シュワ〜ッと返す
}

aa=app.activeDocument.selection[0];
tt=app.transformationMatrices.add(1.01,1.01,0,0,0,0);  //1.01倍する変形のじゅんび
cc=app.activeWindow.transformReferencePoint; 
if(cc.length==2){ //アンカーポイントが配列(任意座標)なら
dd=[[cc[0]/revScale()[0], cc[1]/revScale()[1]],[0,0]]; //戻り値は割って使う
} else{ dd=cc; }
aa.transform (2021222766, dd, tt, undefined, undefined); //変形の実行
transform() はとっくに何人かいじくってくれてますが、ドキュメントの単位設定をそのまま活かしてあれこれしてみせてよこした人というのはまだ見かけた事がなくて(頑張って探したわけでもないんですが)英語のマニュアルを棒読みしてココか?と踏んだ箇所をどれだけ突っついても変化が見られなかったので(頑張って突っついたわけでもないんですが)正攻法がおぼつくまではコレでしのぐとします。
関数内で既に小数第14位あたりで丸められちゃってる気もするけど、別段 InDesign上でスペースシャトルを設計するでもなし、へっちゃらです。自分だけは。

Facebooktwitter

InDesign:アンカーだけに我が道系

タイトルの意味がわからない人はお父さんかお母さんにきいてみよう。



CS3から実装された「フレーム調整オプション」は、
フレームを調整するオプションです。

 違います。

フレームの内容を調整するオプションです。

指定したアンカーポイントを基準に子が配置されます。わざとらしく使うととても便利です。




しかし、子がヒネクレていた場合、または親がヒネクレていた場合、
 「そりゃ確かにそうなんだろうけど」的な挙動となります。イヤミたっぷりに正論をのたまわれた時と同じ気持ちになる。




なので、角度がついてようが関係なく角と角をピッタンコする物を作ってみたです。



対応ver.: InDesignCS以降
CS、CS3(MacOSX 10.4.11)で動作確認済み。CSで使用する時は拡張子を.JSにしてください。
..狙ってなかったとはいえ、久々にCS対応の物を書いた気がするなあ。




(日)白矢印でリンクを選択して、
(月)整列基準となるアンカーポイントを指定して、
(火)実行。ばんざーい。


〈備考〉
今回は、指定したアンカーポイントを軸にオブジェクトを180°回転した時の座標の変化量からアンカーポイントの座標を割り出しています。これにより、元から回転がかかっていてももヘンテコな形でも的確にアンカーの数値を拾えるわけですが、指定のアンカーポイントがアートボード外にいた場合キッパリとエラー終了します。なんとも微妙ですけど。

で、いつどんな時に使うかって話ですけど。
 知 る か よ ! !

や、自分的には確固とした使いどきがあるんですけど、あまりにもミジメな気分の時がほとんどなので。

Facebooktwitter

InDesign:親に従うのはよいことです

リンク画像を変形させる時、フレーム上で基準にしたいカドがあるのにリンク画像の絵柄的には全然カドじゃないのでむざむざ手動でアンカーポイントを設定する事ってけっこうありませんか。あるんですよ。



Mac-CS3で確認。「シェイプを変換」できないバージョンは非対応とします。
※圧縮の関係で本来のファイル名からアポストロフィを削除してあります。各自で解凍後に追加しといて下さい。




枕だけではたぶんすごくわかりにくいと思うのでちゃんと説明します。
 クチで言っても判らねぇ奴にゃ、ケツで言うぜ(すごい)


…えー、左に見えるスバラシイ絵画を、右のフレーム内へ配置します。
黄色い額ブチで収めたくて、外ガワのグレー部分はいらない、とします。



フツウにフレーム内に配置したところ



ここでセンタリングしちゃう派もいますが、黄色の額ブチが画像のセンターにいない事も多いので
 とりゃえず左上だけ合わせます。



マウス押しっぱなしで画像のマスク外を確認したところ(意味ないけどなんとなく)



ドキュメントのアンカーポイントを確認。いま左上です。



スクリプト実行。
リンクを選択したまま、親フレームの左上カドにアンカーポイントが。やったー



あとはそのまま、みちみち縮小して任意のサイズに。



べつに回転がかかってても長方形じゃなくてもギターが下手でもまったく問題なくできます。



〈備考〉
○以下の条件下でのみ動作します。
・アクティブなドキュメント上で単一のリンクオブジェクトが選択された状態
・コントロールパネルまたは変形パネル上でアンカーポイントが点灯した状態

○親フレームのカドの2つの座標値を足して2で割ってアンカーポイントに利用します。
ドキュメント上の任意のアンカーポイントの指定はポイント単位にのみ対応している都合上、ドキュメントの定規の単位がポイント以外であった場合は一時的にポイントに設定し、必要な数字を拾い次第すぐ「取り消し」にて戻します。従ってスクリプト実行後は編集メニューに「単位設定をやり直し」が現れます。スクリプト実行前にいくつかの作業を「取り消し」していた場合、スクリプト実行後はその「取り消し」をする前には戻せません。

○親フレームのシェイプが長方形以外である場合、一時的に長方形に変換し、必要な数字を拾い次第

Facebooktwitter