Визуализация open3d: можем ли мы получить геометрические данные из визуализатора

Open3D (www.open3d.org) - отличная библиотека обработки 3D-данных, которая также обеспечивает функцию визуализации спуска.

Я пытаюсь создать визуализатор, который может выборочно отображать геометрические фигуры с помощью клавиатуры. Например, после того, как облака точек были показаны в окне, когда я нажимаю кнопку A, я хочу создать прямоугольник и поместить его в облака точек. Это несложно реализовать с помощью функции draw_gemetries_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. Поскольку функция обратного вызова принимает только один аргумент, естественный способ получить объект, который я хочу удалить, - это получить геометрические данные из визуализатора. Но в визуализаторе нет функции, поддерживающей эту функциональность.

0 ответов

Другие вопросы по тегам