行列シートは、次数を共有した複数の行列オブジェクトを持つことができます。行列オブジェクトはワークシートと同じように認識することができ、追加や削除ができます。以下のセクションは行列オブジェクトの基本的な操作について、実践的な例題を通して紹介します。
MatrixLayer::SetSizeを使用すると行列シート内に複数の行列オブジェクトをセットして行列オブジェクトを追加する事ができます。
// アクティブ行列シートに5つの行列オブジェクトをセット MatrixLayer ml = Project.ActiveLayer(); ml.SetSize(5);
MatrixLayer::Insert メソッドは、現在の行列オブジェクトの前に、指定された行列オブジェクトの番号を挿入します。
// 行列オブジェクトをシートに追加 MatrixLayer ml = Project.ActiveLayer(); // アクティブ行列シートを取得 int nNum = 1; // 追加された行列オブジェクトの番号 int nPos = -1; // -1, 最後に追加 int nDataType = -1; // 任意, -1 はデフォルトでdouble 型 int index = ml.Insert(nNum, nPos, nDataType); // 最初のものもインデックスを返す
行列シートの中にある行列オブジェクトをアクティブにするにはMatrixLayer::SetActiveを使用します。
MatrixLayer ml = Project.ActiveLayer(); ml.SetActive(2); // 第3行列オブジェクトをアクティブ化(インデックスは0ベース)
行列オブジェクトにアクセスするには、MatrixLayerからのMatrixObjectsのコレクションを使用します。
// 名前で1つの行列オブジェクトに付加 MatrixPage matPage("MBook3"); // 行列ページからシート名 MSheet1 を付加 // インデックスで行列ページからのシート取得もサポート MatrixLayer ml1 = matPage.Layers("MSheet1"); // インデックスによりシートから行列オブジェクトを取得 MatrixObject mo = ml1.MatrixObjects(0); // 行列オブジェクトのデータ型は、行列ウィンドウ内で一致している必要がある if( FSI_SHORT == mo.GetInternalDataType() ) { matrix<short>& mat = mo.GetDataObject(); }
行列シートから、指定した数の行列オブジェクトを削除するには、MatrixLayer::Delete メソッドを使用します。
// シートから行列オブジェクトを削除 MatrixLayer ml = Project.ActiveLayer(); // アクティブな行列シートを取得 // はじめから2つの行列オブジェクトを削除 int nPos = 0; int nNum = 2; ml.Delete(nPos, nNum);
MatrixLayer::SetViewImage メソッドは、インデックスで指定した行列の、イメージモードとデータモードを切り替えるオプションを提供しています。
// イメージモードにセット MatrixLayer ml = Project.ActiveLayer(); // アクティブ行列シートを取得 int nImgIndex = 0; MatrixObject mo = ml.MatrixObjects(nImgIndex); if( !mo.IsImageView() ) { BOOL bAllObjs = FALSE; ml.SetViewImage(TRUE, bAllObjs, nImgIndex); // データモードはFALSE }
各行列オブジェクトで、ロングネーム、コメント、単位をセットできます。Zラベルの設定については、行列シートの基本操作の章の、Zラベルの取得と設定をご覧ください。
行列オブジェクトの内部データ型には、double, real, short, long, char, text, mixed, byte, ushort, ulong, complex型などがあります。Origin C は、MatrixObjectクラス内にGetInternalDataType と SetInternalDataType メソッドを提供し、行列オブジェクトの内部データタイプの取得と設定に使われます。
// データ型の取得と設定 MatrixLayer ml = Project.ActiveLayer(); // アクティブ行列シートを取得 MatrixObject mo = ml.MatrixObjects(0); if( mo.GetInternalDataType() != FSI_BYTE ) // データ型を取得 { // OCD_RESTORE はデータをバックアップし // 型を変更した後元に戻す DWORD dwFlags = OCD_RESTORE; mo.SetInternalDataType(FSI_BYTE, dwFlags); // データ型をセット }
MatrixObject::GetFormat と MatrixObject::SetFormat は、行列オブジェクトのデータフォーマットを取得し、設定することができます。
// データフォーマットを取得して設定 MatrixLayer ml = Project.ActiveLayer(); // アクティブ行列シートを取得 MatrixObject mo = ml.MatrixObjects(0); int nFormat = mo.GetFormat(); // OKCOLTYPE_NUMERIC( = 0) のみサポートされる mo.SetFormat(OKCOLTYPE_NUMERIC);