public void GetCompairColumnNames(ICommonNode node) { if (node.Text == "BinaryComparasionPredicate") { _compairPointer = true; } if (node.Text == "FullColumnName") { _columnNamePointer = true; } if (node.Type == "Leaf" && _columnNamePointer && _compairPointer) { _compairColumnNames.Add(node.Text); _columnNamePointer = false; _compairPointer = false; } var enumerator = node.Children.GetEnumerator(); int i = 0; while (enumerator.MoveNext()) { var currentNode = enumerator.Current; GetCompairColumnNames(currentNode); ++i; } return; }
public void VisitTree(ICommonNode node) { var enumerator = node.Children.GetEnumerator(); int i = 0; while (enumerator.MoveNext()) { var currentNode = enumerator.Current; _nodePaths.Add(currentNode.BranchText); ++i; } return; }
public List <ICommonNode> GetTerminalNodes(ICommonNode node) { if (node.Type == "Leaf") { _terminalNodes.Add(node); } var enumerator = node.Children.GetEnumerator(); int i = 0; while (enumerator.MoveNext()) { var currentNode = enumerator.Current; GetTerminalNodes(currentNode); ++i; } return(_terminalNodes); }
public List <string> GetTablesName(ICommonNode node) { if (node.Text.Contains("TableName")) { _tablesPointer = true; } if (node.Count == 0 && _tablesPointer) { _tablesNames.Add(node.Text); _tablesPointer = false; } var enumerator = node.Children.GetEnumerator(); int i = 0; while (enumerator.MoveNext()) { var currentNode = enumerator.Current; GetTablesName(currentNode); ++i; } return(_tablesNames); }
public TreeVisitor(ICommonNode node) { CommonNode = node; }
private Image Draw(ICommonNode node, out int center) { var nodeText = node.Text; var nodeSize = TextMeasurer.MeasureString("*" + nodeText + "*", NodeTextFont); nodeSize.Width = Math.Max(MinimumNodeSize.Width, nodeSize.Width); nodeSize.Height = Math.Max(MinimumNodeSize.Height, nodeSize.Height); var childCentres = new int[node.Count]; var childImages = new Image[node.Count]; var childSizes = new Size[node.Count]; var enumerator = node.Children.GetEnumerator(); int i = 0; while (enumerator.MoveNext()) { var currentNode = enumerator.Current; var lCenter = 0; childImages[i] = Draw(currentNode, out lCenter); childCentres[i] = lCenter; if (childImages[i] != null) { childSizes[i] = childImages[i] != null ? childImages[i].Size : new Size(); } ++i; } // draw current node and it's children var under = childImages.Any(nodeImg => nodeImg != null);// if true the current node has childs var maxHeight = node.Count > 0 ? childSizes.Max(c => c.Height) : 0; var totalFreeWidth = node.Count > 0 ? NodeGapping.Width * (node.Count - 1) : NodeGapping.Width; var totalChildWidth = childSizes.Sum(s => s.Width); var nodeImage = CreateNodeImage(nodeSize.ToSize(), nodeText, NodeTextFont); var totalSize = new Size { Width = Math.Max(nodeImage.Size.Width, totalChildWidth) + totalFreeWidth, Height = nodeImage.Size.Height + (under ? maxHeight + NodeGapping.Height : 0) }; var result = new Bitmap(totalSize.Width, totalSize.Height); var g = Graphics.FromImage(result); g.SmoothingMode = SmoothingMode.HighQuality; g.FillRectangle(Brushes.White, new Rectangle(new Point(0, 0), totalSize)); var left = (totalSize.Width - nodeImage.Width) / 2; g.DrawImage(nodeImage, left, 0); center = Math.Max(totalSize.Width / 2, (nodeImage.Width + NodeGapping.Width) / 2); var fromLeft = 0; for (int j = 0; j < node.Count; ++j) { float x1 = center; float y1 = nodeImage.Height; float y2 = nodeImage.Height + NodeGapping.Height; float x2 = fromLeft + childCentres[j]; var h = y2 - y1; var w = x1 - x2; var childImg = childImages[j]; if (childImg != null) { g.DrawImage(childImg, fromLeft, nodeImage.Size.Height + NodeGapping.Height); fromLeft += childImg.Width + NodeGapping.Width; // Prepare next child left starting point var points1 = new List <PointF> { new PointF(x1, y1), new PointF(x1 - w / 6, y1 + h / 3.5f), new PointF(x2 + w / 6, y2 - h / 3.5f), new PointF(x2, y2), }; g.DrawCurve(ConnectionPen, points1.ToArray(), 0.5f); } childImages[j].Dispose(); // Release child image as it aleady drawn on parent node's surface } g.Dispose(); return(result); }