public void Write(ActivityArrowGraph graph) { using (var streamWriter = new StreamWriter(outputFilename)) { ArrowDiagramGraphmlXmlDocumentBuilder graphmlXmlDocumentBuilder = new ArrowDiagramGraphmlXmlDocumentBuilder(); foreach (var vertex in graph.Vertices) { switch (vertex.Type) { case EventVertexType.Normal: graphmlXmlDocumentBuilder.AddNode(vertex.Id, GraphmlNodeType.Normal); break; case EventVertexType.Milestone: graphmlXmlDocumentBuilder.AddNode(vertex.Id, GraphmlNodeType.Milestone, vertex.MilestoneActivity.Id.ToString()); break; case EventVertexType.GraphStart: graphmlXmlDocumentBuilder.AddNode(vertex.Id, GraphmlNodeType.GraphStart); break; case EventVertexType.GraphEnd: graphmlXmlDocumentBuilder.AddNode(vertex.Id, GraphmlNodeType.GraphEnd); break; default: break; } } foreach (var edge in graph.Edges) { if (edge.Activity != null) { var edgeType = GraphmlEdgeType.Activity; if (edge.IsCritical) { edgeType = GraphmlEdgeType.CriticalActivity; } graphmlXmlDocumentBuilder.AddEdge(edge.Id, edge.Source.Id, edge.Target.Id, edgeType, edge.Activity.Id.ToString()); } else { var edgeType = GraphmlEdgeType.Dummy; if (edge.IsCritical) { edgeType = GraphmlEdgeType.CriticalDummy; } graphmlXmlDocumentBuilder.AddEdge(edge.Id, edge.Source.Id, edge.Target.Id, edgeType); } } xmlSerializer.Serialize(streamWriter, graphmlXmlDocumentBuilder.Build()); streamWriter.Close(); } }
private ActivityArrowGraph CreateResultActivityArrowGraph() { var activityArrowGraph = new ActivityArrowGraph(); foreach (var edge in arrowGraph.Edges) { var sourceVertex = CreateVertexEvent(edge.Source, arrowGraph.InDegree(edge.Source), arrowGraph.OutDegree(edge.Source)); var targetVertex = CreateVertexEvent(edge.Target, arrowGraph.InDegree(edge.Target), arrowGraph.OutDegree(edge.Target)); Activity edgeActivity; TryGetActivity(edge, out edgeActivity); activityArrowGraph.AddEdge(CreateActivityEdge(sourceVertex, targetVertex, edgeActivity, edge.IsCritical)); } return activityArrowGraph; }
public void Write(ActivityArrowGraph graph) { StringBuilder sb = new StringBuilder(); sb.Append("digraph G {\n"); foreach (var vertex in graph.Vertices) { if (vertex.Type == EventVertexType.GraphEnd || vertex.Type == EventVertexType.GraphStart) { sb.AppendFormat("{0} [ label=\"\" style=filled fillcolor=black ];\n", vertex.Id); } else { sb.AppendFormat("{0} [ label=\"\" ];\n", vertex.Id); } } foreach (var edge in graph.Edges) { var penWidth = "1"; if (edge.IsCritical) { penWidth = "3"; } if (edge.Activity != null) { sb.AppendFormat("{0} -> {1} [ id={2} label={2} penwidth=\"{3}\" ];\n", edge.Source.Id, edge.Target.Id, edge.Activity.Id, penWidth); } else { sb.AppendFormat("{0} -> {1} [ style=dashed penwidth=\"{2}\" ];\n", edge.Source.Id, edge.Target.Id, penWidth); } } sb.Append("}"); using (var fwriter = File.Create(filename)) { Byte[] info = new UTF8Encoding(true).GetBytes(sb.ToString()); fwriter.Write(info, 0, info.Length); } }