コード例 #1
0
ファイル: PNCanvas.cs プロジェクト: KWSN-PAT/KWSN
        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);
            }
        }
コード例 #2
0
ファイル: PNCanvas.cs プロジェクト: KWSN-PAT/KWSN
        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());
        }