获取FEM,将绘图保存为PNG?

问题描述 投票:0回答:1

我正在使用 getfem 的 python 绑定,为此我按照他们的教程编写了这个脚本:

import getfem as gf
import numpy as np
import math


center = [0.0, 0.0]
dir = [0.0, 1.0]
radius = 1.0
angle = 0.2 * math.pi

mo = gf.MesherObject("cone", center, dir, radius, angle)

h = 0.1
K = 2
mesh = gf.Mesh("generate", mo, h, K)

outer_faces = mesh.outer_faces()
OUTER_BOUND = 1
mesh.set_region(OUTER_BOUND, outer_faces)

sl = gf.Slice(("none",), mesh, 1)

mfu = gf.MeshFem(mesh, 1)
elements_degree = 2
mfu.set_classical_fem(elements_degree)

mim = gf.MeshIm(mesh, pow(elements_degree, 2))

md = gf.Model("real")
md.add_fem_variable("u", mfu)

md.add_Laplacian_brick(mim, "u")
F = 1.0
md.add_fem_data("F", mfu)

md.set_variable("F", np.repeat(F, mfu.nbdof()))
md.add_source_term_brick(mim, "u", "F")

md.add_Dirichlet_condition_with_multipliers(mim, "u", elements_degree - 1, OUTER_BOUND)
md.solve()

U = md.variable("u")
sl.export_to_vtk("u.vtk", "ascii", mfu, U, "U")

这将导出一个 vtk 文件。在某个地方,我找到了一种在 Jupyter 笔记本上显示它的方法:

import pyvista as pv
from pyvirtualdisplay import Display

display = Display(visible=0, size=(1280, 1024))
display.start()
p = pv.Plotter()
m = pv.read("u.vtk")
contours = m.contour()
p.add_mesh(m, show_edges=False)
p.add_mesh(contours, color="black", line_width=1)
p.add_mesh(m.contour(8).extract_largest(), opacity=0.1)
pts = m.points
p.show(window_size=[384, 384], cpos="xy")

display.stop()

由于某种原因,它看起来非常压缩。我正在尝试将其另存为 PNG。

有谁知道如何将vtk转换成png? Paraview 在现代系统中出于所有意图和目的已经被弃用,所以这是不可能的。

python image
1个回答
1
投票

您可以生成屏幕截图而不显示它:

import pyvista as pv
from pyvirtualdisplay import Display

display = Display(visible=0, size=(1280, 1024))
display.start()
p = pv.Plotter(off_screen=True)
m = pv.read("u.vtk")
contours = m.contour()
p.add_mesh(m, show_edges=False)
p.add_mesh(contours, color="black", line_width=1)
p.add_mesh(m.contour(8).extract_largest(), opacity=0.1)
pts = m.points
p.show(cpos="xy", screenshot='screenshot.png')

display.stop()
© www.soinside.com 2019 - 2024. All rights reserved.