File: customized_visualization_key_action.py

package info (click to toggle)
open3d 0.19.0-5
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 83,496 kB
  • sloc: cpp: 206,543; python: 27,254; ansic: 8,356; javascript: 1,883; sh: 1,527; makefile: 259; xml: 69
file content (85 lines) | stat: -rw-r--r-- 2,766 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
# ----------------------------------------------------------------------------
# -                        Open3D: www.open3d.org                            -
# ----------------------------------------------------------------------------
# Copyright (c) 2018-2024 www.open3d.org
# SPDX-License-Identifier: MIT
# ----------------------------------------------------------------------------

import open3d as o3d


def custom_key_action_without_kb_repeat_delay(pcd):
    rotating = False

    vis = o3d.visualization.VisualizerWithKeyCallback()

    def key_action_callback(vis, action, mods):
        nonlocal rotating
        print(action)
        if action == 1:  # key down
            rotating = True
        elif action == 0:  # key up
            rotating = False
        elif action == 2:  # key repeat
            pass
        return True

    def animation_callback(vis):
        nonlocal rotating
        if rotating:
            ctr = vis.get_view_control()
            ctr.rotate(10.0, 0.0)

    # key_action_callback will be triggered when there's a keyboard press, release or repeat event
    vis.register_key_action_callback(32, key_action_callback)  # space

    # animation_callback is always repeatedly called by the visualizer
    vis.register_animation_callback(animation_callback)

    vis.create_window()
    vis.add_geometry(pcd)
    vis.run()


def custom_mouse_action(pcd):

    vis = o3d.visualization.VisualizerWithKeyCallback()
    buttons = ['left', 'right', 'middle']
    actions = ['up', 'down']
    mods_name = ['shift', 'ctrl', 'alt', 'cmd']

    def on_key_action(vis, action, mods):
        print("on_key_action", action, mods)

    vis.register_key_action_callback(ord("A"), on_key_action)

    def on_mouse_move(vis, x, y):
        print(f"on_mouse_move({x:.2f}, {y:.2f})")

    def on_mouse_scroll(vis, x, y):
        print(f"on_mouse_scroll({x:.2f}, {y:.2f})")

    def on_mouse_button(vis, button, action, mods):
        pressed_mods = " ".join(
            [mods_name[i] for i in range(4) if mods & (1 << i)])
        print(f"on_mouse_button: {buttons[button]}, {actions[action]}, " +
              pressed_mods)

    vis.register_mouse_move_callback(on_mouse_move)
    vis.register_mouse_scroll_callback(on_mouse_scroll)
    vis.register_mouse_button_callback(on_mouse_button)

    vis.create_window()
    vis.add_geometry(pcd)
    vis.run()


if __name__ == "__main__":
    ply_data = o3d.data.PLYPointCloud()
    pcd = o3d.io.read_point_cloud(ply_data.path)

    print("Customized visualization with smooth key action "
          "(without keyboard repeat delay). Press the space-bar.")
    custom_key_action_without_kb_repeat_delay(pcd)
    print("Customized visualization with mouse action.")
    custom_mouse_action(pcd)