Minimum Origin Version Required: Origin 7.5
This example to show how to add contour plotting and then use the following two functions to custom Z levels and fill colors. Please refer to DataPlot::SetColormap for more information.
void plot_contour() { MatrixPage mp; mp.Create("origin"); MatrixLayer ml = mp.Layers(0); Matrix mat(ml); mat.SetSize(10, 10); for(int ii=0; ii<mat.GetNumRows();ii++) for(int jj=0; jj<mat.GetNumCols();jj++) mat[ii][jj] = sin(ii+jj); MatrixObject mobj = ml.MatrixObjects(); GraphPage gp; gp.Create("contour", CREATE_HIDDEN); // use template, create as hidden to avoid unneeded drawing GraphLayer glay = gp.Layers(); int nPlot = glay.AddPlot(mobj, IDM_PLOT_CONTOUR); glay.Rescale(); DataPlot dp = glay.DataPlots(nPlot); if(dp) { set_contour_colormap(dp); } gp.SetShow(); } void set_contour_colormap(DataPlot& dp) { vector vLevels; BOOL bLogScale; if( !dp.GetColormap(vLevels, bLogScale) ) return; // shrink or extend z levels int nLevels = vLevels.GetSize(); if( nLevels >= 5) nLevels -= 2; else nLevels += 2; double min = vLevels[0], max = vLevels[nLevels-1]; double step = (max - min)/(nLevels-1); vLevels.Data(min, max, step); // set z levels if( !dp.SetColormap(vLevels) ) return; vector<uint> vColors(nLevels-1); // the size of vColors must be nLevels-1 for(int ii = 0; ii < vColors.GetSize(); ii++) { int gg = 255* ii / (nLevels-1); int bb = 255 * (nLevels-ii-1)/(nLevels-1); int nRGB = RGB(0, gg, bb); vColors[ii] = RGB2OCOLOR(nRGB); } // call DataPlot::SetColormap(const vector<double>& vz, BOOL bLogScale=FALSE) to set z levels if( !dp.SetColormap(vLevels) ) { printf("Fail to set z levels\n"); return; } // call DataPlot::SetColormap(TreeNode& trColormap) to set colormap Tree tr; tr.ColorMap.Details.Colors.nVals = vColors; if(!dp.SetColormap(tr)) { printf("Fail to set colormap\n"); return; } }