Пример #1
0
        private static void FillGraphConnectorNodes(TreeGraphLabelNode originalGraphNode, TreeGraphLabelNode resutLabelNode, TraverseTreeGraphContext context)
        {
            if (originalGraphNode.Children.Count > 0)
            {
                int startX = originalGraphNode.Children[0].X;
                int endX   = originalGraphNode.Children[originalGraphNode.Children.Count - 1].X;

                for (int i = startX; i <= endX; i++)
                {
                    TreeGraphConnectorNode connector = null;

                    TreeGraphNodeBase child = originalGraphNode.Children.Find(c => c.X == i);

                    if (child != null)
                    {
                        if (originalGraphNode.Children.Count == 1)
                        {
                            connector = new TreeGraphConnectorNode(TreeGraphNodeType.VLine, i, originalGraphNode.Y + 1);
                        }
                        else
                        {
                            if (child == originalGraphNode.Children[0])
                            {
                                connector = new TreeGraphConnectorNode(TreeGraphNodeType.LeftCorner, i, originalGraphNode.Y + 1);
                            }
                            else
                            if (child == originalGraphNode.Children[originalGraphNode.Children.Count - 1])
                            {
                                connector = new TreeGraphConnectorNode(TreeGraphNodeType.RightCorner, i, originalGraphNode.Y + 1);
                            }
                            else
                            if (child.X == originalGraphNode.X)
                            {
                                connector = new TreeGraphConnectorNode(TreeGraphNodeType.Cross, i, originalGraphNode.Y + 1);
                            }
                            else
                            {
                                connector = new TreeGraphConnectorNode(TreeGraphNodeType.Tee, i, originalGraphNode.Y + 1);
                            }
                        }
                    }
                    else
                    {
                        if (i == originalGraphNode.X)
                        {
                            connector = new TreeGraphConnectorNode(TreeGraphNodeType.ReverseTee, i, originalGraphNode.Y + 1);
                        }
                        else
                        {
                            connector = new TreeGraphConnectorNode(TreeGraphNodeType.HLine, i, originalGraphNode.Y + 1);
                        }
                    }

                    context.Width  = Math.Max(context.Width, connector.X + 1);
                    context.Height = Math.Max(context.Height, connector.Y + 1);

                    resutLabelNode.Children.Add(connector);
                }
            }
        }
Пример #2
0
        private static TreeGraphLabelNode GenerateGraphNodeWithConnectors(TreeGraphNodeBase parentGraphNode, TreeGraphLabelNode originalGraphNode, TraverseTreeGraphContext context)
        {
            TreeGraphLabelNode resutLabelNode = new TreeGraphLabelNode()
            {
                Name = originalGraphNode.Name, Description = originalGraphNode.Description, X = originalGraphNode.X, Y = originalGraphNode.Y
            };

            context.Width  = Math.Max(context.Width, resutLabelNode.X + 1);
            context.Height = Math.Max(context.Height, resutLabelNode.Y + 1);

            if (parentGraphNode != null)
            {
                parentGraphNode.Children.Add(resutLabelNode);
            }

            FillGraphConnectorNodes(originalGraphNode, resutLabelNode, context);

            foreach (TreeGraphNodeBase childConnectorNode in resutLabelNode.Children)
            {
                TreeGraphLabelNode matchedLabelNode = (TreeGraphLabelNode)originalGraphNode.Children.Find(n => n.X == childConnectorNode.X);

                if (matchedLabelNode != null)
                {
                    GenerateGraphNodeWithConnectors(childConnectorNode, matchedLabelNode, context);
                }
            }

            return(resutLabelNode);
        }