/// <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;
 }
Exemplo n.º 5
0
 /// <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;
 }