Get XY Coordinate of Min/Max Z From Matrix

 

Version Info

Minimum Origin Version Required: Origin8 SR0

Get XY Coordinate of Minimum/Maximum Z From Matrix

This example will show how to get the XY coordinate of the minimum/maximum Z value from a matrix.

void get_xy_coordinate_min_max_z()
{
        // get the matrix object
        MatrixLayer ml = Project.ActiveLayer();
        if(!ml)
        {
                out_str("Please activate a matrix.");
                return;
        }
        MatrixObject mo = ml.MatrixObjects(0);
        if(!mo)
        {
                out_str("Please make sure that there is a valid matrix object");
                return;
        }
        
        // get number of column and row
        int nCols = mo.GetNumCols();
        int nRows = mo.GetNumRows();
        
        // get matrix data and find the indices of min/max
        Matrix& mat = mo.GetDataObject();
        uint iStart = 0;  // start data index
        uint iEnd = nCols*nRows-1;  // end data index
        uint iMinIndex, iMaxIndex;

    // get indices of min/max z
        ocmath_d_minmax(mat, iStart, iEnd, &iMinIndex, &iMaxIndex);  

        // convert the indices to column/row indices
        int iMaxRow = iMaxIndex/nCols;
        int iMaxCol = iMaxIndex%nCols;
        int iMinRow = iMinIndex/nCols;
        int iMinCol = iMinIndex%nCols;
        
        // get min and max z value
        double dMin = mat[iMinRow][iMinCol];
        double dMax = mat[iMaxRow][iMaxCol];
        
        // get the xy coordinate for min/max z value
        double dXMin = mat.GetXValue(iMinCol);
        double dYMin = mat.GetYValue(iMinRow);
        double dXMax = mat.GetXValue(iMaxCol);
        double dYMax = mat.GetYValue(iMaxRow);
        
        // print the result
        printf("The minimum Z = %f\nThe maximum Z = %f\n", dMin, dMax);
        printf("The XY coordinate of minimum Z is (%f, %f)\n", dXMin, dYMin);
        printf("The XY coordinate of maximum Z is (%f, %f)\n", dXMax, dYMax);
}