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

今回でこの連載は終わりです。ちょっと仕事が忙しくなってきたので端折ります。

//数値および引き出し線
if (vals[i] < 3) {
    var ln = grp.graphicLines.add();
    ln.paths[0].entirePath = pp3;
    ln.rotationAngle = (ref + vals[i] / 2) * -3.6;
    ln.strokeColor = doc.swatches[3];
    var txf = grp.textFrames.add();
    //txf.appliedObjectStyle = "";
    txf.contents = vals[i] + "%";
    if (ln.paths[0].pathPoints[2].anchor[0] > x){
        ln.paths[0].pathPoints[2].anchor =
            [x + r + s, ln.paths[0].pathPoints[1].anchor[1]];
        txf.geometricBounds =
            [ln.paths[0].pathPoints[1].anchor[1]-1, x+r+s,
            ln.paths[0].pathPoints[1].anchor[1]+1, x+r+s+tw];
    } else {
        ln.paths[0].pathPoints[2].anchor =
            [x-r-s, ln.paths[0].pathPoints[1].anchor[1]];
        txf.geometricBounds =
            [ln.paths[0].pathPoints[1].anchor[1]-1, x-r-s-tw,
            ln.paths[0].pathPoints[1].anchor[1]+1, x-r-s];
   }

数値を表示するテキストフレームを作ります。まず、数値が3未満の場合。3はサンプル用なので、実際は数値の文字がグラフの扇形からはみ出す場合ということです。この場合引き出し線を作成して、テキストフレームをグラフの外に作成します。

引き出し線はアンカーポイントが3つある折れ線です。3番目の座標を変更してます。

if (ln.paths[0].pathPoints[2].anchor[0] > x){

は、グラフの数値が大きい順に並んでいるのであればいらないはずです。小さい数値はたいがいグラフの真ん中より左側に来るはずですから。

} else {
    var txf = grp.textFrames.add();
    //txf.appliedObjectStyle = "";
    txf.contents = vals[i] + "%";
    txf.geometricBounds =
        [y-r*0.8, x-tw/2, y-r*0.8+th, x+tw/2];
    txf.rotationAngle = (ref + vals[i] / 2) * -3.6;
    app.activeWindow.transformReferencePoint = AnchorPoint.CENTER_ANCHOR;
    txf.rotationAngle = 0;
    app.activeWindow.transformReferencePoint = [x, y];
}

ここは扇形の中にテキストフレームを置いています。

txf.rotationAngle = (ref + vals[i] / 2) * -3.6;

これは今までと同じくページの左端中央を中心に回転させています。

ただ、これでは文字も回転していますのでテキストフレーム自身の回転を戻してやります。それが

app.activeWindow.transformReferencePoint = AnchorPoint.CENTER_ANCHOR;
txf.rotationAngle = 0;

ですね。回転の中心をオブジェクトの中心に移動して、回転角を0にする。これで文字の回転が取れました。この後は次の扇形に備えて再び回転の中心をグラフの中心に戻しているわけです。