InDesignで円グラフを作成する(2)

title = "グラフタイトル";
vals = [30, 25, 20, 15, 5, 3, 1, 1]; //パーセンテージ

外部から読み込む変数です。あとから全体を関数化するときの引数になります。あと凡例に使う項目名も必要なんだけれど、まだそこまでいってない。

var r = 30; //半径
var s = 2; //グラフ周囲のアキ
var tw = 6; //数値の枠の幅
var th = 2; //数値の枠の高さ

各種設定値。汎用性を持たせるなら別ファイル(設定ファイル)にしておいて読み込むものです。

//円グラフの中心位置
//CS5で回転をトラブルなく行うには座標をページの左端中央にする
var x = 0;
var y = (app.activeWindow.activePage.bounds[2] -
    app.activeWindow.activePage.bounds[0]) / 2;
app.activeWindow.transformReferencePoint = [x, y];

あとから図形を回転させるので、その回転の中心を設定するのが、transformReferencePointです。このプロパティは定数AnchorPoint(左上などのオブジェクトの端点または中心)もしくは座標値を設定できるはずですが、CS5のバグなのか、座標を指定してもいうことを聞いてくれない。

本当は

 transformReferencePoint = ["100mm", "120mm"];

てな具合に指定したいのだけども、なぜか別の場所を中心に回転してしまう。となれば、その別の場所を特定するしかないので、調査の結果、ページの左端中央だったというわけ。

仕方がないので、とりあえずそこに作成して、あとから移動しましょう。

var d = 0.552284746666667; //Directionの定数(半径を1)

ベジエ曲線で作る円の、半径に対するハンドルの長さ。これを求めるにはInDesign上で円を作成し、選択したうえで次のスクリプトをESTK上で走らせると教えてくれます。

var sel = app.selection;
var pps = sel[0].paths[0].pathPoints;
for (i=0;i<pps.length;i++){
    $.writeln(i+" leftD.x:" + pps[i].leftDirection[0]);
    $.writeln(i+" leftD.y:" + pps[i].leftDirection[1]);
    $.writeln(i+" x:" + pps[i].anchor[0]);
    $.writeln(i+" y:" + pps[i].anchor[1]);
    $.writeln(i+" righD.x:" + pps[i].rightDirection[0]);
    $.writeln(i+" righD.y:" + pps[i].rightDirection[1]);
}