Как напрямую установить цвета RGB / RGBA в майави

У меня есть объект mayavi с несколькими вершинами, и я хотел бы установить значения RGB или RGBA непосредственно для этих вершин, вместо того, чтобы ограничиться одной цветовой палитрой со скалярами. Как это можно сделать?

One Solution collect form web for “Как напрямую установить цвета RGB / RGBA в майави”

Насколько мне известно, для этого нет документации, но я нашел способ сделать это с минимальным количеством взлома. Вот минимальный пример, который может потребовать небольшого переделания для разных источников:

from tvtk.api import tvtk; from mayavi import mlab; import numpy as np x,y,z=np.random.random((3,nr_points)) #some data colors=np.random.randint(256,size=(100,3)) #some RGB or RGBA colors pts=mlab.points3d(x,y,z) sc=tvtk.UnsignedCharArray() sc.from_array(colors) pts.mlab_source.dataset.point_data.scalars=sc pts.mlab_source.dataset.modified() 

Это также похоже на то, что иногда вам нужно убедиться, что картинка указывает на правильную вещь. Это не обязательно для приведенного выше примера, но это может быть для других источников

 pts.actor.mapper.input=pts.mlab_source.dataset 

В какой-то момент API майави должен быть исправлен лучше, поэтому для всех функций конвейера есть API, который просто делает это, но это оказывается довольно сложным и широким набором изменений, которые у меня сейчас нет Конец.

Изменить: Пользователь eqzx отправил ответ на другой вопрос ( укажите абсолютный цвет для 3D-точек в MayaVi ), который может быть проще, особенно для некоторых типов источников, которые трудно получить для работы с tvtk.UnsignedCharArray .

Его идея – создать LUT, охватывающий весь диапазон значений 256x256x256 RGB. Обратите внимание, что в этом LUT имеется 16 777 216 записей. Который, если вы хотите использовать его во многих объектах vtk, может потратить немало памяти, если вы не будете осторожны.

 #create direct grid as 256**3 x 4 array def create_8bit_rgb_lut(): xl = numpy.mgrid[0:256, 0:256, 0:256] lut = numpy.vstack((xl[0].reshape(1, 256**3), xl[1].reshape(1, 256**3), xl[2].reshape(1, 256**3), 255 * numpy.ones((1, 256**3)))).T return lut.astype('int32') # indexing function to above grid def rgb_2_scalar_idx(r, g, b): return 256**2 *r + 256 * g + b #N x 3 colors colors = numpy.array([_.color for _ in points]) #N scalars scalars = numpy.zeros((colors.shape[0],)) for (kp_idx, kp_c) in enumerate(colors): scalars[kp_idx] = rgb_2_scalar_idx(kp_c[0], kp_c[1], kp_c[2]) rgb_lut = create_8bit_rgb_lut() points_mlab = mayavi.mlab.points3d(x, y, z keypoint_scalars, mode = 'point') #magic to modify lookup table points_mlab.module_manager.scalar_lut_manager.lut._vtk_obj.SetTableRange(0, rgb_lut.shape[0]) points_mlab.module_manager.scalar_lut_manager.lut.number_of_colors = rgb_lut.shape[0] points_mlab.module_manager.scalar_lut_manager.lut.table = rgb_lut 
  • Mayavi не работает из Spyder: жалуется на «ValueError: API QString» ... »
  • Анимация сюжета mayavi points3d
  • Функция построения трех измерений по заданной области с помощью matplotlib
  • Измените источники данных mlab quiver3d & surf без очистки фигуры в скриптах признаков
  • Ошибка TVTK в Mayavi (Python)
  • Как подключиться / подключить / сгруппировать несколько объектов в Mayavi2
  • Использование Mayavi для создания 3D-графиков с осями типа Matplotlib
  • ValueError: невозможно установить набор инструментов для wx, поскольку он уже установлен на qt4
  • Работает ли свойство текста шрифта Mayavi «Размер шрифта»?
  • Сценарий Python не продолжается до закрытия окна сцены Mayavi
  • майави в питоне Анаконда
  • Python - лучший язык программирования в мире.