70 lines
No EOL
2.6 KiB
GDScript
70 lines
No EOL
2.6 KiB
GDScript
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) |