/// <summary> /// Updates the variable names in the data tree /// </summary> private void UpdateVariableNames() { // Check if it is a datatree with multiple branches that have one item bool check = true; for (int i = 0; i < _tree.Branches.Count; i++) { if (_tree.Branches[i].Count != 1) { check = false; break; } } if (_tree.Branches.Count == 1) { if (_tree.Branches[0].Count == 1) { // Do nothing: there is only one item in the whole datatree } else { // Only rename the items in this single branche with + "_0", "_1" etc... for (int i = 0; i < _tree.Branches[0].Count; i++) { _tree.Branches[0][i].Value.Name = _tree.Branches[0][i].Value.Name + "_" + i.ToString(); } } } else if (check == true) { // Multiple branches with only one item per branch for (int i = 0; i < _tree.Branches.Count; i++) { _tree.Branches[i][0].Value.Name = _tree.Branches[i][0].Value.Name + "_" + i.ToString(); } } else { // Rename everything. There are multiple branches with branches that have multiple items. List <GH_Path> originalPaths = new List <GH_Path>(); for (int i = 0; i < _tree.Paths.Count; i++) { originalPaths.Add(_tree.Paths[i]); } _tree.Simplify(GH_SimplificationMode.CollapseLeadingOverlaps); List <GH_Path> simplifiedPaths = new List <GH_Path>(); for (int i = 0; i < _tree.Paths.Count; i++) { simplifiedPaths.Add(_tree.Paths[i]); } for (int i = 0; i < _tree.Branches.Count; i++) { _tree.ReplacePath(simplifiedPaths[i], originalPaths[i]); } for (int i = 0; i < _tree.Branches.Count; i++) { GH_Path iPath = simplifiedPaths[i]; string pathString = iPath.ToString(); pathString = pathString.Replace("{", "").Replace(";", "_").Replace("}", ""); for (int j = 0; j < _tree.Branches[i].Count; j++) { _tree.Branches[i][j].Value.Name = _tree.Branches[i][j].Value.Name + "_" + pathString + "_" + j; } } } }