Skip to main content
Glama
enable-370-with-refresh.py•6.95 kB
# -*- coding: ascii -*- """ Script per abilitare fermata 370 con tentativo di refresh GUI """ OPERATIONS = { 370: { "action": "enable", "stop_time": 60, "pre_run_add": 0, "post_run_add": 0 } } def get_lr_stop_sequence(lr): """Estrae la sequenza di fermate dal LineRoute""" stops = [] for item in lr.LineRouteItems: try: stop_no = item.AttValue("StopPointNo") if stop_no: stops.append({ 'stop': int(stop_no), 'index': item.AttValue("Index"), 'is_route_point': item.AttValue("IsRoutePoint"), 'item': item }) except: pass stops.sort(key=lambda x: x['index']) return stops try: print("=" * 80) print("ABILITAZIONE FERMATA 370 CON TENTATIVO REFRESH GUI") print("=" * 80) # Trova LineRoute lr = None for lineroute in Visum.Net.LineRoutes: name = lineroute.AttValue("Name") if name == "R17_2": lr = lineroute break if not lr: raise Exception("LineRoute R17_2 non trovato") print("\n[1] LineRoute trovato: %s" % lr.AttValue("Name")) # Trova TimeProfile tp = None for time_profile in lr.TimeProfiles: tp = time_profile break if not tp: raise Exception("TimeProfile non trovato") print("[2] TimeProfile trovato: %s" % tp.AttValue("Name")) # Sequenza fermate stops_sequence = get_lr_stop_sequence(lr) print("[3] Sequenza fermate: %d totali" % len(stops_sequence)) # Elabora operazione per fermata 370 for stop_no, config in OPERATIONS.items(): print("\n" + "=" * 80) print("OPERAZIONE: %s fermata %d" % (config['action'].upper(), stop_no)) print("=" * 80) # Trova stop nella sequenza stop_info = None stop_pos = None for i, s in enumerate(stops_sequence): if s['stop'] == stop_no: stop_info = s stop_pos = i break if not stop_info: print("ERRORE: Fermata %d non trovata!" % stop_no) continue if config['action'] == 'enable': # Trova prev/next abilitati prev_stop = None next_stop = None for i in range(stop_pos - 1, -1, -1): if stops_sequence[i]['is_route_point']: prev_stop = stops_sequence[i] break for i in range(stop_pos + 1, len(stops_sequence)): if stops_sequence[i]['is_route_point']: next_stop = stops_sequence[i] break if not prev_stop or not next_stop: print("ERRORE: Fermate adiacenti non trovate!") continue print("\n[A] Fermate adiacenti:") print(" Prev: %d" % prev_stop['stop']) print(" Curr: %d" % stop_info['stop']) print(" Next: %d" % next_stop['stop']) # Leggi tempi da TimeProfile prev_dep = None next_arr = None for tpi in tp.TimeProfileItems: s = tpi.AttValue("StopPointNo") if s and int(s) == prev_stop['stop']: prev_dep = tpi.AttValue("Dep") elif s and int(s) == next_stop['stop']: next_arr = tpi.AttValue("Arr") if prev_dep is None or next_arr is None: print("ERRORE: Tempi prev/next non trovati!") continue print("\n[B] Tempi adiacenti:") print(" Prev Dep: %s" % prev_dep) print(" Next Arr: %s" % next_arr) # Calcola tempi total_time = next_arr - prev_dep stop_time = config['stop_time'] pre_run = (total_time - stop_time) / 2.0 + config['pre_run_add'] arr = prev_dep + pre_run dep = arr + stop_time print("\n[C] Tempi calcolati:") print(" Arr: %s" % arr) print(" Dep: %s" % dep) print(" StopTime: %s" % stop_time) # Abilita print("\n[D] Abilitazione...") current_item = stop_info['item'] # Force recreation current_item.SetAttValue("IsRoutePoint", False) current_item.SetAttValue("IsRoutePoint", True) print(" IsRoutePoint: True") # Crea TimeProfileItem new_tpi = tp.AddTimeProfileItem(current_item) print(" TimeProfileItem creato") # Imposta tempi new_tpi.SetAttValue("Arr", arr) new_tpi.SetAttValue("Dep", dep) print(" Tempi impostati") # Verifica stoptime_read = new_tpi.AttValue("StopTime") print("\n[E] Verifica database:") print(" StopTime letto: %s" % stoptime_read) if abs(stoptime_read - stop_time) < 0.01: print(" OK: Database aggiornato correttamente!") else: print(" PROBLEMA: StopTime = %s (atteso %s)" % (stoptime_read, stop_time)) print("\n" + "=" * 80) print("TENTATIVO REFRESH GUI") print("=" * 80) # Tenta vari metodi di refresh try: print("\n[1] Tentativo UpdateDisplay()...") Visum.Graphics.UpdateDisplay() print(" OK") except Exception as e: print(" Non disponibile: %s" % str(e)) try: print("\n[2] Tentativo Redraw()...") Visum.Graphics.Redraw() print(" OK") except Exception as e: print(" Non disponibile: %s" % str(e)) try: print("\n[3] Tentativo Refresh su LineRoute...") lr.Refresh() print(" OK") except Exception as e: print(" Non disponibile: %s" % str(e)) try: print("\n[4] Tentativo Refresh su TimeProfile...") tp.Refresh() print(" OK") except Exception as e: print(" Non disponibile: %s" % str(e)) print("\n" + "=" * 80) print("OPERAZIONE COMPLETATA") print("=" * 80) print("\n>>> CHIUDI la finestra Time Profile Editor (se aperta)") print(">>> RIAPRI: Edit > Time Profiles") print(">>> Seleziona R17_2, TimeProfile 'R17'") print(">>> Verifica fermata 370") print("\nSe anche dopo chiusura/riapertura non vedi la fermata 370,") print("allora e' necessario salvare e riaprire il progetto completo.") except Exception as e: print("\nERRORE: %s" % str(e)) import traceback traceback.print_exc()

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/multiluca2020/visum-thinker-mcp-server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server