/// <summary> /// Выполняет перевод токенов из входящих MPlace в MTranstition в выходящие MPlace из MTranstition /// </summary> /// <param name="transition">переход для входящих и выходящих mPlace которого надо сделать перевод</param> /// <returns>Результат перевода токенов</returns> public bool fireTransition(MTransition transition) { try { if (transition.isEnable) { foreach (var inArc in transition.inPlaces) { if (!inArc.isInhibitor) { inArc.edge.edge.Item1.tokens = inArc.edge.edge.Item1.tokens - inArc.weight; } } foreach (var outArc in transition.outPlaces) { outArc.edge.edge.Item1.tokens += outArc.weight; } PetriNetsClassLibrary.PetriNet.FiredTransitions.Push(transition); } } catch { return(false); } return(transition.isEnable); }
/// <summary> /// Конструктор нового объекта TRectangle с известным местоположением и габаритами /// </summary> /// <param name="_Center">Центр-Позиция рисования</param> /// <param name="_height">Выоста</param> /// <param name="_width">Ширина</param> /// <param name="labelText">наименование</param> public TRectangle(Point _Center, int _height, int _width, string labelText) { FillColor = ControlPaint.Light(Color.DarkBlue); Center = _Center; height = _height; width = _width; label = new Label(new Point(_Center.X + 10, _Center.Y + 10), labelText); inLines = new List <Line>(); model = new MTransition(labelText); PetriNetsClassLibrary.PetriNet.CTransition.allTransition.Add(model); }
/// <summary> /// Добавление арки в один из листов объекта mTransition: inPlaces, outPlaces, /// т.е добавление указаного объекта MArc в нужный список. /// </summary> /// <param name="mTransition">Объекта класса MTransition в свойства которого добавлется MArc </param> /// <param name="arc">Добавляемый объекты MArc в указаный список mTransition</param> /// <returns>Результат добавление объекта MArc в список mTransition(true-успех, false - неудача)</returns> public bool addArc(MTransition mTransition, MArc arc) { if (arc.edge.isInEdge) { return(mTransition.addArc(arc, mTransition.inPlaces)); } else { return(mTransition.addArc(arc, mTransition.outPlaces)); } }
/// <summary> /// Конструктор ребра Edge /// </summary> /// <param name="mPlace">Место MPlace с одной стороны связи</param> /// <param name="mTransition">Переход MTransition с другой стороны связи</param> /// <param name="isInEdge">Если true - mPlace начало связи, а mTransition - конец связи</param> public Edge(MPlace mPlace, MTransition mTransition, bool isInEdge) { edge = new Tuple <MPlace, MTransition>(mPlace, mTransition); this.isInEdge = isInEdge; }
/// <summary> /// Конструктор арки через объекты классов MPlace и MTransition, т.е с установленной связью /// </summary> /// <param name="mPlace">объект связи Edge типа MPlace</param> /// <param name="mTransition">объект связи Edge типа MTransition</param> /// <param name="isIn">Входная или выходная арка</param> public MArc(MPlace mPlace, MTransition mTransition, bool isIn) { edge = new Edge(mPlace, mTransition, isIn); Weight = 1; }