python获取鼠标选取的内容_Python三维可视化:鼠标选取交互操作

版权声明:以上文章中所选用的图片及文字来源于网络以及用户投稿,由于未联系到知识产权人或未发现有关知识产权的登记,如有知识产权人并不愿意我们使用,如果有侵权请立即联系:[email protected],我们立即下架或删除。

简介:鼠标选取操作

鼠标选取

l 选取一个物体,查看数据

l 选取物体上一点,查看数据

鼠标选取

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 对象

选取红色小球问题分析

l 建立一个figure

l 随机生成红、白小球

l 初始化红色小球选取外框

l 鼠标选取任意红色小球,外框移

动到该小球上(callback)

l 建立on_mouse_pick()响应机制

程序框架

# 场景初始化

figure = mlab.gcf()

# 用mlab.points3d建立红色和白色小球的集合

#

… …

# 处理选取事件

def picker_callback(picker)

# 建立响应机制

picker = figure.on_mouse_pick(picker_callback)

mlab.show()

# 用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)

选取框初始化建立

#当选取事件发生时,调用此函数

def picker_callback(picker):

if picker.actor in red_glyphs.actor.actors:

# 计算哪个小球被选取

# 确定该小球的ID

# 找到与此红色小球相关的坐标

# 将选取外框移到小球上

“选取”回调函数的结构

如何计算哪小球被选取

glyph_points =

red_glyphs.glyph.glyph_source.glyph_source.output.points.to_array()

glyph_points:获取一个小球的顶点坐标列表

如何计算哪小球被选取

def picker_callback(picker):

if picker.actor in red_glyphs.actor.actors:

# 计算被选取的小球的ID号

point_id = int(picker.point_id / glyph_points.shape[0])

Picker对像选取的顶点ID 每一个小球顶点的总数

如何计算哪小球被选取

def picker_callback(picker):

if picker.actor in red_glyphs.actor.actors:

# 计算哪个小球被选取

point_id = int(picker.point_id / glyph_points.shape[0])

if 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()

程序的运行结果

替换视频 SV05V04-P15

程序框架的优化

程序运行两个问题:

l 小球初始速度太慢

l 鼠标选取不精确

程序框架的优化

# 场景初始化

figure = mlab.gcf()

figure.scene.disable_render = True

# 用mlab.points3d建立红色和白色小球的集合

… …

figure.scene.disable_render = False

# 处理选取事件

def picker_callback(picker)

# 建立响应机制

picker = figure.on_mouse_pick(picker_callback)

mlab.show()

所有物体全部建立完再绘制!

程序框架的优化

# 场景初始化

figure = mlab.gcf()

figure.scene.disable_render = True

# 用mlab.points3d建立红色和白色小球的集合

… …

figure.scene.disable_render = False

# 处理选取事件

def picker_callback(picker)

# 建立响应机制

picker = figure.on_mouse_pick(picker_callback)

Picker.tolerance = 0.01

mlab.show()

设置tolerance参数,提高选取精度! 更多>>

你可能感兴趣的:(python获取鼠标选取的内容)