我有一个C代码的三维数据结构,我想把它可视化为三维空间中的框和点所以我有一堆坐标,一些是点坐标,一些是框坐标,我想把它们以三维的形式绘制出来,使数据结构可视化有人做过类似的事情吗我开始尝试使用视窗我的计划是生成一个paraview状态文件(xml类型文件),然后用paraview打开它问题是这些状态文件庞大而复杂为了尝试找出xml结构,我在paraview中创建了框和点源,然后查看它生成的状态文件看起来糟透了。
我只想说,用这些坐标显示一个框,用这些坐标以极简的方式显示一个点有人有什么想法吗不必在C或paraview中,因为我可以输出坐标并输入生成最终产品的任何内容如果Python+Matlab能正常工作的话,它也能正常工作。

最佳答案

所以我找到了一个很好的折衷方案我从这里描述的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值是框中心的坐标然后对于“radius”参数,我使用立方体的边长度这很有效,因为在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")

10-06 01:42