Mlab - 改变物体外观及鼠标选取操作

Python科学计算三维可视化
黄天羽嵩天

Mlab 基础

MLab reference

改变物体的外观

改变颜色
  • colormap 定义的颜色,也叫 LUT(Look Up Table)

  • 常见的 colormaps
    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 对象
  • 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参数,提高选取精度!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值