"""Final stage: apply the display state recorded in params `display` (hidden objects). Run inside Rhino 8 via runner (globals PARAMS_PATH) after all build stages. """ import json from Rhino.DocObjects import ObjectEnumeratorSettings P = json.load(open(PARAMS_PATH, encoding="utf-8")) doc = __rhino_doc__ hide = set(P["display"].get("hidden_ids", [])) s = ObjectEnumeratorSettings() s.HiddenObjects = True done = [] for o in doc.Objects.GetObjectList(s): oid = o.Attributes.GetUserString("id") or "" if oid in hide and not o.IsHidden: doc.Objects.Hide(o, True) done.append(oid) missing = sorted(hide - {o.Attributes.GetUserString("id") for o in doc.Objects.GetObjectList(s)}) print(json.dumps({"hidden": done, "missing": missing})) if missing: raise RuntimeError(f"display: hidden_ids not found {missing}")