所以我想出了一个不错的折衷方案。我从这里描述的 git 代码开始:
http://www.shocksolution.com/microfluidics-and-biotechnology/visualization/python-vtk-paraview/
它只是一个python文件。要点是那里的代码允许您为点提供 x、y、z 位置和半径,并输出 VTK 格式的 XML 文件。因此,要制作粒子,我只需将 x、y、z 位置交给它,然后为所有粒子的半径设置一个常数。然后我只是在数据集上制作一个球形字形。
对于盒子,我使用完全相同的代码。对于每个盒子,我仍然输出 x,y,z 坐标,其中 x,y,z 值是盒子中心的坐标。然后对于“半径”参数,我使用立方体的边长。这很有效,因为在 paraview 中,我只是为这些框标出数据点。我使用框字形,并按标量缩放,其中标量是半径。如果您不定向框字形并将标量因子设置为 1,您将获得所需的结果。这是一个简单的例子,一切都是统一的:
所以我只是将我的 C 数据结构中的坐标输出到 CSV 文件,然后在 python 中拉入文件并使用链接中的代码并使用 paraview 打开结果。这是我在链接中使用代码的方式:
from vtktools import VTK_XML_Serial_Unstructured
import sys
if len(sys.argv) > 2:
treeFile = sys.argv[1]
bodyFile = sys.argv[2]
else:
print 'No input files'
exit(4)
x = []
y = []
z = []
r = []
f = open(treeFile, 'r')
for line in f:
v = line.split(',')
x.append(float(v[0].strip()))
y.append(float(v[1].strip()))
z.append(float(v[2].strip()))
r.append(float(v[3].strip()))
f.close()
temp = treeFile.split('/')
if (len(temp) == 1):
temp = temp[0]
else:
temp = temp[-1]
tree_writer = VTK_XML_Serial_Unstructured()
tree_writer.snapshot(temp.split('.',1)[0] + '.vtu', x, y, z, [], [], [], [], [], [], r)
tree_writer.writePVD("octree.pvd")
x = []
y = []
z = []
r = []
f = open(bodyFile, 'r')
for line in f:
v = line.split(',')
x.append(float(v[0].strip()))
y.append(float(v[1].strip()))
z.append(float(v[2].strip()))
r.append(float(v[3].strip()))
f.close()
temp = bodyFile.split('/')
if (len(temp) == 1):
temp = temp[0]
else:
temp = temp[-1]
body_writer = VTK_XML_Serial_Unstructured()
body_writer.snapshot(temp.split('.',1)[0] + '.vtu', x, y, z, [], [], [], [], [], [], r)
body_writer.writePVD("distribution.pvd")