python 科学计算三维可视化笔记 第二周 基础实战
内容来自中国大学MOOC,北京理工大学,python数据分析与展示课程,侵删。 如有错误,烦请指出。
python 科学计算三维可视化笔记 第二周 基础实战
一、实例1:标量数据可视化
等值面过滤器 tvtk.ContourFilter()  标量数据可视化代码:
'''标量数据可视化'''
from tvtk.api import tvtk
from tvtkfunc import ivtk_scene, event_loop
plot3d = tvtk.MultiBlockPLOT3DReader(
xyz_file_name = "combxyz.bin",
q_file_name = "combq.bin",
scalar_function_number = 100,
vector_function_number = 200
)
plot3d.update()
grid = plot3d.output.get_block(0)
con = tvtk.ContourFilter()
con.set_input_data(grid)
con.generate_values(10, grid.point_data.scalars.range)
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()
 等值面个数可以自定义:  可以为每个等值面指定值: 
二、实例2:矢量数据可视化
使用 tvtk.Glyph3D() 引入符号化技术 使用 tvtk.MaskPoints() 进行降采样
矢量数据可视化代码:
'''矢量数据可视化'''
from tvtk.api import tvtk
from tvtkfunc import ivtk_scene, event_loop
plot3d = tvtk.MultiBlockPLOT3DReader(
xyz_file_name = "combxyz.bin",
q_file_name = "combq.bin",
scalar_function_number = 100,
vector_function_number = 200
)
plot3d.update()
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 = tvtk.Glyph3D(input_connection=mask.output_port,
scale_factor=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()
 将glyph_source = tvtk.ArrowSource() 替换为 glyph_source = tvtk.ConeSource() , 缩放系数变为 scale_factor=2 ,可以生成由圆锥表示的矢量数据:

三、实例3:空间轮廓线可视化
使用 tvtk.StructuredGridOutlineFilter() 计算 PolyData 对象的外边框(轮廓线)
空间轮廓线可视化代码:
'''实例3:空间轮廓线可视化'''
from tvtk.api import tvtk
from tvtk.common import configure_input
from tvtkfunc import ivtk_scene, event_loop
plot3d = tvtk.MultiBlockPLOT3DReader(
xyz_file_name = "combxyz.bin",
q_file_name = "combq.bin",
scalar_function_number = 100,
vector_function_number = 200
)
plot3d.update()
grid = plot3d.output.get_block(0)
outline = tvtk.StructuredGridOutlineFilter()
configure_input(outline, grid)
m = tvtk.PolyDataMapper(input_connection=outline.output_port)
a = tvtk.Actor(mapper=m)
a.property.color = 0.3, 0.3, 0.3
win = ivtk_scene(a)
win.scene.isometric_view()
event_loop()

|