Vtk установить цвета сразу без петли - PullRequest
0 голосов
/ 01 мая 2020

Я пытаюсь установить цвета для точек, но без l oop InsertNextTuple3(). Ndarray np_rgb_array имеет размер nx3.

def set_threshold(self, new_value):

    np_rgb_array = (np.ones((self.points.shape))*new_value).astype(int)

    rgb2 = npsup.numpy_to_vtk(np_rgb_array ,deep=1)
    rgb2.SetName("Colors")

    self.vtk_vertex.GetPointData().SetScalars(rgb2)
    self.mapper.SetInputData(self.vtk_vertex)
    self.mapper.Modified()
    self.actor.GetProperty().Modified()
    self.render_window.Render()

Эта функция вызывается ползунком pyqt, и диапазон составляет 0-255 new_value, когда я запускаю и изменяю ползунок в первый раз, когда цвет всех точки меняются на синий, а затем ничего не меняется ... У меня есть эта функция, работающая, но с l oop и InsertNextTuple3

Любая помощь будет приветствоваться!

1 Ответ

0 голосов
/ 01 мая 2020

Для того, чтобы он работал rgb2 необходимо было иметь массив без знака типа vtk. Поэтому я в основном создал новый массив rgb3, который имеет правильный тип, и сделал .ShallowCopy() данные из rgb2, который является массивом двойного типа.

def set_threshold(self, new_value):

    rgb3 = vtk.vtkUnsignedCharArray()
    rgb3.SetNumberOfComponents(3)
    rgb3.SetName("Colors")

    test = np.ones((self.points.shape))*new_value
    vtk_test = npsup.numpy_to_vtk(test,deep=1)
    vtk_test.SetName("Colors")

    rgb3.ShallowCopy(vtk_test)
    self.vtk_vertex.GetPointData().SetScalars(rgb3)

    self.mapper.SetInputData(self.vtk_vertex)
    self.mapper.Modified()
    self.actor.GetProperty().Modified()
    self.render_window.Render()

Также рендеринг работает намного быстрее!

...