GUI layouts

Organize GUI controls using folders, tabs, and nested structures for better user experience.

Features:

Source: examples/02_gui/02_layouts.py

GUI layouts

Code

 1import time
 2
 3import viser
 4
 5
 6def main() -> None:
 7    server = viser.ViserServer()
 8
 9    # Example 1: Organizing with folders
10    with server.gui.add_folder("Camera Controls"):
11        with server.gui.add_folder("Position"):
12            server.gui.add_slider("X", min=-5.0, max=5.0, step=0.1, initial_value=0.0)
13            server.gui.add_slider("Y", min=-5.0, max=5.0, step=0.1, initial_value=2.0)
14            server.gui.add_slider("Z", min=-5.0, max=5.0, step=0.1, initial_value=3.0)
15
16        with server.gui.add_folder("Rotation"):
17            server.gui.add_slider("Pitch", min=-180, max=180, step=1, initial_value=0)
18            server.gui.add_slider("Yaw", min=-180, max=180, step=1, initial_value=0)
19            server.gui.add_slider("Roll", min=-180, max=180, step=1, initial_value=0)
20
21    # Example 2: Scene objects organization
22    with server.gui.add_folder("Scene Objects"):
23        with server.gui.add_folder("Lighting"):
24            server.gui.add_checkbox("Enable Lighting", initial_value=True)
25            server.gui.add_slider(
26                "Intensity", min=0.0, max=2.0, step=0.1, initial_value=1.0
27            )
28            server.gui.add_rgb("Color", initial_value=(255, 255, 255))
29
30        with server.gui.add_folder("Objects"):  # GUI objects folder
31            show_axes = server.gui.add_checkbox(
32                "Show Coordinate Axes", initial_value=True
33            )
34            server.gui.add_checkbox("Show Grid", initial_value=False)
35
36            with server.gui.add_folder("Sphere"):
37                sphere_radius = server.gui.add_slider(
38                    "Radius", min=0.1, max=2.0, step=0.1, initial_value=0.5
39                )
40                sphere_color = server.gui.add_rgb("Color", initial_value=(255, 0, 0))
41                sphere_visible = server.gui.add_checkbox("Visible", initial_value=True)
42
43    # Example 3: Settings and preferences
44    with server.gui.add_folder("Settings"):
45        with server.gui.add_folder("Display"):
46            server.gui.add_rgb("Background", initial_value=(40, 40, 40))
47            server.gui.add_checkbox("Wireframe Mode", initial_value=False)
48
49        with server.gui.add_folder("Performance"):
50            server.gui.add_slider(
51                "FPS Limit", min=30, max=120, step=10, initial_value=60
52            )
53            server.gui.add_dropdown(
54                "Quality", options=["Low", "Medium", "High"], initial_value="Medium"
55            )
56
57    # Add some visual objects to demonstrate the controls
58    server.scene.add_icosphere(
59        name="demo_sphere",
60        radius=sphere_radius.value,
61        color=(
62            sphere_color.value[0] / 255.0,
63            sphere_color.value[1] / 255.0,
64            sphere_color.value[2] / 255.0,
65        ),
66        position=(0.0, 0.0, 0.0),
67        visible=sphere_visible.value,
68    )
69
70    if show_axes.value:
71        server.scene.add_frame("axes", axes_length=1.0, axes_radius=0.02)
72
73    print("This example shows GUI organization with folders.")
74    print("The sphere demonstrates some interactive controls.")
75
76    print("Explore the organized GUI controls!")
77    print("Notice how folders help group related functionality.")
78
79    while True:
80        time.sleep(0.1)
81
82
83if __name__ == "__main__":
84    main()