内容来自中国大学MOOC,北京理工大学,python数据分析与展示课程,侵删。
如有错误,烦请指出。
Windows 10 64 位 + python 3.9.12
建立虚拟环境 conda create -n 3dvis python=3.9.12
虚拟环境中依次:
前四个库的 下载地址
虚拟环境中启动 idle:cmd 中依次输入 activate 3dvis
,python -m idlelib.idle
虚拟环境中下载 jupyter notebook:cmd 中输入 pip install jupyter
虚拟环境中启动 jupyter notebook:cmd 中输入 jupyter notebook
s = tvtk.CubeSource(traits)
CubeSource 对象的属性如下:
一个 CubeSource 对象实例:
CubeSource 对象的方法如下:
from tvtk.api import tvtk
# 创建一个长方体数据源,并且同时设置其长宽高
s = tvtk.CubeSource(x_length=1.0, y_length=2.0, z_length=3.0)
# 使用PolyDataMapper将数据转换为图形数据
m = tvtk.PolyDataMapper(input_connection=s.output_port)
# 创建一个Actor
a = tvtk.Actor(mapper=m)
# 创建一个Renderer,将Actor添加进去
r = tvtk.Renderer(background=(0, 0, 0))
r.add_actor(a)
# 创建一个RenderWindow(窗口),将Renderer添加进去
w = tvtk.RenderWindow(size=(300,300))
w.add_renderer(r)
# 创建一个RenderWindowInteractor(窗口的交互工具)
i = tvtk.RenderWindowInteractor(render_window=w)
# 开启交互
i.initialize()
i.start()
管线技术(Pipeline,流水线):
可视化管线中的 TVTK 对象:
图形管线中的 TVTK 对象:
from tvtk.api import ivtk
使用 itvk 显示立方体,修复窗口显示错误,并用函数封装,存为 tvtkfunc.py 文件:
def ivtk_scene(actors):
from tvtk.tools import ivtk
#创建一个带Crust(Python Shell)的窗口
win = ivtk.IVTKWithCrustAndBrowser()
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()
在写 cube_ivtk.py 程序时,直接调用:
from tvtk.api import tvtk
from tvtkfunc import ivtk_scene,event_loop
s = tvtk.CubeSource(x_length=1.0, y_length=2.0, z_length=3.0)
m = tvtk.PolyDataMapper(input_connection=s.output_port)
a = tvtk.Actor(mapper=m)
win = ivtk_scene(a)
win.scene.isometric_view()
event_loop()
结果如下:
在下方命令行输入
print(scene.renderer.actors[0].mapper.input.points.to_array())
输出构成长方体顶点的三维坐标:
双击左侧 OpenGLCamera,可弹出照相机菜单;
双击左侧 Actor,可弹出实体 Actor 菜单:
照相机包含如下属性:
点击工具栏设置按钮,出现属性菜单,Scene 为场景,Lights 为光源:
(1) Imagedata 数据集
表示二维或三维图像的数据结构:
使用 .get_point()
获得点的坐标:
(2) RectilinearGrid 数据集
间距不均匀的网格,所有的点都在正交的网格上:
(3) StructuredGrid 数据集
创建任意形状的网格,需要指定点的坐标
(4) Polydata 数据集
由一系列的点、点之间的联系以及由点构成的多边形组成
(1) TVTK 模型读取
s = tvtk.STLReader(file_name = 'stl文件')
一个实例:
from tvtk.api import tvtk
from tvtkfunc import ivtk_scene,event_loop
s = tvtk.STLReader(file_name = "python.stl")
m = tvtk.PolyDataMapper(input_connection = s.output_port)
a = tvtk.Actor(mapper = m)
win = ivtk_scene(a)
win.scene.isometric_view()
event_loop()
(2) TVTK MultiBlock 数据读取
一个实例:
from tvtk.api import tvtk
# 读入数据
def read_data():
plot3d = tvtk.MultiBlockPLOT3DReader(
xyz_file_name = "combxyz.bin", # 网格文件
q_file_name = "combq.bin", # 空气动力学结果文件
scalar_function_number = 100, # 设置标量数据数量
vector_function_numbe r= 200 # 设置矢量数据数量
)
plot3d.update()
return plot3d
plot3d = read_data()
grid = plot3d.output.get_block(0)