public static XmlDocument BpmnToXml(BpmGenome genome) { var xml = Base(); var process = xml.CreateElement("bpmn", "process", BpmnUri); process.SetAttribute("id", "Process_" + Guid.NewGuid()); process.SetAttribute("isExecutable", "false"); xml.DocumentElement.AppendChild(process); var start = StartEvent(process); var outgoing = GeneToXml(process, genome.RootGene, start); var end = EndEvent(process, outgoing); var diagram = xml.CreateElement("bpmndi", "BPMNDiagram", BpmndiUri); diagram.SetAttribute("id", "BPMNDiagram_" + Guid.NewGuid()); xml.DocumentElement.AppendChild(diagram); var plane = xml.CreateElement("bpmndi", "BPMNPlane", BpmndiUri); plane.SetAttribute("id", "BPMNPlane_" + Guid.NewGuid()); plane.SetAttribute("bpmnElement", process.GetAttribute("id")); diagram.AppendChild(plane); var layouter = new Layouter(xml.DocumentElement); layouter.auto(genome.RootGene, start, end); layouter.flows(process); foreach (var x in layouter.AllElements()) { plane.AppendChild(x); } return(xml); }