GrassHopperを使ったバッチ処理の紹介

REALAPS-Omniの明るさ評価処理はC#のDLLとしても提供されていますので、GrasshopperやVisual Studio C#のプログラムから呼び出して利用することができます。

以下は、RhinocerosのGrassHopperを使ってフォルダに置かれた複数のOXYZファイルを順次読み込んで、輝度画像と明るさ画像を作成し保存していくプログラムのサンプル例です。ghサンプルはダウンロードページからダウンロードすることができます。

C#コンポーネントの中のプログラムは以下です。

private void RunScript(string folderName)
{
Omni omni = new Omni();
string[] filenames = Directory.GetFiles(folderName, "*.oxyz");

for(int i = 0; i < filenames.Length; i++)
{
string oxyzFilename = filenames[i];

double[,] nb = null;
EstimatingBR ebr = new EstimatingBR(new EstimatingBR.Area());
enmResult result = omni.getEstimationValuesFromOXYZ(oxyzFilename, ref nb, ref ebr);

string NBPngFilePath = Path.GetDirectoryName(oxyzFilename)
+ "\\" + Path.GetFileNameWithoutExtension(oxyzFilename) + "_NB.png";
omni.savePictureNB(NBPngFilePath, nb, false, 0, 13);
Print(NBPngFilePath + "->" + result);

double[,] luminance = null;
result = omni.getIlluminanceFromOXYZ(oxyzFilename, Math.PI, ref luminance);

string LMPngFilePath = Path.GetDirectoryName(oxyzFilename)
+ "\\" + Path.GetFileNameWithoutExtension(oxyzFilename) + "_LM.png";
result = omni.savePictureLuminance(LMPngFilePath, double2float(luminance), false, 1, 10000);
Print(LMPngFilePath + "->" + result);
}
}

private float[,] double2float(double[,] val)
{
int width = val.GetLength(1);
int height = val.GetLength(0);
float[,] fval = new float[height, width];

for(int y = 0;y < height;y++)
{
for(int x = 0;x < width;x++)
{
fval[y, x] = (float) val[y, x];
}
}
return fval;
}

 C#のプログラムですので、Visual Studio C#でも動作します。