2.2.4.9.5 DataRange::Create

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