首页/文章/ 详情

【PySide6】工业软件界面内嵌入Python控制台,使用命令流控制计算流程

1月前浏览439

这两天木木在业余时间内基于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绘图

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"),文本输出区也会显示错误信息:

导入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")

通用脚本功能

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

来源:易木木响叮当
ACT通用pythonUM控制数控
著作权归作者所有,欢迎分享,未经许可,不得转载
首次发布时间:2025-02-19
最近编辑:1月前
易木木响叮当
硕士 有限元爱好者
获赞 230粉丝 325文章 373课程 2
点赞
收藏
作者推荐
未登录
还没有评论
课程
培训
服务
行家
VIP会员 学习计划 福利任务
下载APP
联系我们
帮助与反馈