ocmath_xy_remove_duplicates
Description
This function remove duplicated points and replace duplicated points by nMethod, where 0 means replace with mean, 1=median, 2=min, 3=max, 4=sum
Syntax
int ocmath_xy_remove_duplicates(double * px, double * py, UINT nSize, int nMethod = Replace_With_Mean, double dPrecision = 1.0e-8, bool bSort = TRUE, double * duppx = NULL, double * pCounts = NULL, int * pnSizeDuppx = NULL )
Parameters
- px
- [modify] on input, it contains X coordinate's datas; on output, contains X coordinate's datas removed duplicates
- py
- [modify] on input, it contains Y coordinate's datas; on output, contains Y coordinate's datas removed duplicates
- nSize
- [input] size of px, py
- nMethod
- [input] replace duplicates methods, where 0 means replace with mean, 1=median, 2=min, 3=max, 4=sum
- dPrecision
- [input] precision to determine whether two points are duplicated or not
- bSort
- [input] if TRUE, will sort px, then reorder py by px's index.
- duppx
- [output] An array to hold the duplicate x values. Before calling, need alloc enough memory for it.
- pCounts
- [output] An array to hold the number of each duplicate x values. Before calling, need alloc enough memory for it.
- pnSizeDuppx
- [output] the count of dupplicate
Return
Return number of points in px, py after removed duplicates if succeed, otherwise, negative error code is returned.
Examples
EX1
//Before running, make sure the active layer is a graph with dataplot containing curve's X/Y data
void ocmath_xy_remove_duplicates_ex1()
{
GraphLayer gl = Project.ActiveLayer();
if (!gl)
{
return;
}
DataPlot dp = gl.DataPlots(0);
DataRange dr;
vector vxData, vyData;
if(dp.GetDataRange(dr))
{
DWORD dwPlotID;
if(dr.GetData(DRR_GET_DEPENDENT | DRR_NO_FACTORS, 0, &dwPlotID, NULL, &vyData, &vxData) < 0)
{
printf("get_plot_data failed GetData");
return;
}
}
uint nDataSize = vxData.GetSize();
int nMethod = Replace_With_Mean;
double dPrecision = 1.0e-8;
int nRet;
nDataSize = ocmath_xy_remove_duplicates(vxData, vyData, nDataSize, nMethod, dPrecision);
if( nDataSize < OE_NOERROR )
{
printf("error code: %d\n", nRet);
return;
}
vxData.SetSize(nDataSize);
vyData.SetSize(nDataSize);
WorksheetPage wksPage;
wksPage.Create();
Worksheet wksResult = wksPage.Layers(0);
//wksResult.AddCol("Indices");
int nXCol, nYCol;
nXCol = wksResult.AddCol("X");
nYCol = wksResult.AddCol("Y");
//wksResult.Columns(0).SetType(OKDATAOBJ_DESIGNATION_X);
wksResult.Columns(nXCol).SetType(OKDATAOBJ_DESIGNATION_X);
wksResult.Columns(nYCol).SetType(OKDATAOBJ_DESIGNATION_Y);
DataRange drOut;
drOut.Add("X", wksResult, 0, nXCol, -1, nXCol);
drOut.Add("Y", wksResult, 0, nYCol, -1, nYCol);
drOut.SetData(&vyData, &vxData);
gl.AddPlot(drOut, IDM_PLOT_SCATTER, GAP_ALLOW_DUPLICATE_COL | GAP_USE_TEMPLATE);
}
Remark
See Also
ocmath_xyz_remove_duplicates
header to Include
origin.h
Reference
|