2.2.4.9.5 DataRange::CreateCreate
Description
Create a valid DataRange object.
Syntax
int Create( LPCSTR lpcszRangeStr = NULL, int nXVtype = XVT_DATARANGE, BOOL bCreateTargets = false )
BOOL Create( TreeNode & tr, BOOL bOneData = TRUE )
Parameters
- lpcszRangeStr
- [input]the range string, like "[Book1]Sheet1!Col(A)"
- nXVtype
- [input]X variable type defined in oc_sys.h
- bCreateTargets
- [input]TRUE means new target is created. FALSE remains origin.
- tr
- [input]the tree containing the range data
- bOneData
- [input]TRUE means only one range is added to tree. False means add multiple ranges.
Return
zero if successful, otherwise erroe code.
TRUE if successful, otherwise FALSE.
Examples
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();
}
}
}
Remark
See Also
DataRange::Destroy
Header to Include
origin.h
|