XYZ Gridding

Version Info

Minimum Origin Version Required: Origin 8 SR0

Need to do before Running Examples

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);

Examples

//--------------------------------------------------------------------------
// 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);
        }             
}