Beispiel #1
0
 public void addState(StateVector state)
 {
     if (!(this.states.Contains(state)))
     {
         this.states.Add(state);
     }
 }
Beispiel #2
0
 public static StateVector openFromXml(XmlNode node, List<AbstractItem> alltokens)
 {
     PointF origo = new PointF(0, 0);
     XmlNodeList list = node.ChildNodes;
     Dictionary<Int64, List<AbstractToken>> tokenDistribution = null;
     List<PetriEvent> events = null;
     foreach (XmlNode childNode in list)
     {
         string namespaceUri = childNode.NamespaceURI;
         string localName = childNode.LocalName;
         switch (namespaceUri)
         {
             case PetriXmlHelper.XML_POINTF_NAMESPACE:
                 if ("StateOrigo".Equals(localName))
                 {
                     origo = PetriXmlHelper.openPointF(childNode);
                 }
                 break;
             case PetriXmlHelper.XML_STATE_NAMESPACE:
                 switch (localName)
                 {
                     case "TokenDistributions":
                         tokenDistribution = StateVector.openTokenDistributionFromXml(childNode.ChildNodes, alltokens);
                         break;
                     case "Events":
                         events = PetriEvent.openEvents(childNode.ChildNodes, "StateEvent");
                         break;
                 }
                 break;
         }
     }
     string name = StateVector.openNameAttrFromNode(node);
     long unid = StateVector.openUnidAttrFromNode(node);
     float radius = StateVector.openRadiusAttrFromNode(node);
     StateVector ret = new StateVector(name, unid, tokenDistribution, origo, radius);
     ret.PetriEvents.addEvent(events);
     return ret;
 }
 private void stateMatrix_callStateVector(StateVector stateVector)
 {
     if (this.ActiveMdiChild is PetriNetworkForm)
     {
         if ((this.ActiveMdiChild as PetriNetworkForm).Network != null)
         {
             PetriNetwork network = (this.ActiveMdiChild as PetriNetworkForm).Network;
             network.returnToState(stateVector);
             this.reDrawActivePetriNetwork(false);
             this.refreshToolWindowsPetriNetwork(network);
         }
     }
 }
Beispiel #4
0
 public bool Equals(StateVector sv)
 {
     bool ret = false;
     if (sv != null)
     {
         ret = true;
         foreach (KeyValuePair<Int64, List<AbstractToken>> entry in sv.tokenDistribution)
         {
             Int64 positionUnid = entry.Key;
             if (this.tokenDistribution[positionUnid] != null)
             {
                 List<AbstractToken> thisTokens = this.tokenDistribution[positionUnid];
                 List<AbstractToken> tokens = entry.Value;
                 if ((tokens != null) && (thisTokens != null))
                 {
                     if (tokens.Count != thisTokens.Count)
                     {
                         ret = false;
                         break;
                     }
                 }
             }
             else
             {
                 ret = false;
                 break;
             }
         }
     }
     return ret;
 }
Beispiel #5
0
 public void draw(Graphics g, NetworkVisualSettings visualSettings, StateVector actualState)
 {
     RectangleF rect = this.Rectangle;
     Pen pen = ( this.Equals(actualState) ? visualSettings.SelectedItemPen : visualSettings.StatePen);
     g.DrawEllipse(pen, rect);
     SizeF textSize = g.MeasureString(this.name, visualSettings.DefaultFont);
     g.DrawString(this.name, visualSettings.DefaultFont, visualSettings.StateBrush, this.origo.X - textSize.Width / 2, this.origo.Y - textSize.Height / 2);
 }
Beispiel #6
0
 public void addEdge(StateVector start, StateVector end)
 {
     this.addEdge(new EdgeStateState(start, end));
 }
Beispiel #7
0
 public StateVector find(StateVector stateVector)
 {
     StateVector ret = null;
     foreach (StateVector sv in this.states)
     {
         if (sv.Equals(stateVector))
         {
             ret = sv;
             break;
         }
     }
     return ret;
 }
Beispiel #8
0
 protected StateVector addOrFetchStateToOrFromHierarchy(bool isAutoFire, StateVector stateVector)
 {
     StateVector findStateVector = this.stateHierarchy.find(stateVector);
     if (findStateVector == null)
     {
         stateVector.Origo = this.stateHierarchy.getAvailableOrigo();
         this.stateHierarchy.addState(stateVector);
         this.sendEvent(isAutoFire, "Add state to StateHierarchy.");
         findStateVector = stateVector;
     }
     return findStateVector;
 }
