Mlab 基础
改变物体的外观
改变颜色
colormap 定义的颜色,也叫 LUT(Look Up Table)
常见的 colormaps
import numpy as np from mayavi import mlab #建立数据 x, y = np.mgrid[-10:10:200j, -10:10:200j] z = 100 * np.sin(x * y) / (x * y) # 对数据进行可视化 mlab.figure(bgcolor=(1, 1, 1)) surf = mlab.surf(z, colormap='cool') # 更新视图并显示出来 mlab.show()
from mayavi import mlab import numpy as np x, y = np.mgrid[-10:10:200j, -10:10:200j] z = 100 * np.sin(x*y) / (x*y) mlab.figure(bgcolor=(1,1,1)) surf = mlab.surf(z, colormap = 'cool') # 访问surf对象的LUT # LUT是一个255*4的数组,列向量表示RGBA,每个值的范围是0~255 lut = surf.module_manager.scalar_lut_manager.lut.table.to_array() # 增加透明度,修改alpha通道(透明度) lut[:, -1] = np.linspace(0, 255, 256) surf.module_manager.scalar_lut_manager.lut.table = lut mlab.show()
鼠标选取操作
on_mouse_pick(callback, type=‘point’,Button=‘Left’,Remove=False)
- Type:
’point’,’cell’or ‘world’
- Button:
’Left’,’Middle’or ‘Right’
- Remove: 如果值为True,则callback函数不起作用
- 返回:一个 vtk picker 对象
- Type:
import numpy as np from mayavi import mlab ######场景初始化###### figure = mlab.gcf() figure.scene.disable_render = True # 用mlab.points3d建立红色和白色小球的集合 x1, y1, z1 = np.random.random((3, 10)) red_glyphs = mlab.points3d(x1, y1, z1, color=(1, 0, 0), resolution=10) x2, y2, z2 = np.random.random((3, 10)) white_glyphs = mlab.points3d(x2, y2, z2, color=(0.9, 0.9, 0.9), resolution=10) # 绘制选取框,并放在第一个小球上 outline = mlab.outline(line_width=3) outline.outline_mode = 'cornered' outline.bounds = (x1[0] - 0.1, x1[0] + 0.1, y1[0] - 0.1, y1[0] + 0.1, z1[0] - 0.1, z1[0] + 0.1) figure.scene.disable_render = False ######处理选取事件##### # 获取构成一个红色小球的顶点列表 glyph_points = red_glyphs.glyph.glyph_source.glyph_source.output.points.to_array() # 当选取事件发生时调用此函数 def picker_callback(picker): if picker.actor in red_glyphs.actor.actors: # 计算哪个小球被选取 point_id = int(picker.point_id / glyph_points.shape[0]) # int向下取整 if point_id != -1:# 如果没有小球被选取,则point_id = -1 # 找到与此红色小球相关的坐标 x, y, z = x1[point_id], y1[point_id], z1[point_id] # 将外框移到小球上 outline.bounds = (x - 0.1, x + 0.1, y - 0.1, y + 0.1, z - 0.1, z + 0.1) picker = figure.on_mouse_pick(picker_callback) mlab.title('Click on red balls') mlab.show()
picker.tolerance = 0.01 # 设置tolerance参数,提高选取精度!