визуализация open3d: можем ли мы получить геометрию из визуализатора - PullRequest
0 голосов
/ 19 сентября 2019

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

...