private void groupWithChildren(ERDFormatterNode node) { for (int i = 0; i < node.ChildrenIndeces.Count; i++) { if (node.GroupNum >= 0) { if (Nodes[node.ChildrenIndeces[i]].GroupNum >= 0) { mergeGroups(node.GroupNum, Nodes[node.ChildrenIndeces[i]].GroupNum); } else { Nodes[node.ChildrenIndeces[i]].GroupNum = node.GroupNum; _groups[node.GroupNum].Add(node.ChildrenIndeces[i]); } } else { if (Nodes[node.ChildrenIndeces[i]].GroupNum >= 0) { node.GroupNum = Nodes[node.ChildrenIndeces[i]].GroupNum; _groups[node.GroupNum].Add(node.Index); } else { node.GroupNum = _groups.Count; Nodes[node.ChildrenIndeces[i]].GroupNum = _groups.Count; _groups.Add(new List <int>()); _groups[node.GroupNum].Add(node.Index); _groups[node.GroupNum].Add(node.ChildrenIndeces[i]); _numGroups++; } } } }
private void insertReturnsToNode(ERDFormatterNode node) { string startDir; string endDir; int i; for (i = 0; i < node.ChildrenIndeces.Count; i++) { if (!Nodes[node.ChildrenIndeces[i]].TestExclusiveAdjacency()) { startDir = getNormalRelativeDirection(node.ChildrenIndeces[i], node.Index); endDir = getNormalRelativeDirection(node.Index, node.ChildrenIndeces[i]); insertReturn((int)node.Node.ID, (int)Nodes[node.ChildrenIndeces[i]].Node.ID, startDir, endDir); } } for (i = 0; i < node.ExclusivelyAdjacentChildren.Count; i++) { if ((i & 0x1) == 0) //Exclusively adjacent children are staggered left and right { startDir = SDON.Model.Directions.Left; endDir = SDON.Model.Directions.Right; } else { startDir = SDON.Model.Directions.Right; endDir = SDON.Model.Directions.Left; } insertReturn((int)node.Node.ID, (int)Nodes[node.ExclusivelyAdjacentChildren[i]].Node.ID, startDir, endDir); } }