public override void LoadFromXml(XmlElement elem) { Node.Text = elem.GetAttribute(NAME_PROCESS_NODE_NAME, ""); Console.Write(Node.Text); Parameters = elem.GetAttribute(PARAMETER_NODE_NAME, ""); Console.Write(Parameters); Zoom = float.Parse(elem.GetAttribute(ZOOM_PROCESS_NODE_NAME, "")); PlaceCounter = int.Parse(elem.GetAttribute(PLACE_COUNTER)); TransitionCounter = int.Parse(elem.GetAttribute(TRANSITION_COUNTER)); XmlElement placesElement = (XmlElement)elem.ChildNodes[0]; foreach (XmlElement element in placesElement.ChildNodes) { PNPlace place = new PNPlace(string.Empty, 0); place.LoadFromXml(element); this.AddSingleCanvasItem(place); this.AddSingleCanvasItem(place.labelItems); } XmlElement transitionsElement = (XmlElement)elem.ChildNodes[1]; foreach (XmlElement element in transitionsElement.ChildNodes) { PNTransition transition = new PNTransition(string.Empty); transition.LoadFromXml(element); this.AddSingleCanvasItem(transition); this.AddSingleCanvasItem(transition.labelItems); } XmlElement linksElement = (XmlElement)elem.ChildNodes[2]; foreach (XmlElement element in linksElement.ChildNodes) { PNArc arc = new PNArc(null, null); arc.LoadFromXML(element, this); this.AddSingleLink(arc); foreach (NailItem nailItem in arc.Nails) { this.AddSingleCanvasItem(nailItem); } this.AddSingleCanvasItem(arc.Label); } }
private string GetState(PNTransition transition) { StringBuilder sb = new StringBuilder(); Dictionary <PNPlace, int> ins = new Dictionary <PNPlace, int>(); Dictionary <PNPlace, int> outs = new Dictionary <PNPlace, int>(); List <PNArc> arcs = GetArcList(); foreach (var arc in arcs) { if (arc.To is PNTransition && (arc.To as PNTransition).Name.Equals(transition.Name)) { ins.Add(arc.From as PNPlace, arc.Weight); } if (arc.From is PNTransition && (arc.From as PNTransition).Name.Equals(transition.Name)) { outs.Add(arc.To as PNPlace, arc.Weight); } } List <string> guards = new List <string>(); List <string> updates = new List <string>(); foreach (KeyValuePair <PNPlace, int> kvp in ins) { guards.Add(string.Format("({0} >= {1})", kvp.Key.Name, kvp.Value)); if (!string.IsNullOrEmpty(kvp.Key.Guard)) { guards.Add(kvp.Key.Guard); } updates.Add(string.Format("{0} = ({0} - {1}); ", kvp.Key.Name, kvp.Value)); } foreach (KeyValuePair <PNPlace, int> kvp in outs) { if (kvp.Key.Capacity > 0) { guards.Add(string.Format("({0} + {1} <= {2})", kvp.Key.Name, kvp.Value, kvp.Key.Capacity)); } updates.Add(string.Format("{0} = ({0} + {1}); ", kvp.Key.Name, kvp.Value)); } if (!string.IsNullOrEmpty(transition.Guard)) { guards.Add(transition.Guard); } if (!string.IsNullOrEmpty(transition.Program)) { updates.Add(transition.Program); } ins.Clear(); outs.Clear(); string guard = string.Empty; string update = string.Empty; for (int i = 0; i < guards.Count; i++) { if (i == (guards.Count - 1)) { guard += guards[i]; continue; } guard += guards[i] + " && "; } foreach (var str in updates) { update += str; } sb.AppendFormat("\"Start\"--[{0}] ##@@ {1} @@## {{{2}}}-->\"End\"", guard, transition.Name, update); return(sb.ToString()); }