A matrix sheet can have multiple matrix objects, which share the same dimensions. A matrix object is analogous to a worksheet column and can be added or deleted, etc. The following sections provide some practical examples on the basic operations of matrix object.
It allows to set the number of matrix objects in the matrix sheet by using MatrixLayer::SetSize, so to add matrix objects.
// Set 5 matrix objects in the active matrix sheet MatrixLayer ml = Project.ActiveLayer(); ml.SetSize(5);
The method MatrixLayer::Insert will insert a specified number of matrix objects before the current matrix object.
// add matrix object to sheet MatrixLayer ml = Project.ActiveLayer(); // Get active matrix sheet int nNum = 1; // the number of added matrix objects int nPos = -1; // -1, add as the end int nDataType = -1; // Optional, -1 as default for double type. int index = ml.Insert(nNum, nPos, nDataType); // Returns the index of the first one
To activate a matrix object in the matrix sheet, the MatrixLayer::SetActive is available.
MatrixLayer ml = Project.ActiveLayer(); ml.SetActive(2); // Set 3rd (index is 0-based) matrix object active
To access a matrix object, you can use the collection of MatrixObjects from MatrixLayer.
// Attach to one matrix page by name MatrixPage matPage("MBook3"); // Attach to the sheet named MSheet1 from matrix page // Also support get sheet from matrix page by index MatrixLayer ml1 = matPage.Layers("MSheet1"); // Get a matrix object from sheet by index MatrixObject mo = ml1.MatrixObjects(0); // The data type of matrix object must keep consistent with the matrix window if( FSI_SHORT == mo.GetInternalDataType() ) { matrix<short>& mat = mo.GetDataObject(); }
To delete a specified number of matrix objects from a matrix sheet, you can use the MatrixLayer::Delete method.
// delete matrix object from sheet MatrixLayer ml = Project.ActiveLayer(); // Get active matrix sheet // Delete two matrix objects from the beginning int nPos = 0; int nNum = 2; ml.Delete(nPos, nNum);
The MatrixLayer::SetViewImage method has provided the option for switching between image mode and data mode of the specified matrix object (by index).
// set image view MatrixLayer ml = Project.ActiveLayer(); // Get active matrix sheet int nImgIndex = 0; MatrixObject mo = ml.MatrixObjects(nImgIndex); if( !mo.IsImageView() ) { BOOL bAllObjs = FALSE; ml.SetViewImage(TRUE, bAllObjs, nImgIndex); // FALSE for data view }
For each matrix object, you can set Long Name, Comments, and Units. And it actually is to get and set the Z labels, please refer to the Get and Set Z Labels on Base Matrix Sheet Operation chapter.
Matrix object's internal data types include double, real, short, long, char, text, mixed, byte, ushort, ulong, and complex, etc. And Origin C provides the GetInternalDataType and SetInternalDataType methods in MatrixObject class to get and set matrix object internal data type respectively.
// get and set data type MatrixLayer ml = Project.ActiveLayer(); // Get active matrix sheet MatrixObject mo = ml.MatrixObjects(0); if( mo.GetInternalDataType() != FSI_BYTE ) // Get data type { // OCD_RESTORE to backup the data and // attempt to restore it after changing type DWORD dwFlags = OCD_RESTORE; mo.SetInternalDataType(FSI_BYTE, dwFlags); // Set data type }
The MatrixObject::GetFormat and MatrixObject::SetFormat are provided for getting and setting the data format of a matrix object respectively.
// get and set data format MatrixLayer ml = Project.ActiveLayer(); // Get active matrix sheet MatrixObject mo = ml.MatrixObjects(0); int nFormat = mo.GetFormat(); // Only OKCOLTYPE_NUMERIC( = 0) supported mo.SetFormat(OKCOLTYPE_NUMERIC);