Маскирующие работы на основе скаляров, а не когда вы установили сплошной цвет. Попробуйте это вместо:
import numpy as np
m = mesh(X,Y,Z, mask=active_region, opacity=0.5)
m.mlab_source = ones_like(X)
Маскировка работает, устанавливая скаляр в Nan, где маскируется. Нарисованная геометрия такая же, но маскированные области не отображаются, если скаляры являются Нанскими. не
В любом случае, здесь полный рабочий пример для справки:
import numpy as np
phi, theta = np.mgrid[0:np.pi:100j, 0:2 * np.pi:100j]
x = np.sin(phi) * np.cos(theta)
y = np.sin(phi) * np.sin(theta)
z = np.cos(phi)
mask = np.zeros_like(x).astype(bool)
mask[::5] = True
mask[:,::5] = True
from mayavi import mlab
mlab.mesh(x, y, z, scalars=z, mask=mask)
Заметим, что вам не нужно, чтобы обеспечить скаляры, его только, что если вы предоставите явный цвет не будет никакого маскировки. Также скаляры здесь просто установлены на z
, вы можете использовать любой совместимый массив, даже постоянное значение через ones_like(X)
.
Оказывается, что если у вас есть постоянный скаляр ВТК 5,6, кажется, не правильно маскировать свои очки, если у вас есть VTK 5.10 вы можете сделать следующее:
m = mlab.mesh(x, y, z, scalars=scalars, mask=mask)
m.module_manager.scalar_lut_manager.lut.nan_color = 0, 0, 0, 0
В противном случае, используйте scalar=z
и настроить постоянная таблица поиска цветов. Вы можете создать свой собственный, щелкнув «цвета и легенды» в редакторе конвейера, затем нажмите «редактор запуска lut». Для того, чтобы использовать эту пользовательскую цветовую карту, выполните следующие действия:
scalars = np.ones_like(x)
m = mlab.mesh(x, y, z, scalars=scalars, mask=mask)
m.module_manager.scalar_lut_manager.lut_mode = 'file'
m.module_manager.scalar_lut_manager.file_name = '/path/to/your.lut'
Если вы не хотите возиться с редактором LUT и все, что malarky, вот это чистая NumPy версия, что вы можете сделать прямо из Python.
m = mlab.mesh(x, y, z, scalars=z, mask=mask)
# Lets make some colors:
# this is an array of (R, G, B, A) values (each in range 0-255), there should
# be at least 2 colors in the array.
colors = np.zeros((2, 4), dtype='uint8')
# Set the green value to constant.
colors[:,1] = 255
# the alpha value to fully opaque.
colors[:,3] = 255
# Now use this colormap.
m.module_manager.scalar_lut_manager.lut.table = colors
Обратите внимание, что массив цветов должен иметь как минимум 2 цвета и может иметь столько, сколько вам захочется. Для постоянного цвета 2 должно быть достаточно.
HTH.
Хм, это должно было быть сделано. Что произойдет, если все значения True или False? – M4rtini