这两天木木在业余时间内基于PySide6设计了一款APP—PyVistaConsole。
该软件联用PyVista库,在界面中嵌入Python控制台,可以使用命令流更为灵活地控制计算流程,为后续的工业软件制作奠定基础。
效果如下:
在控制台上可以使用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(https://docs.pyvista.org/api/plotting/_autosummary/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)
现在对绘图参数进行修改:update_mesh(style="points")
如果说我们不小心写为update_mesh(style="point")
,文本输出区也会显示错误信息:
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")
现在试一下通用的脚本功能,就将它当作一个python解释器;