Beispiel #9
0
 private void cutStateMatrix(StateVector last)
 {
     List<StateVector> newStateMatrix = new List<StateVector>();
     foreach (StateVector stateVector in this.stateMatrix){
         if (stateVector.Equals(last))
         {
             break;
         }
         newStateMatrix.Add(stateVector);
     }
     newStateMatrix.Add(last);
     this.stateMatrix = newStateMatrix;
 }
Beispiel #10
0
 public void draw(Graphics g, NetworkVisualSettings visualSettings, StateVector actualState)
 {
     foreach (StateVector state in this.states)
     {
         state.draw(g, visualSettings, actualState);
     }
     foreach (EdgeStateState edge in this.edges)
     {
         edge.draw(g, visualSettings);
     }
 }
Beispiel #11
0
 public void returnToState(StateVector stateVector)
 {
     List<Position> positions = this.Positions;
     foreach ( Position position in positions ){
         List<AbstractToken> tokens = stateVector.getTokensByPositionUnid(position.Unid);
         position.changeTokens(tokens);
     }
     this.actualStateVector = stateVector;
 }
Beispiel #12
0
 public EdgeStateState(StateVector startState, StateVector endState)
 {
     this.startState = startState;
     this.endState = endState;
 }
Beispiel #13
0
 protected void saveState(bool isAutoFire, string name, StateVector stateVector)
 {
     StateVector findStateVector = null;
     foreach (StateVector sv in this.stateMatrix)
     {
         if (sv.Equals(stateVector))
         {
             findStateVector = sv;
             break;
         }
     }
     if (findStateVector == null)
     {
         findStateVector = this.addOrFetchStateToOrFromHierarchy(isAutoFire, stateVector);
         if (this.actualStateVector != null)
         {
             this.stateHierarchy.addEdge(this.actualStateVector, findStateVector);
         }
         this.stateMatrix.Add(findStateVector);
         this.actualStateVector = findStateVector;
         findStateVector.Statistics.add(1);
         this.sendEvent(isAutoFire,"Create a new StateVector, and add to the end of the StateMatrix. (Actual: " + this.actualStateVector + ")");
     }
     else
     {
         if (this.actualStateVector != null)
         {
             this.stateHierarchy.addEdge(this.actualStateVector, findStateVector);
         }
         this.actualStateVector = findStateVector;
         findStateVector.Statistics.add(1);
         this.sendEvent(isAutoFire,"State is already exists, so do not create a new StateVector. Actual StateVector changed. (Actual: " + this.actualStateVector + ")");
     }
 }
Beispiel #14
0
        private void pbStateHierarchy_MouseDown(object sender, MouseEventArgs e)
        {
            if (this.network != null)
            {
                if (e.Button.Equals(System.Windows.Forms.MouseButtons.Left))
                {
                    this.startCoordinatesF = this.convertPixelToCoord(e.X, e.Y);
                    this.startCoordinates = this.pbStateHierarchy.PointToScreen(new Point(e.X, e.Y));

                    StateVector item = this.network.StateHierarchy.getVisualItemByCoordinates(this.startCoordinatesF);
                    if ((item != null) && (item is StateVector))
                    {
                        this.moveItem = item;
                        this.endCoordinates = this.startCoordinates;
                        this.isStartMove = true;
                    }
                }
            }
        }
Beispiel #15
0
 public void removeState(StateVector state)
 {
     if ( (state != null) && ( this.states.Contains(state) ) )
     {
         List<EdgeStateState> removeableEdges = new List<EdgeStateState>();
         foreach (EdgeStateState edge in this.edges)
         {
             if (edge.Start.Equals(state) || edge.End.Equals(state))
             {
                 removeableEdges.Add(edge);
             }
         }
         foreach (EdgeStateState edge in removeableEdges)
         {
             this.edges.Remove(edge);
         }
         this.states.Remove(state);
     }
 }
Beispiel #16
0
        private void pbStateHierarchy_MouseUp(object sender, MouseEventArgs e)
        {
            if (this.network != null)
            {
                this.endCoordinatesF = this.convertPixelToCoord(e.X, e.Y);

                if (this.isStartMove)
                {
                    this.moveItem.Origo = this.endCoordinatesF;
                    this.clear(this.pbStateHierarchy);
                    this.draw(this.network);
                }

                this.isStartMove = false;
                this.moveItem = null;
            }
        }
Beispiel #17
0
 /// <summary>
 /// Clear StateMatrix.
 /// </summary>
 public void clearStateMatrix(bool isAutoFire)
 {
     this.actualStateVector = null;
     this.stateMatrix.Clear();
     this.saveState(isAutoFire, null, this.getNewStateVector(null));
 }