CSVデータ値に対応したメッシュを描く (Illustrator CS2)

天気予報で雲の動きなどをメッシュにして表示してくれますが、今回のスクリプトはそのようなメッシュを描くものです。メッシュ情報の元となるのはCSV形式のデータになります。例えば以下のようなデータです。

0,10,20,30,40
22,15,6,9,32
16,22,18,2,0
15,19,25,30,25
40,35,45,5,15
25,19,25,35,22
7,11,9,5,15
35,25,35,40,9

これらの数値の範囲に応じて四角形と色を使って表現します。データの横の個数や縦の個数は自動判別されるため特に指定する必要はありません。
スクリプトの使い方ですが、あらかじめCSV形式のデータを用意しておいてから実行してください。CSVファイルを選択するように尋ねてくるので、用意したCSVファイルを指定します。


rectW = 10; // メッシュの横幅
rectH = 10; // メッシュの縦幅
startX = x = 0; // 開始X座標
y = 400; // 開始Y座標
docObj = app.activeDocument;
filename = File.openDialog("CSVファイルを指定してください");
if (filename)
{
fileObj = new File(filename);
flag = fileObj.open("r");
if (flag == true)
{
while (!fileObj.eof)
{
pointData = fileObj.readln();
data = pointData.split(",");
for (i=0; i<data.length; i++)
{
drawRect(x, y, data[i]);
x = x + rectW;
}
x = startX;
y = y - rectH;
}
fileObj.close();
}else{
alert("CSVファイルが開けませんでした");
}
}

function setColor(r,g,b)
{
var tmpColor = new RGBColor();
tmpColor.red = r;
tmpColor.green = g;
tmpColor.blue = b;
return tmpColor;
}

function drawRect(x, y, value)
{
var drawColor = setColor(0,0,0);
if (value < 10) drawColor = setColor(0,0,128); // 暗い青
if ((value >= 10) && (value <20)) drawColor = setColor(128,0,0); // 暗い赤
if ((value >= 20) && (value <30)) drawColor = setColor(0,128,0); // 暗い緑
if ((value >= 30) && (value <40)) drawColor = setColor(0,0,255); // 明るい青
if (value >= 40) drawColor = setColor(255,255,192); // 明るい黄色
var pObj = docObj.pathItems.rectangle(0,0,rectW,rectH);
pObj.filled = true; // 塗りあり
pObj.stroked = true; // 線あり
pObj.strokeWidth = 1; // 線幅1ポイント
pObj.fillColor = drawColor; // 塗りの色を指定
pObj.strokeColor = setColor(0,0,0); // 線の色を指定
pObj.translate(x,y); // 指定座標に移動
}


メッシュの色ですが、以下の部分で指定しています。

if (value < 10) drawColor = setColor(0,0,128); // 暗い青
if ((value >= 10) && (value <20)) drawColor = setColor(128,0,0); // 暗い赤
if ((value >= 20) && (value <30)) drawColor = setColor(0,128,0); // 暗い緑
if ((value >= 30) && (value <40)) drawColor = setColor(0,0,255); // 明るい青
if (value >= 40) drawColor = setColor(255,255,192); // 明るい黄色

setColor()のカッコ内の値が「赤の輝度,緑の輝度,青の輝度」の順番になっています。value >=の後の数値を変更すると、どの範囲だったらこの色にするか、という指定ができます。色の指定範囲が多い場合にはif ((〜〜〜))の行をコピーして増やしてください。


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