Ejemplo n.º 1
0
 private void PaintGraph(EdgePaintMode mode)
 {
     uxCanvas.Children.Clear();
     PaintNodes();
     PaintEdges(mode);
     UpdateTooltips();
 }
Ejemplo n.º 2
0
        private void PaintEdges(EdgePaintMode mode)
        {
            // If connectedness is reduced, just show all the edges and highlight the tree ones
            if (Interconnectedness < 1.0)
            {
                mode = EdgePaintMode.Full;
            }

            IEnumerable <Edge> edges;

            switch (mode)
            {
            case EdgePaintMode.None: edges = new List <Edge>(); break;

            case EdgePaintMode.Full: edges = _graph.Edges.Where(x => x.To.Index > x.From.Index); break;

            case EdgePaintMode.Tree: edges = _graph.TreeEdges; break;

            default:
                throw new Exception();
            }

            foreach (Edge edge in edges)
            {
                Point from = (Point)edge.From.Data;
                Point to   = (Point)edge.To.Data;

                if (edge.Weight > 2 * RADIUS)
                {
                    from = NudgeByRadius((Point)edge.From.Data, (Point)edge.To.Data, RADIUS);
                    to   = NudgeByRadius((Point)edge.To.Data, (Point)edge.From.Data, RADIUS);
                }

                bool isTreeEdge = (edge == edge.From.EdgeToParent || edge.BackEdge == edge.To.EdgeToParent);

                Line line = new Line()
                {
                    Stroke          = isTreeEdge ? Brushes.Red : Brushes.LightGray,
                    StrokeThickness = isTreeEdge ? 4.0 : 1.0,
                    X1  = from.X,
                    Y1  = from.Y,
                    X2  = to.X,
                    Y2  = to.Y,
                    Tag = edge,
                };
                uxCanvas.Children.Add(line);
            }
        }