예제 #1
0
 public AbstractEdge(string name, long unid, bool showAnnotation, int weight, Position position, Transition transition, PointF curveMiddlePoint, EdgeType edgeType)
     : base(name, unid, showAnnotation)
 {
     this.weight = weight;
     this.position = position;
     this.transition = transition;
     this.curveMiddlePointOffset = curveMiddlePoint;
     this.edgeType = edgeType;
 }
예제 #2
0
 public static AbstractNetworkItem openFromXml(XmlNode node)
 {
     PointF origo = new PointF(0, 0);
     PointF labelOffset = new PointF(0, 0);
     List<AbstractToken> tokens = null;
     List<PetriEvent> events = null;
     XmlNodeList list = node.ChildNodes;
     foreach (XmlNode childNode in list)
     {
         string namespaceUri = childNode.NamespaceURI;
         string localName = childNode.LocalName;
         switch (namespaceUri)
         {
             case PetriXmlHelper.XML_POINTF_NAMESPACE:
                 if ("Origo".Equals(localName))
                 {
                     origo = PetriXmlHelper.openPointF(childNode);
                 }
                 else if ("LabelOffset".Equals(localName))
                 {
                     labelOffset = PetriXmlHelper.openPointF(childNode);
                 }
                 break;
             case PetriXmlHelper.XML_POSITION_NAMESPACE:
                 switch (localName)
                 {
                     case "Tokens":
                         tokens = Position.openTokensFromXml(childNode.ChildNodes);
                         break;
                 }
                 break;
             case PetriXmlHelper.XML_ITEM_NAMESPACE:
                 switch (localName)
                 {
                     case "Events":
                         events = PetriEvent.openEvents(childNode.ChildNodes, "ItemEvent");
                         break;
                 }
                 break;
         }
     }
     string name = AbstractItem.openNameAttrFromNode(node);
     long unid = AbstractItem.openUnidAttrFromNode(node);
     bool showAnnotation = AbstractItem.openShowAnnotationAttrFromNode(node);
     float radius = AbstractNetworkItem.openRadiusAttrFromNode(node);
     int capacityLimit = AbstractPosition.openCapacityLimitAttrFromNode(node);
     Position ret = new Position(name, unid, showAnnotation, origo, radius, capacityLimit);
     ret.PetriEvents.addEvent(events);
     ret.LabelOffset = labelOffset;
     ret.tokens.AddRange(tokens);
     return ret;
 }
예제 #3
0
 public EdgeTransitionPosition(string name, long unid, bool showAnnotation, int weight, Transition transition, Position position, PointF curveMiddlePoint, EdgeType edgeType)
     : base(name, unid, showAnnotation, weight, position, transition, curveMiddlePoint, edgeType)
 {
 }
예제 #4
0
 protected void addEdgeTransitionPosition(int weight, Transition transition, Position position, PointF curveMiddlePoint)
 {
     this.addEdge(new EdgeTransitionPosition("", this.unidGenNumber++, true, weight, transition, position, curveMiddlePoint, EdgeType.NORMAL));
 }
예제 #5
0
 public int getPlusWeight(Position position, Transition transition)
 {
     int ret = 0;
     foreach (AbstractEdge edge in this.edges)
     {
         if (edge is EdgeTransitionPosition)
         {
             if (EdgeType.NORMAL.Equals(edge.EdgeType))
             {
                 EdgeTransitionPosition etp = (EdgeTransitionPosition)edge;
                 if (etp.StartTransition.Equals(transition) && etp.EndPosition.Equals(position))
                 {
                     ret = etp.Weight;
                     break;
                 }
             }
         }
     }
     return ret;
 }
예제 #6
0
 public int getMinusWeight(Position position, Transition transition)
 {
     int ret = 0;
     foreach (AbstractEdge edge in this.edges)
     {
         if (edge is EdgePositionTransition)
         {
             if (EdgeType.NORMAL.Equals(edge.EdgeType))
             {
                 EdgePositionTransition ept = (EdgePositionTransition)edge;
                 if ( ept.StartPosition.Equals(position) && ept.EndTransition.Equals(transition) )
                 {
                     ret = ept.Weight;
                     break;
                 }
             }
         }
     }
     return ret;
 }
예제 #7
0
 public void deleteToken(Position position)
 {
     if (position != null)
     {
         position.deleteToken();
         this.deleteAllStates();
     }
 }
예제 #8
0
 public void addToken(Position position, string name)
 {
     if (position != null)
     {
         position.addToken(this.identityProvider.tokenIdentity(name), this.unidGenNumber++);
         this.deleteAllStates();
     }
 }
예제 #9
0
 public AbstractNetworkItem addPosition(string name, PointF origo, float radius)
 {
     Position position = new Position(this.identityProvider.positionIdentity(name), this.unidGenNumber++, true, origo, radius, 0);
     this.addItem(position);
     return position;
 }