Vtk 一次性设置颜色,无需循环

问题描述 投票:0回答:1

我尝试将颜色设置为点,但没有循环。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的slider调用,范围为0-255。new_value当我第一次运行并改变滑块时,所有点的颜色都变成了蓝色,然后什么都没变...... 我有这个功能的工作,但与循环和 InsertNextTuple3

任何帮助将是欢迎的

python numpy pyqt5 vtk
1个回答
0
投票

为了让它工作 rgb2 是需要Unsigned char类型的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()

另外,重新渲染的速度也快得多

© www.soinside.com 2019 - 2024. All rights reserved.