我想在 Paraview 中体积渲染 3D 标量数据,我不确定我无法这样做是否是 VTK 或 Paraview 的错误使用。
我已经构建了一个 *.vtu VTK 非结构化网格文件,其中包含 2 个单元,这些单元由 10 个 PolyVertex 对象组成,每个点都具有标量数据。这些用于表示空间中数值解的值已知的点(例如,有限元的正交点)。我可以将文件加载到 Paraview 并以点的形式查看输出:
没问题。但是,当我选择“体积”表示而不是点时,点就会消失,没有任何体积渲染。我正在寻找 paraview 在每个单元格的点之间线性插值解决方案,就像我从数据文件提供图像(统一直线网格)一样:
但是,我似乎无法找到有关如何执行此操作的文档。我想有限元社区通常必须呈现非结构化的体积数据,所以这令人惊讶。
以及用于在 Python 中写出 VTK 文件的源代码:
class VtkPolyVertCloud(object):
""" save each finite element as a set of polyvertices, but lose cell information """
def __init__(self):
# geometry
self.points= vtk.vtkPoints()
self.grid = vtk.vtkUnstructuredGrid()
# data
self.values = vtk.vtkDoubleArray()
self.values.SetName('point_values_array')
self.grid.SetPoints(self.points)
self.grid.GetPointData().SetScalars(self.values)
def add_polyVertex_cell(self, points, data):
"""
adds points according to user-supplied numpy arrays, for convenience and to eliminate loops
in calling code
@param points: numpy array of 3d point coords -- points.shape = (npoints, 3)
@param data: scalar-valued data belonging to each point -- data.shape = (npoints,)
"""
npts = points.shape[0]
assert(points.shape[1] == 3) # make sure 3d points passed in
assert(data.shape[0] == npts) # make sure same number of data, points
pv = vtk.vtkPolyVertex()
pv.GetPointIds().SetNumberOfIds(npts)
for idx, point in enumerate(points):
pointID = self.points.InsertNextPoint(point)
pv.GetPointIds().SetId(idx, pointID)
self.values.InsertNextValue(data[idx])
self.grid.InsertNextCell(pv.GetCellType(), pv.GetPointIds())
和调用代码:
def test_vtkPolyVertexCloud_writeToFile():
""" adds a set of polyvertices meant to represent a finite element """
pc = vtku.VtkPolyVertCloud()
points, data = get_random_points_and_data(10)
pc.add_polyVertex_cell(points, data)
pc.add_polyVertex_cell(points + 1, data)
# write
fn = 'test_PolyVertexCloud.vtu'
writer = vtk.vtkXMLUnstructuredGridWriter()
writer.SetFileName(fn)
writer.SetInputData(pc.grid)
writer.Write()
更新:我注意到下面接受的答案并做了以下事情: 1. 对我的每个有限元执行空间 Delaunay 三角剖分(数值解在每个有限元的节点处是已知的)。三角剖分很快,因为即使是高阶有限元也没有那么多点。2. 构造了一个VTK 文件,其中每个单元格都是来自每个元素的空间Delaunay 三角剖分的四面体。