3.11.2 Accessing X-Function GetN Tree


Version Info

Minimum Origin Version Required: Origin 8 SR5

Access MDF X-Function GetN Tree(Origin80 SR0)

We may want to write Origin C codes to access X-Function GUI tree. The following function is an example to access impMDF X-Function GUI tree to check/uncheck some checkboxes and then import file.

Different X-Function the struct of trGetN will be different. So before update trGetN, you need to set a break point at InvokeBeforeExecute function, after running this function to see the struct of trGetN in Local Variables window.

#include <XFBase.h>

void AccessImpMDF()
{
	XFBase xf;
	string strXFName = "impMDF";
	xf.Load(strXFName, LTXF_USE_FAST_ACCESS);
	
	Tree tr;
	TreeNode trGetN;	
	xf.GetGUI(tr, trGetN); // get GUI tree of xfunction
	
	// set file name to GUI tree
	trGetN.fname.strVal = GetAppPath(true) + "Samples\\Import and Export\\ETAS INCA MDF\\ZZP164_CPSSW_3_MS_0_SREC_0_shot43_20060227_151554.dat";
	
	// read data selection information from import file to GUI tree, after running, trGetN.trfiles.file1.DataSelection node will not be empty.
	xf.InvokeBeforeExecute(trGetN, 0);	
	
	TreeNode trDataSelection = trGetN.trfiles.file1.DataSelection;
	if( !trDataSelection )
		return;	//err	
	
	// DataSelection treenode contains many hidden node and will disappear on GUI, this count is the number of checkbox that appear on GUI.
	int nCount = tree_count_items_by_attribute(trDataSelection, STR_SHOW_ATTRIB, "1"); //returns count ignored hidden node 
	if( nCount == 0 )
		return; //err
	
	vector vCheck(nCount);
	vCheck = 0; // set all items to 0 to uncheck	
	// the following index 0, 2, 3 are the index of checkbox on GUI, set these checkboxes to 1
	vCheck[0] = 1;
	vCheck[2] = 1;
	vCheck[3] = 1;
	
	//specify Data Selection checkboxes by vector
	int index=0;
	foreach(TreeNode trNode in trDataSelection.Children)
	{
		if( trNode.Show )//ignore hidden node
			trNode.nVal = vCheck[index++];		
	}
	
	xf.SetGUI(trGetN); // set changed GUI tree back to xf
	
 	xf.Evaluate();
}

Access NetCDF X-Function GetN Tree(Origin80 SR0)

NOTE:

  • We assume that there is a NetCDF file, madis-profiler.nc, in Origin sample folder. There are 3 dimensionality, 1D, 2D, 3D, in this file.
#include <XFBase.h>
 
void AccessImpNetCDF()
{
    XFBase xf;
    string strXFName = "impNetCDF";
    xf.Load(strXFName, LTXF_USE_FAST_ACCESS);
    
    Tree tr;
    TreeNode trGetN;    
    xf.GetGUI(tr, trGetN); // get GUI tree of xfunction
    
    // set file name to GUI tree
    trGetN.fname.strVal = GetAppPath(true) + "Samples\\Import and Export\\madis-profiler.nc";
    
    // read data selection information from import file to GUI tree, after running, trGetN.trfiles.file1.DataSelection node will not be empty.
    xf.InvokeBeforeExecute(trGetN, 0);  
    
    TreeNode trDataSelection = trGetN.trfiles.file1.DataSelection;
    if( !trDataSelection )
        return; //err   
    
    // only import following variables
    // 1D : lastRecord, invTime
    // 2D : staName, ICT
    // 3D : consensusNumBeam, radVelocity
	TreeNode trVar1D = trDataSelection.Var1D;
	if ( trVar1D )
	{
		uncheck_all_children(trVar1D);
		trVar1D.lastRecord.nVal = 1;
		trVar1D.invTime.nVal = 1;
		
    }
    TreeNode trVar2D = trDataSelection.Var2D;
    if ( trVar2D )
    {
		uncheck_all_children(trVar2D);
		trVar2D.staName.nVal = 1;
    	trVar2D.ICT.nVal = 1;
    	
    }
    TreeNode trVar3D = trDataSelection.Var3D;
    if ( trVar3D )
    {
		uncheck_all_children(trVar3D);
    	trVar3D.consensusNumBeam.nVal = 1;
    	trVar3D.radVelocity.nVal = 1;
    }
   
    xf.SetGUI(trGetN); // set changed GUI tree back to xf
    
    xf.Evaluate();
}

void uncheck_all_children(TreeNode& trBranch)
{
	foreach(TreeNode trNode in trBranch.Children)
	{
		trNode.nVal = 0;
	}
}