タイトルの意味がわからない子はおじいちゃんかおばあちゃんに訊いてみよう。
最近じゃニルヴァーナのカバーもするぜ。
とくにコレで何か作ってみましたーではないけど書き留めておきます。
年末進行が落ち着きしだい、アレとかコレとかに組み込むと気持ちよいです。
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上でスペースシャトルを設計するでもなし、へっちゃらです。自分だけは。