private void PaintGraph(EdgePaintMode mode) { uxCanvas.Children.Clear(); PaintNodes(); PaintEdges(mode); UpdateTooltips(); }
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); } }