Skip to content

Commit 07e227c

Browse files
authored
API revamp (#214)
* Start API revamp * URDF wrapper fixes * Fixes * Minor fixes, docs * Caps * Cleanup * Add backwards compatibility shims * Cleanup * Docs * Remove mypy, formatting * Type alias fix
1 parent c3f331b commit 07e227c

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

72 files changed

+1255
-1372
lines changed

.github/workflows/mypy.yml

-28
This file was deleted.

README.md

-14
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66

77
<p align="left">
88
<img alt="pyright" src="https://github.com/nerfstudio-project/viser/workflows/pyright/badge.svg?branch=main" />
9-
<img alt="mypy" src="https://github.com/nerfstudio-project/viser/workflows/mypy/badge.svg?branch=main" />
109
<img alt="typescript-compile" src="https://github.com/nerfstudio-project/viser/workflows/typescript-compile/badge.svg?branch=main" />
1110
<a href="https://pypi.org/project/viser/">
1211
<img alt="codecov" src="https://img.shields.io/pypi/pyversions/viser" />
@@ -39,19 +38,6 @@ To include example dependencies:
3938
pip install viser[examples]
4039
```
4140

42-
```bash
43-
# Clone the repository.
44-
git clone https://github.com/nerfstudio-project/viser.git
45-
46-
# Install the package.
47-
# You can also install via pip: `pip install viser`.
48-
cd ./viser
49-
pip install -e .[examples]
50-
51-
# Run an example.
52-
python ./examples/02_gui.py
53-
```
54-
5541
After an example script is running, you can connect by navigating to the printed
5642
URL (default: `http://localhost:8080`).
5743

docs/source/camera_handles.md

+10
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
# Camera Handles
2+
3+
<!-- prettier-ignore-start -->
4+
5+
.. autoclass:: viser.CameraHandle
6+
:members:
7+
:undoc-members:
8+
:inherited-members:
9+
10+
<!-- prettier-ignore-end -->

docs/source/client_handles.md

-9
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,10 @@
11
# Client Handles
22

3-
A handle is created for each client that connects to a server. Handles can be
4-
used to communicate with just one client, as well as for reading and writing of
5-
camera state.
6-
73
<!-- prettier-ignore-start -->
84

95
.. autoclass:: viser.ClientHandle
106
:members:
117
:undoc-members:
128
:inherited-members:
139

14-
.. autoclass:: viser.CameraHandle
15-
:members:
16-
:undoc-members:
17-
:inherited-members:
18-
1910
<!-- prettier-ignore-end -->

docs/source/examples/00_coordinate_frames.rst

+3-3
Original file line numberDiff line numberDiff line change
@@ -25,17 +25,17 @@ relative to /tree.
2525
2626
while True:
2727
# Add some coordinate frames to the scene. These will be visualized in the viewer.
28-
server.add_frame(
28+
server.scene.add_frame(
2929
"/tree",
3030
wxyz=(1.0, 0.0, 0.0, 0.0),
3131
position=(random.random() * 2.0, 2.0, 0.2),
3232
)
33-
server.add_frame(
33+
server.scene.add_frame(
3434
"/tree/branch",
3535
wxyz=(1.0, 0.0, 0.0, 0.0),
3636
position=(random.random() * 2.0, 2.0, 0.2),
3737
)
38-
leaf = server.add_frame(
38+
leaf = server.scene.add_frame(
3939
"/tree/branch/leaf",
4040
wxyz=(1.0, 0.0, 0.0, 0.0),
4141
position=(random.random() * 2.0, 2.0, 0.2),

docs/source/examples/01_image.rst

+3-3
Original file line numberDiff line numberDiff line change
@@ -28,13 +28,13 @@ NeRFs), or images to render as 3D textures.
2828
server = viser.ViserServer()
2929
3030
# Add a background image.
31-
server.set_background_image(
31+
server.scene.set_background_image(
3232
iio.imread(Path(__file__).parent / "assets/Cal_logo.png"),
3333
format="png",
3434
)
3535
3636
# Add main image.
37-
server.add_image(
37+
server.scene.add_image(
3838
"/img",
3939
iio.imread(Path(__file__).parent / "assets/Cal_logo.png"),
4040
4.0,
@@ -44,7 +44,7 @@ NeRFs), or images to render as 3D textures.
4444
position=(2.0, 2.0, 0.0),
4545
)
4646
while True:
47-
server.add_image(
47+
server.scene.add_image(
4848
"/noise",
4949
onp.random.randint(
5050
0,

docs/source/examples/02_gui.rst

+16-16
Original file line numberDiff line numberDiff line change
@@ -23,14 +23,14 @@ Examples of basic GUI elements that we can create, read from, and write to.
2323
server = viser.ViserServer()
2424
2525
# Add some common GUI elements: number inputs, sliders, vectors, checkboxes.
26-
with server.add_gui_folder("Read-only"):
27-
gui_counter = server.add_gui_number(
26+
with server.gui.add_folder("Read-only"):
27+
gui_counter = server.gui.add_number(
2828
"Counter",
2929
initial_value=0,
3030
disabled=True,
3131
)
3232
33-
gui_slider = server.add_gui_slider(
33+
gui_slider = server.gui.add_slider(
3434
"Slider",
3535
min=0,
3636
max=100,
@@ -39,52 +39,52 @@ Examples of basic GUI elements that we can create, read from, and write to.
3939
disabled=True,
4040
)
4141
42-
with server.add_gui_folder("Editable"):
43-
gui_vector2 = server.add_gui_vector2(
42+
with server.gui.add_folder("Editable"):
43+
gui_vector2 = server.gui.add_vector2(
4444
"Position",
4545
initial_value=(0.0, 0.0),
4646
step=0.1,
4747
)
48-
gui_vector3 = server.add_gui_vector3(
48+
gui_vector3 = server.gui.add_vector3(
4949
"Size",
5050
initial_value=(1.0, 1.0, 1.0),
5151
step=0.25,
5252
)
53-
with server.add_gui_folder("Text toggle"):
54-
gui_checkbox_hide = server.add_gui_checkbox(
53+
with server.gui.add_folder("Text toggle"):
54+
gui_checkbox_hide = server.gui.add_checkbox(
5555
"Hide",
5656
initial_value=False,
5757
)
58-
gui_text = server.add_gui_text(
58+
gui_text = server.gui.add_text(
5959
"Text",
6060
initial_value="Hello world",
6161
)
62-
gui_button = server.add_gui_button("Button")
63-
gui_checkbox_disable = server.add_gui_checkbox(
62+
gui_button = server.gui.add_button("Button")
63+
gui_checkbox_disable = server.gui.add_checkbox(
6464
"Disable",
6565
initial_value=False,
6666
)
67-
gui_rgb = server.add_gui_rgb(
67+
gui_rgb = server.gui.add_rgb(
6868
"Color",
6969
initial_value=(255, 255, 0),
7070
)
71-
gui_multi_slider = server.add_gui_multi_slider(
71+
gui_multi_slider = server.gui.add_multi_slider(
7272
"Multi slider",
7373
min=0,
7474
max=100,
7575
step=1,
7676
initial_value=(0, 30, 100),
7777
marks=((0, "0"), (50, "5"), (70, "7"), 99),
7878
)
79-
gui_slider_positions = server.add_gui_slider(
79+
gui_slider_positions = server.gui.add_slider(
8080
"# sliders",
8181
min=0,
8282
max=10,
8383
step=1,
8484
initial_value=3,
8585
marks=((0, "0"), (5, "5"), (7, "7"), 10),
8686
)
87-
gui_upload_button = server.add_gui_upload_button(
87+
gui_upload_button = server.gui.add_upload_button(
8888
"Upload", icon=viser.Icon.UPLOAD
8989
)
9090
@@ -108,7 +108,7 @@ Examples of basic GUI elements that we can create, read from, and write to.
108108
# We can set the position of a scene node with `.position`, and read the value
109109
# of a gui element with `.value`. Changes are automatically reflected in
110110
# connected clients.
111-
server.add_point_cloud(
111+
server.scene.add_point_cloud(
112112
"/point_cloud",
113113
points=point_positions * onp.array(gui_vector3.value, dtype=onp.float32),
114114
colors=(

docs/source/examples/03_gui_callbacks.rst

+16-14
Original file line numberDiff line numberDiff line change
@@ -24,14 +24,14 @@ we get updates.
2424
def main() -> None:
2525
server = viser.ViserServer()
2626
27-
gui_reset_scene = server.add_gui_button("Reset Scene")
27+
gui_reset_scene = server.gui.add_button("Reset Scene")
2828
29-
gui_plane = server.add_gui_dropdown(
29+
gui_plane = server.gui.add_dropdown(
3030
"Grid plane", ("xz", "xy", "yx", "yz", "zx", "zy")
3131
)
3232
3333
def update_plane() -> None:
34-
server.add_grid(
34+
server.scene.add_grid(
3535
"/grid",
3636
width=10.0,
3737
height=20.0,
@@ -42,23 +42,23 @@ we get updates.
4242
4343
gui_plane.on_update(lambda _: update_plane())
4444
45-
with server.add_gui_folder("Control"):
46-
gui_show_frame = server.add_gui_checkbox("Show Frame", initial_value=True)
47-
gui_show_everything = server.add_gui_checkbox(
45+
with server.gui.add_folder("Control"):
46+
gui_show_frame = server.gui.add_checkbox("Show Frame", initial_value=True)
47+
gui_show_everything = server.gui.add_checkbox(
4848
"Show Everything", initial_value=True
4949
)
50-
gui_axis = server.add_gui_dropdown("Axis", ("x", "y", "z"))
51-
gui_include_z = server.add_gui_checkbox("Z in dropdown", initial_value=True)
50+
gui_axis = server.gui.add_dropdown("Axis", ("x", "y", "z"))
51+
gui_include_z = server.gui.add_checkbox("Z in dropdown", initial_value=True)
5252
5353
@gui_include_z.on_update
5454
def _(_) -> None:
5555
gui_axis.options = ("x", "y", "z") if gui_include_z.value else ("x", "y")
5656
57-
with server.add_gui_folder("Sliders"):
58-
gui_location = server.add_gui_slider(
57+
with server.gui.add_folder("Sliders"):
58+
gui_location = server.gui.add_slider(
5959
"Location", min=-5.0, max=5.0, step=0.05, initial_value=0.0
6060
)
61-
gui_num_points = server.add_gui_slider(
61+
gui_num_points = server.gui.add_slider(
6262
"# Points", min=1000, max=200_000, step=1000, initial_value=10_000
6363
)
6464
@@ -73,7 +73,7 @@ we get updates.
7373
else:
7474
assert_never(axis)
7575
76-
server.add_frame(
76+
server.scene.add_frame(
7777
"/frame",
7878
wxyz=(1.0, 0.0, 0.0, 0.0),
7979
position=pos,
@@ -83,7 +83,7 @@ we get updates.
8383
8484
def draw_points() -> None:
8585
num_points = gui_num_points.value
86-
server.add_point_cloud(
86+
server.scene.add_point_cloud(
8787
"/frame/point_cloud",
8888
points=onp.random.normal(size=(num_points, 3)),
8989
colors=onp.random.randint(0, 256, size=(num_points, 3)),
@@ -93,7 +93,9 @@ we get updates.
9393
# Here, we update the point clouds + frames whenever any of the GUI items are updated.
9494
gui_show_frame.on_update(lambda _: draw_frame())
9595
gui_show_everything.on_update(
96-
lambda _: server.set_global_scene_node_visibility(gui_show_everything.value)
96+
lambda _: server.scene.set_global_scene_node_visibility(
97+
gui_show_everything.value
98+
)
9799
)
98100
gui_axis.on_update(lambda _: draw_frame())
99101
gui_location.on_update(lambda _: draw_frame())

docs/source/examples/04_camera_poses.rst

+2-2
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ Example showing how we can detect new clients and read camera poses from them.
1818
import viser
1919
2020
server = viser.ViserServer()
21-
server.world_axes.visible = True
21+
server.scene.world_axes.visible = True
2222
2323
2424
@server.on_client_connect
@@ -31,7 +31,7 @@ Example showing how we can detect new clients and read camera poses from them.
3131
print(f"New camera on client {client.client_id}!")
3232
3333
# Show the client ID in the GUI.
34-
gui_info = client.add_gui_text("Client ID", initial_value=str(client.client_id))
34+
gui_info = client.gui.add_text("Client ID", initial_value=str(client.client_id))
3535
gui_info.disabled = True
3636
3737

docs/source/examples/05_camera_commands.rst

+2-2
Original file line numberDiff line numberDiff line change
@@ -40,8 +40,8 @@ corresponding client automatically.
4040
position = rng.uniform(-3.0, 3.0, size=(3,))
4141
4242
# Create a coordinate frame and label.
43-
frame = client.add_frame(f"/frame_{i}", wxyz=wxyz, position=position)
44-
client.add_label(f"/frame_{i}/label", text=f"Frame {i}")
43+
frame = client.scene.add_frame(f"/frame_{i}", wxyz=wxyz, position=position)
44+
client.scene.add_label(f"/frame_{i}/label", text=f"Frame {i}")
4545
4646
# Move the camera when we click a frame.
4747
@frame.on_click

docs/source/examples/06_mesh.rst

+2-2
Original file line numberDiff line numberDiff line change
@@ -30,14 +30,14 @@ Visualize a mesh. To get the demo data, see ``./assets/download_dragon_mesh.sh``
3030
print(f"Loaded mesh with {vertices.shape} vertices, {faces.shape} faces")
3131
3232
server = viser.ViserServer()
33-
server.add_mesh_simple(
33+
server.scene.add_mesh_simple(
3434
name="/simple",
3535
vertices=vertices,
3636
faces=faces,
3737
wxyz=tf.SO3.from_x_radians(onp.pi / 2).wxyz,
3838
position=(0.0, 0.0, 0.0),
3939
)
40-
server.add_mesh_trimesh(
40+
server.scene.add_mesh_trimesh(
4141
name="/trimesh",
4242
mesh=mesh.smoothed(),
4343
wxyz=tf.SO3.from_x_radians(onp.pi / 2).wxyz,

0 commit comments

Comments
 (0)