extends SceneTree ## Render-Probe U2 (Karte t_e3c0310a): Szenen-Baum links mit Zwei-Wege-Auswahl. ## Legt 3 Objekte an, wählt Objekt 1 in 3D (interaction.select_object) und ## rendert die echte Main-UI: der Baum links muss die Kategorie-Ebene, das ## Auge-Präfix und die markierte Zeile zeigen; in 3D muss das Objekt ## hervorgehoben sein. ## Start (BRAUCHT Rendering — NICHT --headless): ## xvfb-run godot --path . --rendering-driver opengl3 -s res://tests/probe_u2_scene_tree_render.gd var out_dir := "/opt/data/profiles/scopedvr-dev/cache/scratch" func _initialize() -> void: if OS.get_cmdline_user_args().size() > 0: out_dir = OS.get_cmdline_user_args()[0] # Feste Fenstergröße (sonst fallen die Docks im xvfb-Default zusammen). root.size = Vector2i(1440, 900) root.mode = Window.MODE_WINDOWED await process_frame await process_frame var scene: PackedScene = load("res://core/scenes/main.tscn") var main = scene.instantiate() root.add_child(main) await process_frame await process_frame await process_frame # Drei Objekte nah an der Kartenmitte, kräftig skaliert (sichtbar aus # der Startansicht 80 m über der Mitte). (main.doc["objects"] as Array).append({ "id": "barrel_001", "pos": [0.0, 0.0, 0.0], "scale": 3.0, "rot_y_deg": 0.0}) (main.doc["objects"] as Array).append({ "id": "box_001", "pos": [9.0, 0.0, 5.0], "scale": 20.0, "rot_y_deg": 25.0}) (main.doc["objects"] as Array).append({ "id": "fremd_objekt_xyz", "pos": [-9.0, 0.0, -5.0], "scale": 3.0, "rot_y_deg": 0.0}) main.call("_after_structure_change") await process_frame await process_frame # Objekt 1 in 3D auswählen → Baum-Zeile wird mitmarkiert (Zwei-Wege). main.interaction.call("select_object", 1) main.call("_focus_selection") # Kamera auf die Auswahl (Objekt sichtbar machen) # Hinweis-Dialoge (z. B. „Modelle fehlen" im Klon ohne GLB-Quellen) schließen, # damit der Beweis die 3D-Ansicht frei gibt. for child in main.get_children(): if child is Window or child is AcceptDialog: child.hide() await process_frame await process_frame await process_frame await RenderingServer.frame_post_draw var img := root.get_texture().get_image() var out_path := out_dir + "/u2_baum_links_beweis.png" img.save_png(out_path) print("PROBE_PNG: ", out_path) print("PROBE_FERTIG: Auswahl=", main.interaction.get("selected_index"), " Baumzeile=", tree_mark_ok(main)) quit(0) func tree_mark_ok(main) -> bool: var tm = main.get("tree_mod") if tm == null: return false var imap: Dictionary = tm.get("_obj_index_map") if not imap.has(1): return false return (imap[1] as TreeItem).is_selected(0)