Mayavi - взаимодействие мыши и сюжетная сцена с разных точек зрения - PullRequest
1 голос
/ 25 марта 2019

В настоящее время я изо всех сил пытаюсь понять, как правильно взаимодействовать со сценой, созданной на языке майави.

У меня есть лидарное облако точек, которое отображается функцией points3d (), теперь я дополнительно установил ограничивающую рамку вокруг автомобиля между облаками точек, и я хотел бы изменить цвет точек внутри окно, как только я наведу курсор мыши на ограничивающую рамку. Можете ли вы сказать мне, как я могу просто выбрать точки внутри bbox и изменить их цвет?

И мой второй вопрос: как я могу одновременно показывать одну и ту же сцену из облака точек в виде 3D и в виде птицы?

Большое спасибо:]

1 Ответ

0 голосов
/ 26 марта 2019

Я нашел решение проблемы цвета - я не знаю, является ли это наилучшей практикой. Но мне все еще нужна помощь для определения точек внутри ограничительной рамки. Я также хотел бы создать графический интерфейс, который позволяет пользователю изменять размер и ориентацию ограничительной рамки. [но это другая тема]

import numpy as np
from mayavi.mlab import draw, points3d
from tvtk.api import tvtk

# Primitives
N = 3000 # Number of points
ones = np.ones(N) #np.hstack((np.tile(np.array([1]), int(N/2)).T,  np.tile(np.array([4000]),  int(N/2)).T))
scalars = ones #np.arange(N)  # Key point: set an integer for each point

# Define color table (including alpha), which must be uint8 and [0,255]
colors = np.vstack((np.tile(np.array([[255],[255],[0]]), int(N/2)).T,  np.tile(np.array([[0],[0],[255]]),  int(N/2)).T))
# Define coordinates and points
x, y, z = (np.random.random((N, 3))*255).astype(np.uint8).T # Assign x, y, z values to match color
pts = points3d(x, y, z, scale_factor=10) # Create points
#pts.glyph.color_mode = 'color_by_vector' # Color by scalar
# Set look-up table and redraw
#pts.module_manager.scalar_lut_manager.lut.table = colors
pts.glyph.scale_mode = 'scale_by_vector'
sc=tvtk.UnsignedCharArray()
sc.from_array(colors)
pts.mlab_source.dataset.point_data.scalars = sc
draw()
...