跳转至

界面嵌入python控制台

约 526 个字 40 行代码 8 张图片 预计阅读时间 2 分钟

脚本名字:PyVistaConsole.py。

通过在界面中嵌入python控制台,可以实现用脚本操作视图中的图形,更有利于自动化处理。效果如下:

界面预览
Figure 1: 界面预览

内置方法

在控制台上可以使用pyvista的内置方法进行模型操作,比如:添加场变量、查询模型信息等。每次运行命令时按下内置的快捷键:Shift+Enter,即可运行。

add_mesh

在使用pyvista进行绘图时,常常在最后使用.show将图形绘制在pyvista产生的窗口内,比如:

import pyvista as pv
mesh = pv.Cube()
another_mesh = pv.Sphere()
pl = pv.Plotter()
actor = pl.add_mesh(
    mesh, color='red', style='wireframe', line_width=4
)
actor = pl.add_mesh(another_mesh, color='blue')
pl.show()

然而,在界面设计时,如果希望将图形绘制在我们自己设计的界面中,就不能使用 .show 方法。如果继续使用该方法,图形将会绘制在独立于我们设计界面的窗口中(由 PyVista 内部生成)。

因此,内置一个add_mesh,用于初次绘制pyvista的图形,使之可以绘制在我们自己设计的界面中,如开头所示的效果,在使用时与pyvista.plotter.add_mesh里面的参数控制是一致的。

from pyvista import examples 
mesh = examples.download_dragon()
mesh['scalars'] = mesh.points[:, 1]
add_mesh(mesh, cmap = "plasma")

在我们设计的界面控制台中,只需上面的命令,就可以绘图了,不需要再plotter.show()

update_mesh

当我们绘制图形后,还需要再修改绘图参数,这时内置了一个update_mesh方法,用于修改绘图参数,使用时:

update_mesh(cmap = "coolwarm")

即可对图形进行修改。

clear_plot

另外内置了一个方法,用于清除绘图区:clear_plot()

clear_console_output

该命令可以清除文本输出区的历史记录,clear_console_output()。当然为了使用方便,在每次运行命令时都会清除历史记录。

案例

Pyvista绘图

N_SPHERES = 1_000_000
rng = np.random.default_rng(seed=0)
pos = rng.random((N_SPHERES, 3))
rad = rng.random(N_SPHERES) * 0.01
pdata = pv.PolyData(pos)
pdata['radius'] = rad
pdata.plot(
    style='points_gaussian',
    emissive=False,
    render_points_as_spheres=True,
)
N_SPHERES = 1_000_000
rng = np.random.default_rng(seed=0)
pos = rng.random((N_SPHERES, 3))
rad = rng.random(N_SPHERES) * 0.01
pdata = pv.PolyData(pos)
pdata['radius'] = rad

add_mesh(pdata, style="points_gaussian", render_points_as_spheres=True)

界面绘制pyvista图形
Figure 2: 界面绘制pyvista图形

现在对绘图参数进行修改:update_mesh(style="points")

style="points"
Figure 3: style="points"

如果说我们不小心写为update_mesh(style="point"),文本输出区也会显示错误信息:

报错情况
Figure 4: 报错情况

导入vtk文件进行绘图

import pyvista as pv
mesh = pv.read('C3D4.vtk')
print('node number = ',mesh.n_points)
print('element number = ',mesh.n_cells)
print('node coordinate = ',mesh.points[0])
print('point_data = ',mesh.point_data)
add_mesh(mesh,scalars="U",show_edges=False,cmap="coolwarm")

运行结果
Figure 5: 运行结果

通用脚本功能

现在试一下通用的脚本功能,就将它当作一个python解释器;

最简单的计算器
Figure 6: 最简单的计算器
计算三重积分
Figure 7: 计算三重积分