def change_traffic_light_cycle(conditions, context, network, parameters): """ Change de plan de feux pour le contrôleur spécifié """ cdf = network.GetTrafficLightControllerFromID(parameters["cdf"]) # index de la tranche index_tranche = conditions.values()[0]["tranche"] # construction du plan de feux à partir des paramètres reçus lstPlans = parameters["PLANS_DE_FEUX"][0]["PLAN_DE_FEUX"] for plan in lstPlans: if int(plan["index_tranche"]) == index_tranche: paramsPlan = plan break print u"plan a mettre en place : " + paramsPlan["id"] # instanciation de l'objet plan de feux à mettre en place pdf = symuvia.CreateTrafficLightCycle(str(paramsPlan["id"]), symuvia.STime()) # ajout de chaque séquence seqNum = 0 for sequence in plan["SEQUENCES"][0]["SEQUENCE"]: newSeq = symuvia.CreateSequence(float(sequence["duree_totale"]), seqNum) # définition de la séquence ... for signal in sequence["SIGNAUX_ACTIFS"][0]["SIGNAL_ACTIF"]: tuyau_entree = network.GetLinkFromLabel(signal["troncon_entree"]) tuyau_sortie = network.GetLinkFromLabel(signal["troncon_sortie"]) newSignal = symuvia.CreateActiveSignal( tuyau_entree, tuyau_sortie, float(signal["duree_vert"]), 0.0, float(signal["duree_retard_allumage"])) newSeq.AddActiveSignal(newSignal) pdf.AddSequence(newSeq) seqNum = seqNum + 1 # détermination de la date à laquelle démarrer le nouveau plan de feux time_debut_pdf = symuviautils.calcul_date_fin_cycle_PDF(network, cdf) # mise en place du plan de feux cdf.GetLstTrafficLightCycles().AddVariation(time_debut_pdf, pdf)
def change_sequence_length(conditions, context, network, parameters): """ Change la durée d'une séquence """ if len(context) == 0: context["index_sequence"] = int(parameters["num_sequence"]) - 1 context["nouvelle_duree"] = float(parameters["nouvelle_duree"]) cdf = network.GetTrafficLightControllerFromID(parameters["cdf"]) # récupération du plan de feux actif timeSpan = symuvia.STimeSpan() pdf = cdf.GetTrafficLightCycle(network.InstSimu, timeSpan) # recopie du plan de feux en modifiant la durée de la nouvelle séquence new_pdf = symuvia.CreateTrafficLightCycle("", symuvia.STime()) seqNum = 0 for seq in pdf.GetLstSequences(): if seqNum == context["index_sequence"]: duree_seq = context["nouvelle_duree"] else: duree_seq = seq.GetTotalLength() newSeq = symuvia.CreateSequence(duree_seq, seqNum) # création des signaux for signal in seq.GetLstActiveSignals(): newSignal = symuvia.CreateActiveSignal(signal.GetInputLink(), signal.GetOutputLink(), signal.GreenDuration, signal.OrangeDuration, signal.ActivationDelay) newSeq.AddActiveSignal(newSignal) new_pdf.AddSequence(newSeq) seqNum = seqNum + 1 # détermination de la date à laquelle démarrer le nouveau plan de feux time_debut_pdf = symuviautils.calcul_date_fin_cycle_PDF(network, cdf) # mise en place du plan de feux cdf.GetLstTrafficLightCycles().AddVariation(time_debut_pdf, new_pdf)