private void SortChildNodes(VisualizationNode visualizationNode, RelationType relationType) { visualizationNode.SetRelations(visualizationNode.GetRelations(relationType, true, true).OrderBy(p => { return(p.VNode.GetSortingKey(relationType)); }).ToList(), relationType); }
public void CreateNodeHierarchyRec(HashSet <string> addedVisualizationNodes, Stack <VisualizationNode> visualizationNodeStack, VisualizationNode visualizationNode, Connection connection, int depth, RelationType relationType, NodeDisplayOptions nodeDisplayOptions, ref int iterations) { // prevent the tree from becoming too big if (iterations >= 0xFFFF) { return; } iterations++; visualizationNode.Key = NodeDependencyLookupUtility.GetNodeKey(connection.Node.Id, connection.Node.Type); bool containedNode = addedVisualizationNodes.Contains(visualizationNode.Key); if (depth == nodeDisplayOptions.MaxDepth || (containedNode && nodeDisplayOptions.ShowHierarchyOnce)) { return; } if (!nodeDisplayOptions.ConnectionTypesToDisplay.Contains(connection.Type) && connection.Type != "Root") { return; } addedVisualizationNodes.Add(visualizationNode.Key); visualizationNodeStack.Push(visualizationNode); List <MergedNode> mergedNodes = GetMergedNodes(connection.Node.GetRelations(relationType)); foreach (MergedNode mergedNode in mergedNodes) { Node childNode = mergedNode.Target.Node; string childNodeKey = NodeDependencyLookupUtility.GetNodeKey(childNode.Id, childNode.Type); if (addedVisualizationNodes.Contains(childNodeKey) && _nodeDisplayOptions.ShowNodesOnce) { continue; } VisualizationNode recursionNode = HasRecursion(childNodeKey, visualizationNodeStack); bool isRecursion = recursionNode != null; VisualizationNode visualizationChildNode = isRecursion ? recursionNode : GetVisualizationNode(childNode.Id, childNode.Type); visualizationChildNode.IsFiltered = IsNodeFiltered(childNode.Id, childNode.Type); if (!isRecursion) { CreateNodeHierarchyRec(addedVisualizationNodes, visualizationNodeStack, visualizationChildNode, mergedNode.Target, depth + 1, relationType, nodeDisplayOptions, ref iterations); } if (!nodeDisplayOptions.HideFilteredNodes || HasNoneFilteredChildren(visualizationChildNode, relationType)) { visualizationChildNode.HasNoneFilteredChildren = true; AddBidirConnection(relationType, visualizationNode, visualizationChildNode, mergedNode.Datas, isRecursion); } } SortChildNodes(visualizationNode, relationType); visualizationNodeStack.Pop(); }
private bool HasNoneFilteredChildren(VisualizationNode node, RelationType relationType) { foreach (VisualizationConnection connection in node.GetRelations(relationType)) { if (connection.VNode.HasNoneFilteredChildren || !connection.VNode.IsFiltered) { return(true); } } return(!node.IsFiltered); }
public void UpdateAreaSize(VisualizationNode node, Rect _windowData) { EnclosedBounds oldArea = new EnclosedBounds(); Bounds.CopyTo(oldArea); EnclosedBounds bounds = node.TreeBounds; int edge = 1000; Bounds.Set(bounds.MinX - edge, bounds.MinY - edge, bounds.MaxX + edge, bounds.MaxY + edge); Bounds.Enclose(new EnclosedBounds(-(int)_windowData.width / 2, -(int)_windowData.height / 2, (int)_windowData.width / 2, (int)_windowData.height / 2)); if (!oldArea.IsInvalid) { ScrollPosition.x += (Bounds.Width - oldArea.Width) / 2; ScrollPosition.y += (Bounds.Height - oldArea.Height) / 2; } }
private void BuildNodeStructure(Node node) { Connection rootConnection = new Connection(node, "Root", new PathSegment[0]); _nodeStructure = GetVisualizationNode(rootConnection.Node.Id, rootConnection.Node.Type); int iterations = 0; CreateNodeHierarchyRec(new HashSet <string>(), new Stack <VisualizationNode>(), _nodeStructure, rootConnection, 0, RelationType.DEPENDENCY, _nodeDisplayOptions, ref iterations); if (_nodeDisplayOptions.DrawReferencerNodes) { iterations = 0; CreateNodeHierarchyRec(new HashSet <string>(), new Stack <VisualizationNode>(), _nodeStructure, rootConnection, 0, RelationType.REFERENCER, _nodeDisplayOptions, ref iterations); } _nodeStructureDirty = false; }