#! python3 # -*- coding: utf-8 -*- # Geschoss hoch (zum naechstoberen Eintrag in der Zeichnungsebenen-Liste) import json import scriptcontext as sc import Rhino def _go(delta): doc = Rhino.RhinoDoc.ActiveDoc if doc is None: print("[GESCHOSS-NAV] kein Doc"); return bridge = sc.sticky.get("ebenen_bridge_ref") if bridge is None: print("[GESCHOSS-NAV] Ebenen-Bridge nicht aktiv (Panel oeffnen)"); return try: zraw = doc.Strings.GetValue("dossier_zeichnungsebenen") or "" zs = json.loads(zraw) if zraw else [] if not isinstance(zs, list) or not zs: print("[GESCHOSS-NAV] keine Zeichnungsebenen"); return cur_id = doc.Strings.GetValue("dossier_active_id") or "" idx = -1 for i, z in enumerate(zs): if isinstance(z, dict) and z.get("id") == cur_id: idx = i; break if idx < 0: idx = 0 # nichts aktiv → starten oben new_idx = max(0, min(len(zs) - 1, idx + delta)) if new_idx == idx: print("[GESCHOSS-NAV] schon am {}".format( "obersten" if delta < 0 else "untersten")); return target = zs[new_idx] if not isinstance(target, dict) or not target.get("id"): print("[GESCHOSS-NAV] Zielebene ungueltig"); return print("[GESCHOSS-NAV] wechsle zu '{}'".format(target.get("name") or target["id"])) bridge._set_active_zeichnungsebene(target) except Exception as ex: print("[GESCHOSS-NAV]", ex) # delta=-1 = nach oben (vorheriger Eintrag in der Liste, weil Listen # typischerweise oberste Ebene oben sind) _go(-1)