/// <summary> /// Adds a place for each transition, then combines these places in the given transition. /// </summary> /// <param name="startingTransition">The starting transition</param> /// <param name="petriNet">The current petri net</param> /// <param name="endingTransition">The ending transition, if it exists already. Otherwise a new one is created></param> /// <returns>The transition where the places after the AND-related-events are connected.</returns> /// <author>Jannik Arndt</author> public List <Transition> EndAND(List <Transition> startingTransition, PetriNet petriNet, Transition endingTransition = null) { if (endingTransition == null) { endingTransition = petriNet.AddTransition(); } if (_openParallelismCount.Count > 0) { _openParallelismCount.Pop(); } var listOfClosingPlaces = new List <Place>(); foreach (var transition in startingTransition) { var newPlace = petriNet.AddPlace(); transition.AddOutgoingPlace(newPlace); listOfClosingPlaces.Add(newPlace); } endingTransition.AddIncomingPlaces(listOfClosingPlaces); return(new List <Transition> { endingTransition }); }