仮想行列

ワークシートウィンドウから仮想行列を構築することができます。仮想行列のXYZデータに対するワークシートのデータ範囲を別々に取得します。XおよびYデータを指定しない場合、デフォルトデータが自動的に使われます。次のコードはアクティブワークシートウィンドウから仮想行列を構築し、この仮想行列をグラフにプロットする方法を示しています。

// 実行前に、アクティブワークシートにデータがあることを確認
// 例えば、新しいワークシートに、Originのインストールフォルダの
// Samples\Matrix Conversion and Gridding にあるXYZ Random Gaussian.dat をインポート
Worksheet wks = Project.ActiveLayer();

int r1, r2;
int c1 = 0, c2 = 2;
wks.GetBounds(r1, c1, r2, c2);

// Zデータのみデータ範囲を構築すると
// X、Yデータは自動的に割り当て
DataRange dr;
dr.Add("Z", wks, r1, c1, r2, c2);

MatrixObject mo;
mo.Attach(dr);

int nRows = mo.GetNumRows();
int nCols = mo.GetNumCols();

// デフォルトのx, y 範囲を取得
double xmin, xmax, ymin, ymax;
mo.GetXY(xmin, ymin, xmax, ymax);

GraphPage gp;
gp.Create("CONTOUR");
GraphLayer gl = gp.Layers(0);

gl.AddPlot(mo, IDM_PLOT_CONTOUR);
gl.Rescale();

mo.Detach();

XYデータを割り当てたい場合、データは単調増加あるいは、減少するものである必要があります。次のサンプルは、XYZデータ範囲から仮想行列を構築する方法を示しています。

// アクティブレイヤには5列のデータがあるとする
Worksheet wks = Project.ActiveLayer();

// 列0から4に対する最小と最大の行インデックスを取得
int r1, r2, c1 = 0, c2 = 4;
wks.GetBounds(r1, c1, r2, c2);

// XYZデータを持つデータ範囲オブジェクトを作成
DataRange dr;
dr.Add("X", wks, 0, 1, 0, c2); // 最初のセルを除く最初の行
dr.Add("Y", wks, 1, 0, r2, 0); // 最初のセルを除く最初の列
dr.Add("Z", wks, 1, 1, r2, c2);

MatrixObject mo;
mo.Attach(dr);