版权声明:以上文章中所选用的图片及文字来源于网络以及用户投稿,由于未联系到知识产权人或未发现有关知识产权的登记,如有知识产权人并不愿意我们使用,如果有侵权请立即联系:[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参数,提高选取精度! 更多>>