/// <summary> /// Builds the node visualisation. /// </summary> /// <param name="point">The point.</param> /// <param name="graphVisualizer">The graph visualizer.</param> private static void buildNodeVisualisation(ProgramPointBase point, IGraphVisualizer graphVisualizer) { string id = "pp" + point.ProgramPointID.ToString(); string label = string.Format("{0}\n{1}", point.GetType().Name.ToString(), point.ToString()); graphVisualizer.AddNode(id, label); }
/// <summary> /// Builds the edges visualisation. /// </summary> /// <param name="point">The point.</param> /// <param name="graphVisualizer">The graph visualizer.</param> /// <param name="skipProgramPoints">The skip program points.</param> private static void buildEdgesVisualisation(ProgramPointBase point, IGraphVisualizer graphVisualizer, Type[] skipProgramPoints) { HashSet <int> processed = new HashSet <int>(); LinkedList <ProgramPointBase> edgeQueue = new LinkedList <ProgramPointBase>(); foreach (var targetPoint in point.FlowChildren) { edgeQueue.AddLast(targetPoint); processed.Add(targetPoint.ProgramPointID); } string id = "pp" + point.ProgramPointID.ToString(); while (edgeQueue.Count > 0) { ProgramPointBase targetPoint = edgeQueue.First.Value; edgeQueue.RemoveFirst(); bool targetSkipped = isTypeOf(targetPoint.GetType(), skipProgramPoints); if (!targetSkipped) { string outId = "pp" + targetPoint.ProgramPointID; graphVisualizer.AddEdge(id, outId, ""); } else { foreach (var p in targetPoint.FlowChildren) { if (!processed.Contains(p.ProgramPointID)) { edgeQueue.AddLast(p); processed.Add(p.ProgramPointID); } } } } }