public void addState(StateVector state) { if (!(this.states.Contains(state))) { this.states.Add(state); } }
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); } } }
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; }
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); }
public void addEdge(StateVector start, StateVector end) { this.addEdge(new EdgeStateState(start, end)); }
public StateVector find(StateVector stateVector) { StateVector ret = null; foreach (StateVector sv in this.states) { if (sv.Equals(stateVector)) { ret = sv; break; } } return ret; }
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; }
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; }
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); } }
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; }
public EdgeStateState(StateVector startState, StateVector endState) { this.startState = startState; this.endState = endState; }
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 + ")"); } }
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; } } } }
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); } }
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; } }
/// <summary> /// Clear StateMatrix. /// </summary> public void clearStateMatrix(bool isAutoFire) { this.actualStateVector = null; this.stateMatrix.Clear(); this.saveState(isAutoFire, null, this.getNewStateVector(null)); }