#! python3 # -*- coding: utf-8 -*- # SPDX-License-Identifier: AGPL-3.0-or-later # Copyright (C) 2026 Karim Gabriele Varano """ dossier_dispatch.py Universal-Wrapper fuer DOSSIER-Bridge-Commands via Rhino-Alias. Aufruf vom Alias: _-RunPythonScript "/.../dossier_dispatch.py" oder via Rhino.Input.RhinoGet — wir lesen den letzten String-Parameter aus der Command-Line. Aktionen mappen auf ElementeBridge._cmd_create_* via einer kleinen Dispatch-Tabelle. Bridge-Referenz wird in sc.sticky vom panel_factory abgelegt (siehe elemente.py _bridge_factory). """ import sys import scriptcontext as sc _ACTIONS = { "wand": ("_cmd_create_wall", ()), "tuer": ("_cmd_create_oeffnung", ("tuer",)), "fenster": ("_cmd_create_oeffnung", ("fenster",)), "decke": ("_cmd_create_decke", ()), "aussparung":("_cmd_create_aussparung",()), "dach": ("_cmd_create_dach", ()), "treppe": ("_cmd_create_treppe", ()), "stuetze": ("_cmd_create_stuetze", ()), "traeger": ("_cmd_create_traeger", ()), "raum": ("_cmd_create_raum", ()), "stempel": ("_cmd_create_stempel", ()), "symbol": ("_cmd_create_symbol", ()), } _PRETTY = { "wand": "DOSSIER Wand", "tuer": "DOSSIER Tuer", "fenster": "DOSSIER Fenster", "decke": "DOSSIER Decke", "aussparung": "DOSSIER Aussparung", "dach": "DOSSIER Dach", "treppe": "DOSSIER Treppe", "stuetze": "DOSSIER Stuetze", "traeger": "DOSSIER Traeger", "raum": "DOSSIER Raum", "stempel": "DOSSIER Stempel", "symbol": "DOSSIER Symbol", } def dispatch(action): """Public entry — von per-action Wrapper-Scripts aufgerufen.""" try: import Rhino Rhino.RhinoApp.SetCommandPrompt(_PRETTY.get(action, "DOSSIER " + action.capitalize())) except Exception: pass bridge = sc.sticky.get("dossier_bridge_elemente") if bridge is None: print("[DOSSIER-ALIAS] Elemente-Bridge nicht aktiv (Panel oeffnen)") return spec = _ACTIONS.get(action) if spec is None: print("[DOSSIER-ALIAS] Unbekannte Aktion:", action) return method_name, args = spec method = getattr(bridge, method_name, None) if method is None: print("[DOSSIER-ALIAS] Bridge-Method fehlt:", method_name) return try: method({}, *args) except Exception as ex: print("[DOSSIER-ALIAS]", action, "->", method_name, ":", ex) # Backwards-Compat (alter Name). _dispatch = dispatch def _read_action_from_argv(): # sys.argv enthaelt bei _-RunPythonScript "path" arg1 arg2 ... die # Args nach dem Skript-Pfad. argv[0] = Skript-Pfad. if len(sys.argv) >= 2: return str(sys.argv[1]).strip().lower() return None if __name__ == "__main__": a = _read_action_from_argv() if a: _dispatch(a) else: print("[DOSSIER-ALIAS] Keine Aktion uebergeben. Erwartet:", ", ".join(sorted(_ACTIONS.keys())))