緯度、経度の線を描く

地球儀などを描く場合に、必要になるのが緯度、経度の線です。こんなのはブレンドで、どうにかなりそうだと思ってやってみてもうまくいきません。というのもブレンドでは等間隔になってしまうためです。緯度、経度の線は端にいくほど間隔が狭くなるため簡単には描けません。円を描いた後に、同じサイズで正12角形などを描いて、頂点同士を結ぶような形で楕円を描くという方法もあるようですが面倒です。
面倒な場合にはスクリプトを作っておけば、後々便利です。以下のスクリプトは選択した楕円の中に指定された間隔で緯度、経度の線を描くものです。なお、バージョンCSはSHIFT JISの文字コードで、CS2はUTF-8で保存してから実行してください。

xStep = 10;
yStep = 10;
objColor = new CMYKColor();
objColor.cyan = 100;
objColor.magenta = 0;
objColor.yellow = 0;
objColor.black = 0;
pi = Math.PI / 180;
selObj = activeDocument.selection;
for (i=0; i<selObj.length; i++)
{
x1 = selObj[i].geometricBounds[0];
y1 = selObj[i].geometricBounds[1];
x2 = selObj[i].geometricBounds[2];
y2 = selObj[i].geometricBounds[3];
R = Math.abs(x2-x1) / 2;
h = Math.abs(y2-y1);
cx = x1 + R;
cy = y1;
// 経度の線を描く
for (sita=0; sita<=90; sita+=xStep)
{
COS = Math.cos(sita * pi);
x = COS * R;
w = Math.abs(x * 2);
ovalObj = activeDocument.pathItems.ellipse(0,-x,w,h);
ovalObj.filled = false;
ovalObj.stroked = true;
ovalObj.strokeWidth = 1;
ovalObj.strokeColor = objColor;
ovalObj.translate(cx,cy);
}
// 緯度の線を描く
R = Math.abs(y2-y1) / 2;
w = Math.abs(x2-x1);
cx = x1;
cy = y1 - R;
for (sita=0; sita<=90; sita+=yStep)
{
SIN = Math.sin(sita * pi);
y = SIN * R;
h = Math.abs(y * 2);
ovalObj = activeDocument.pathItems.ellipse(y,0,w,h);
ovalObj.filled = false;
ovalObj.stroked = true;
ovalObj.strokeWidth = 1;
ovalObj.strokeColor = objColor;
ovalObj.translate(cx,cy);
}
}


線の間隔(個数)は以下の行の数字を変更します。xStepが縦の線(経度)、yStepが横の線(緯度)の数になります(90/指定した値)。

xStep = 10;
yStep = 10;

線の色は水色(シアン)になっていますが、色を変えるには以下の行の数値を変えてください。CMYKなので単位はパーセントです。

objColor.cyan = 100;
objColor.magenta = 0;
objColor.yellow = 0;
objColor.black = 0;

線の幅はovalObj.strokeWidth = 1;の値を変更すればOKです。単位はポイントです。




[サンプルをダウンロード]