Create a valid DataRange object.
int Create( LPCSTR lpcszRangeStr = NULL, int nXVtype = XVT_DATARANGE, BOOL bCreateTargets = false )
BOOL Create( TreeNode & tr, BOOL bOneData = TRUE )
zero if successful, otherwise erroe code.
TRUE if successful, otherwise FALSE.
EX1
//Assume there is an active worksheet with two columns(Col(A) and Col(B)). //This example will create two new columns and use them to construct a datarange. //Then fill the two columns with some data and draw a scatter graph. void DataRange_Create_Ex1() { Worksheet wks = Project.ActiveLayer(); DataRange dr; //Creat Col(C) and Col(D) and use the two columns to construct a datarange. dr.Create("Col(C)", XVT_DATARANGE, true);//true mean create two new columns. dr.Create("Col(D)", XVT_XYDATARANGE, true); wks.GetPage().Refresh(); //Refresh to show the new added columns. Column colC; colC.Attach(wks, 2); colC.SetFormula("5*(i-1)"); colC.ExecuteFormula(); //Fill values in ColC with formula:5*(i-1) Column colD; colD.Attach(wks, 3); // set Recalculate = Auto colD.SetFormula("sin(4*Col(C)*pi/180)", AU_AUTO); colD.ExecuteFormula();//Fill values in ColD with formula:sin(4*Col(C)*pi/180 GraphPage gp; gp.Create("Origin", CREATE_HIDDEN);//Create a hidden blank graph page. if( gp ) { GraphLayer gl = gp.Layers(); if( gl ) { gl.AddPlot(dr, IDM_PLOT_SCATTER);//Add a plot to the graph page with ColC and ColD. gl.Rescale(); gp.SetShow(); } } }
EX2
//This example need active one or multiple selected xy subranges. Will //print out the minimum and maximum X and Y values of active worksheet. void DataRange_Create_Ex2(BOOL bOneData = FALSE)//TRUE means only one range is added to tree. FALSE means add multiple ranges. { Worksheet wks = Project.ActiveLayer(); if( wks ) { Tree trXYSelection; DWORD dwRules = DRR_GET_DEPENDENT | DRR_NO_FACTORS; init_input_data_branch_from_selection(trXYSelection, dwRules); out_tree(trXYSelection); DataRange dr,drSub; string strRange; dr.Create(); dr.SetTree(trXYSelection, bOneData); DWORD dwPlotID; // This is to retrieve DataPlot UID if present vector vX, vY; double xmin, xmax, ymin, ymax; int nNumDatasets = dr.GetNumData(dwRules); for( int nIndex = 0; nIndex < nNumDatasets; nIndex++ ) { // Copy data associated with nIndex of dr into vectors using DataRange::GetData dr.GetData(dwRules, nIndex, &dwPlotID, NULL, &vY, &vX); // Now we have made a copy of XY data into vectors vX and vY // so we can do analysis on the data...for example: vX.GetMinMax(xmin, xmax); vY.GetMinMax(ymin, ymax); dr.GetSubRange(drSub, dwRules, nIndex); strRange = drSub.GetDescription(); printf("%s\nxmin = %g\nxmax = %g\nymin = %g\nymax = %g\n", strRange, xmin, xmax, ymin, ymax); } } }
EX3
//This example need active a graph with selected plot. Will prints out the minimum and //maximum X and Y values in the selected subranges of the active graph. void DataRange_Create_Ex3() { GraphLayer graph = Project.ActiveLayer(); if(graph) { Tree trXYSelection; DWORD dwRules = DRR_GET_DEPENDENT | DRR_NO_FACTORS; init_input_data_branch_from_selection(trXYSelection, dwRules); out_tree(trXYSelection); DataRange dr, drSub; dr.Create(trXYSelection, false);//false mean add multiple ranges to the tree. DWORD dwPlotID; // This is to retrieve DataPlot UID if present vector vX, vY; double xmin, xmax, ymin, ymax; string strRange; int nNumDatasets = dr.GetNumData(dwRules); for( int nIndex = 0; nIndex < nNumDatasets; nIndex++ ) { // Copy data associated with nIndex of dr into vectors using DataRange::GetData dr.GetData( dwRules, nIndex, &dwPlotID, NULL, &vY, &vX); // Now we have made a copy of XY data into vectors vX and vY // so we can do analysis on the data...for example: vX.GetMinMax(xmin, xmax); vY.GetMinMax(ymin, ymax); dr.GetSubRange(drSub, dwRules, nIndex); strRange = drSub.GetDescription(); printf("%s\nxmin = %g\nxmax = %g\nymin = %g\nymax = %g\n", strRange, xmin, xmax, ymin, ymax); } } }
EX4
//This example need to active a worksheet with xy columns data. //Will create a graph according to the data is in the active worksheet. void DataRange_Create_Ex4(string strX = "A", string strY = "B") { Tree tr; Worksheet wks = Project.ActiveLayer(); // Construct DataRange tree construct_one_data_range(tr, wks, strX, strY, NULL, NULL, true); out_tree(tr); DataRange dr; dr.Create(tr, true); // Default, only one range // Plot DataRange GraphPage gp; gp.Create("Origin", CREATE_HIDDEN); if( gp ) { GraphLayer gl = gp.Layers(); if( gl ) { gl.AddPlot(dr, IDM_PLOT_SCATTER); gl.Rescale(); gp.SetShow(); } } }
origin.h