mayavi 用一种颜色给所有形状上色,除了 "some" 个顶点

mayavi color all the shape by one color except "some" vertices

为了指出我创建的形状对应关系,我想将 3d 网格着色为灰色,除了 一些 点(例如 1 点)为红色。 这是我当前的代码,不幸的是,它把整个图形涂成蓝色,最后一点涂成红色。


还有我的代码

mlab.figure()
        part_color = np.full((self.f.shape[0]),0.98)
        part_color[point_idx] = 1
        part_plot = mlab.triangular_mesh(self.part.vx, self.part.vy, self.part.vz, self.part.triv,
                                         scalars=part_color[:, np.newaxis])

这是我的最佳目标(忽略其余数字,我只想在某些点周围有一个红球)

您必须为此修改查找 Table (LUT)。

我采用了 "LUT modification" example 并根据您的需要对其进行了调整(最高值为红色,其他均为灰色):

# Create some data
import numpy as np

x, y = np.mgrid[-10:10:200j, -10:10:200j]
z = 100 * np.sin(x * y) / (x * y)

# Visualize it with mlab.surf
from mayavi import mlab
mlab.figure(bgcolor=(1, 1, 1))
surf = mlab.surf(z, colormap='cool')

# Retrieve the LUT of the surf object.
lut = surf.module_manager.scalar_lut_manager.lut.table.to_array()

# The lut is a 255x4 array, with the columns representing RGBA
# (red, green, blue, alpha) coded with integers going from 0 to 255.

# We modify the alpha channel to add a transparency gradient
lut[:] = 255/2 # all grey
# red
lut[-1,0] = 255
lut[-1,1] = 0
lut[-1,2] = 0

lut[:, -1] = 255 # 100% translucency

# and finally we put this LUT back in the surface object. We could have
# added any 255*4 array rather than modifying an existing LUT.
surf.module_manager.scalar_lut_manager.lut.table = lut

# We need to force update of the figure now that we have changed the LUT.
mlab.draw()
mlab.view(40, 85)