Minimum Origin Version Required: Origin 8 SR0
Prior to running the following example, the gridding_utils.c file need to be loaded and compiled. This can be done from script with the following command:
run.LoadOC(Originlab\gridding_utils.c, 16);
//-------------------------------------------------------------------------- // File Name: XYZ Gridding.c // // Description: // This example demonstrates how to convert different type XYZ data to matrix. // // Instructions: // 1. Add Nag_utils.c to Code Builder Workspace and compile with this file. // 2. New a worksheet and import \\Matrix Conversion and Gridding\XYZ Random Gaussian.dat, // then run xyz_gridding in command window, will convert random xyz data to matrix. // 3. New a worksheet and import \\Matrix Conversion and Gridding\XYZ Regular.dat, // then run xyz_gridding in command window, will convert regular xyz data to matrix. // 4. New a worksheet and import \\Matrix Conversion and Gridding\Sparse.dat, // then run xyz_gridding in command window, will convert sparse xyz data to matrix. // //-------------------------------------------------------------------------- // For more Origin C examples visit the Origin C Wiki online at: // http://wikis/ocwiki/index.php?title=Category:Examples //-------------------------------------------------------------------------- #include <Origin.h> #include <wks2mat.h> #include <Nag_utils.h> void xyz_gridding(int nRows = 10, int nCols = 10) { Worksheet wks = Project.ActiveLayer(); if( !wks ) { out_str("No active worksheet"); return; } Column colX(wks, 0); Column colY(wks, 1); Column colZ(wks, 2); if( !colX || !colY || !colZ ) { out_str("No XYZ column"); return; } XYZRange rng; rng.Add(wks, 0, "X"); rng.Add(wks, 1, "Y"); rng.Add(wks, 2, "Z"); vector vX, vY, vZ; rng.GetData(vZ, vY, vX); // examine data type UINT nVar; double xmin, xstep, xmax, ymin, ystep, ymax; int nSize = vX.GetSize(); int nMethod = ocmath_xyz_examine_data(nSize, vX, vY, vZ, 1.0e-8, 1.0e-8, &nVar, &xmin, &xstep, &xmax, &ymin, &ystep, &ymax); if( 0 == nMethod || 1 == nMethod ) //regular or Sparse { if( !is_equal(ystep, 0) ) nRows = abs(ymax - ymin)/ystep + 1.5; if( !is_equal(xstep, 0) ) nCols = abs(xmax - xmin)/xstep + 1.5; } // prepare matrix window MatrixPage mp; mp.Create("origin"); MatrixLayer ml = mp.Layers(0); MatrixObject mo(ml, 0); mo.SetXY(xmin, ymin, xmax, ymax); Matrix mat(ml, 0); mat.SetSize(nRows, nCols); // do xyz gridding int iRet; switch(nMethod) { case 0: // Regular. printf("--- %d: regular conversion ---\n", iRet); iRet = ocmath_convert_regular_xyz_to_matrix(nSize, vX, vY, vZ, mat, xmin, xstep, nCols, ymin, ystep, nRows); break; case 1: // Sparse. printf("--- %d: sparse conversion ---\n", iRet); iRet = ocmath_convert_sparse_xyz_to_matrix(nSize, vX, vY, vZ, mat, xmin, xstep, nCols, ymin, ystep, nRows); break; case 2: // Random(Renka Cline). printf("--- %d: random conversion ---\n", iRet); vector vxGrid(nRows*nCols), vyGrid(nRows*nCols); iRet = ocmath_mat_to_regular_xyz(NULL, nRows, nCols, xmin, xmax, ymin, ymax, vxGrid, vyGrid); if( iRet >= 0 ) { iRet = xyz_gridding_nag(vX, vY, vZ, vxGrid, vyGrid, mat); } break; default: // Error. printf("--- Error: %d returned ---\n", iRet); } }