Open3D (www.open3d.org) - это отличная библиотека для обработки 3D-данных, которая также предоставляет функцию визуализации спуска.
Я пытаюсь создать визуализатор, который может отображать геометрические параметры выборочно с помощью клавиатуры.Например, после того, как облака точек были показаны в окне, когда я нажимаю кнопку A, я хочу создать поле и поместить его в облака точек.Это не сложно реализовать с помощью функции draw3ge_ries_with_key_callbacks open3d.Например:
def custom_draw_geometry_with_key_callback(self, key_to_callback, *reshource):
obj_list = []
if reshource:
for obj in reshource:
obj.transform([[1, 0, 0, 0], [0, -1, 0, 0], [0, 0, -1, 0], [0, 0, 0, 1]])
obj_list.append(obj)
def rotate_view(vis):
ctr = vis.get_view_control()
ctr.rotate(10.0, 0.0)
return False
def add_box(vis):
sphere = o3d.geometry.create_mesh_sphere(100)
vis.add_geometry(sphere)
return False
key_to_callback = {}
key_to_callback[ord("R")] = rotate_view
key_to_callback[ord("A")] = add_box
if reshource:
o3d.visualization.draw_geometries_with_key_callbacks(obj_list, key_to_callback)
В этом примере я добавляю сферу при нажатии кнопки A. Однако, если я хочу удалить это поле, например, с помощью кнопки D, это очень сложно для меня.Я попробовал два решения, но не удалось:
Решение 1: Добавить функцию обратного вызова с аргументами, например:
def delete_box(vis, box_obj):
vis.remove_geometry(box_obj)
Решение 2: Поскольку функция обратного вызова принимает только один аргументзатем естественным способом получить объект, который я хочу удалить, является получение геометрических объектов из визуализатора.Но в визуализаторе нет функции, поддерживающей эту функцию.