GUI for finger v1
This commit is contained in:
+40
-12
@@ -16,6 +16,10 @@ def init_uv_mesh_viewer(
|
||||
vertices: np.ndarray | None = None,
|
||||
vertex_colors: np.ndarray | None = None,
|
||||
window_name: str = "UV Finger Mesh 3D",
|
||||
*,
|
||||
window_width: int = 1280,
|
||||
window_height: int = 720,
|
||||
extra_geometries: list | None = None,
|
||||
):
|
||||
"""Create Open3D viewer with an unlit triangle mesh."""
|
||||
import open3d as o3d
|
||||
@@ -26,7 +30,7 @@ def init_uv_mesh_viewer(
|
||||
vertex_colors = mesh.base_colors
|
||||
|
||||
vis = o3d.visualization.Visualizer()
|
||||
vis.create_window(window_name=window_name, width=1280, height=720)
|
||||
vis.create_window(window_name=window_name, width=window_width, height=window_height)
|
||||
|
||||
tri_mesh = o3d.geometry.TriangleMesh()
|
||||
tri_mesh.vertices = o3d.utility.Vector3dVector(vertices.astype(np.float64))
|
||||
@@ -35,6 +39,9 @@ def init_uv_mesh_viewer(
|
||||
tri_mesh.compute_vertex_normals()
|
||||
vis.add_geometry(tri_mesh)
|
||||
|
||||
for geometry in extra_geometries or []:
|
||||
vis.add_geometry(geometry)
|
||||
|
||||
render_option = vis.get_render_option()
|
||||
render_option.mesh_show_back_face = True
|
||||
if hasattr(render_option, "light_on"):
|
||||
@@ -51,13 +58,18 @@ def update_uv_mesh_viewer(
|
||||
o3d,
|
||||
vertices: np.ndarray,
|
||||
vertex_colors: np.ndarray,
|
||||
*,
|
||||
extra_geometries: list | None = None,
|
||||
):
|
||||
"""Update mesh vertices/colors."""
|
||||
"""Update mesh vertices/colors and optional extra geometries."""
|
||||
tri_mesh.vertices = o3d.utility.Vector3dVector(vertices.astype(np.float64))
|
||||
tri_mesh.vertex_colors = o3d.utility.Vector3dVector(vertex_colors.astype(np.float64))
|
||||
tri_mesh.compute_vertex_normals()
|
||||
vis.update_geometry(tri_mesh)
|
||||
|
||||
for geometry in extra_geometries or []:
|
||||
vis.update_geometry(geometry)
|
||||
|
||||
vis.poll_events()
|
||||
vis.update_renderer()
|
||||
|
||||
@@ -74,6 +86,8 @@ class UVMeshViewer:
|
||||
color_mode: str = "flow",
|
||||
value_min: float | None = None,
|
||||
value_max: float | None = None,
|
||||
window_width: int = 1024,
|
||||
window_height: int = 1024,
|
||||
):
|
||||
self.mesh = mesh
|
||||
self.max_magnitude = max_magnitude
|
||||
@@ -81,27 +95,37 @@ class UVMeshViewer:
|
||||
self.color_mode = color_mode
|
||||
self.value_min = value_min
|
||||
self.value_max = value_max
|
||||
self.window_width = window_width
|
||||
self.window_height = window_height
|
||||
self.vis = None
|
||||
self.tri_mesh = None
|
||||
self._o3d = None
|
||||
|
||||
def update(self, flow=None, scalar_map=None):
|
||||
"""Update viewer from UV-space maps. Returns False if window closed."""
|
||||
def _vertex_colors(self, flow=None, scalar_map=None):
|
||||
if self.color_mode == "depth":
|
||||
colors = scalar_map_vertex_colors(
|
||||
return scalar_map_vertex_colors(
|
||||
scalar_map,
|
||||
self.mesh,
|
||||
value_min=self.value_min,
|
||||
value_max=self.value_max,
|
||||
threshold=self.threshold,
|
||||
)
|
||||
else:
|
||||
colors = flow_magnitude_vertex_colors(
|
||||
flow,
|
||||
self.mesh,
|
||||
max_magnitude=self.max_magnitude,
|
||||
threshold=self.threshold,
|
||||
)
|
||||
return flow_magnitude_vertex_colors(
|
||||
flow,
|
||||
self.mesh,
|
||||
max_magnitude=self.max_magnitude,
|
||||
threshold=self.threshold,
|
||||
)
|
||||
|
||||
def _extra_geometries_for_init(self):
|
||||
return []
|
||||
|
||||
def _extra_geometries_for_update(self):
|
||||
return []
|
||||
|
||||
def update(self, flow=None, scalar_map=None):
|
||||
"""Update viewer from UV-space maps. Returns False if window closed."""
|
||||
colors = self._vertex_colors(flow=flow, scalar_map=scalar_map)
|
||||
vertices = self.mesh.rest_vertices
|
||||
|
||||
if self.vis is None:
|
||||
@@ -109,6 +133,9 @@ class UVMeshViewer:
|
||||
self.mesh,
|
||||
vertices=vertices,
|
||||
vertex_colors=colors,
|
||||
window_width=self.window_width,
|
||||
window_height=self.window_height,
|
||||
extra_geometries=self._extra_geometries_for_init(),
|
||||
)
|
||||
return True
|
||||
|
||||
@@ -121,6 +148,7 @@ class UVMeshViewer:
|
||||
self._o3d,
|
||||
vertices,
|
||||
colors,
|
||||
extra_geometries=self._extra_geometries_for_update(),
|
||||
)
|
||||
return True
|
||||
|
||||
|
||||
Reference in New Issue
Block a user