VTK学习笔记3.1-3

版权声明:转载请告知征得同意。 https://blog.csdn.net/qq_42731466/article/details/81304726

整理于 https://www.icourse163.org/course/BIT-1001871001(Python科学计算三维可视化)

TVTK可视化实例

标量可视化、矢量可视化、轮廓可视化

利用ContourFilter()等值面过滤器

1.标量可视化

tvtk.ContourFilter()

方法及说明
generate_values() 设定n条等值线,一般用于重新绘制等值线
set_value() 设定一条等值线的值,一般用于覆盖某条等值线或增加一条等值线

from tvtk.api import tvtk
def ivtk_scene(actors):
    from tvtk.tools import ivtk
    win = ivtk.IVTKWithCrustAndBrowser()    #创建crust窗口
    win.open()
    win.scene.add_actor(actors)
    dialog = win.control.centralWidget().widget(0).widget(0)  #窗口错误修正
    from pyface.qt import QtCore
    dialog.setWindowFlags(QtCore.Qt.WindowFlags(0x00000000))
    dialog.show()
    return win
def event_loop():
    from pyface.api import GUI
    gui = GUI()
    gui.start_event_loop()
plot3d = tvtk.MultiBlockPLOT3DReader(
    xyz_file_name = 'combxyz.bin',#网格文件
    q_file_name = 'combq.bin',#空气动力学结果文件
    scalar_function_number = 100,#设置标量数据数量
    vector_function_number = 200
)#读入Plot3D数据
plot3d.update()#让plot.D计算其输出数据
grid = plot3d.output.get_block(0)   #获取读入的数据集对象
con = tvtk.ContourFilter()      #创建等值面对象
con.set_input_data(grid)        #绑定网格
con.generate_values(10,grid.point_data.scalars.range)
#创建10个等值面,等值面的取值范围由scalars.range决定,等值面的颜色也是由scalars数组来决定
#此处未设置颜色映射表,选用默认映射表,最小值映射红色,最大值为蓝色

#下面还需要给标量范围属性进行赋值
m = tvtk.PolyDataMapper(scalar_range = grid.point_data.scalars.range,
                        input_connection = con.output_port)
a = tvtk.Actor(mapper = m)
a.property.opacity = 0.5    #透明度

#窗口绘制
win = ivtk_scene(a)
win.scene.isometric_view()
event_loop()

这里写图片描述

除了用generate_values()之外还可以用set_value(),指定每一个等值面,第一个参数指定第几个等值面,第二个参数指定等值面的值

2.矢量可视化

矢量数据既有大小又有方向,用箭头表示较好
tvtk.Glyph3D()符号化技术
这里写图片描述
一般来说,矢量数据过于密集,为了绘制得更快,采用

tvtk.MaskPoints()

代码如下

from tvtk.api import tvtk
# from tvtkfunc import ivtk_scene,event_loop
def ivtk_scene(actors):
    from tvtk.tools import ivtk
    win = ivtk.IVTKWithCrustAndBrowser()    #创建crust窗口
    win.open()
    win.scene.add_actor(actors)
    dialog = win.control.centralWidget().widget(0).widget(0)  #窗口错误修正
    from pyface.qt import QtCore
    dialog.setWindowFlags(QtCore.Qt.WindowFlags(0x00000000))
    dialog.show()
    return win
def event_loop():
    from pyface.api import GUI
    gui = GUI()
    gui.start_event_loop()
plot3d = tvtk.MultiBlockPLOT3DReader(
    xyz_file_name = 'combxyz.bin',
    q_file_name = 'combq.bin',
    scalar_function_number = 100,
    vector_function_number = 200
)   #读入plot3d数据
plot3d.update()                                     #让plot3d计算输出数据
grid = plot3d.output.get_block(0)                   #获取读入的数据集对象
mask = tvtk.MaskPoints(random_mode = True,on_ratio = 50)    #随机取样开关,取样频率
mask.set_input_data(grid)
glyph_source = tvtk.ArrowSource()   #创建表示箭头的数据集
# glyph_source = tvtk.ConeSource()    #修改向量箭头表示为圆锥表示

glyph = tvtk.Glyph3D(
    input_connection = mask.output_port,
    scale_factor = 2        #放缩系数 ConeSource() 降低为2,ArrowSource()为4
)
glyph.set_source_connection(glyph_source.output_port)
m = tvtk.PolyDataMapper(
    scalar_range = grid.point_data.scalars.range,
    input_connection = glyph.output_port
)
a = tvtk.Actor(mapper = m)

#窗口绘制
win = ivtk_scene(a)
win.scene.isometric_view()
event_loop()

这里写图片描述

这里写图片描述

3.外轮廓

扫描二维码关注公众号,回复: 3480488 查看本文章

tvtk.StructuredGridOutlineFilter()

举例:

#计算PolyData对象的外边框
from tvtk.common import configure_input
def ivtk_scene(actors):
    from tvtk.tools import ivtk
    win = ivtk.IVTKWithCrustAndBrowser()    #创建crust窗口
    win.open()
    win.scene.add_actor(actors)
    dialog = win.control.centralWidget().widget(0).widget(0)  #窗口错误修正
    from pyface.qt import QtCore
    dialog.setWindowFlags(QtCore.Qt.WindowFlags(0x00000000))
    dialog.show()
    return win
def event_loop():
    from pyface.api import GUI
    gui = GUI()
    gui.start_event_loop()
plot3d = tvtk.MultiBlockPLOT3DReader(
    xyz_file_name = 'combxyz.bin',
    q_file_name = 'combq.bin',
    scalar_function_number = 100,
    vector_function_number = 200
)   #读入plot3d数据
plot3d.update()                                     #让plot3d计算输出数据
grid = plot3d.output.get_block(0)                   #获取读入的数据集对象
outline = tvtk.StructuredGridOutlineFilter()        #计算表示外边框的PolyData对象
configure_input(outline,grid)   #调用tvtk.common.configure_input()
m = tvtk.PolyDataMapper(
    input_connection = outline.output_port
)
a = tvtk.Actor(mapper = m)
# a.property.opacity = 0.5        #透明度
a.property.color = 0.3,0.3,0.3
#窗口绘制
win = ivtk_scene(a)
win.scene.isometric_view()
event_loop()

这里写图片描述

猜你喜欢

转载自blog.csdn.net/qq_42731466/article/details/81304726