vtk.vtkPolyDataReader() 使用
一个神奇的网站(各种python例子):Search Python code examples from over 1.000.000 projects
Example1
def loadVtk(filename):
if "vtp" in filename:
vreader = vtk.vtkXMLPolyDataReader()
else:
vreader = vtk.vtkPolyDataReader()
# 重点语句:读文件
vreader.SetFileName(filename)
vreader.Update()
# 重点语句:得到文件内容
polydata = vreader.GetOutput()
polydata.ReleaseDataFlagOn()
streamlines = []
verts = vtk_to_numpy(polydata.GetPoints().GetData())
scalars = {}
pointdata = polydata.GetPointData()
for si in range(pointdata.GetNumberOfArrays()):
sname = pointdata.GetArrayName(si)
scalars[sname] = vtk_to_numpy(pointdata.GetArray(si))
for i in range(polydata.GetNumberOfCells()):
pids = polydata.GetCell(i).GetPointIds()
ids = [pids.GetId(p) for p in range(pids.GetNumberOfIds())]
streamlines.append(ids)
res = {"points": verts, "values": scalars, "streamlines": streamlines}
return res
Example2
def mris2vtk(input_name, output_name):
"""
Converts a FreeSurfer surface to VTK file format
"""
# convert surface to VTK format
check_call(["mris_convert", input_name, output_name])
# get surface RAS translation
out = check_output(["mris_info", input_name], stderr=STDOUT)
m = re.search("c_\(ras\)\s:\s\((-?\d+\.\d+),\s(-?\d+\.\d+),\s(-?\d+\.\d+)\)", out)
if m is None:
raise RuntimeError("Could not find c_(ras) coordinates in mris_info output!")
tx = float(m.group(1))
ty = float(m.group(2))
tz = float(m.group(3))
# transform vertex positions to scanner RAS of orig.mgz
# 读文件
reader = vtkPolyDataReader()
reader.SetFileName(output_name)
reader.Update()
# 得到文件内容
surface = reader.GetOutput()
# 得到文件内容里的点
points = surface.GetPoints()
for i in range(points.GetNumberOfPoints()):
x, y, z = points.GetPoint(i)
# 修改点的坐标
points.SetPoint(i, x + tx, y + ty, z + tz)
surface.SetPoints(points)
writer = vtkPolyDataWriter()
writer.SetFileName(output_name)
writer.SetInput(surface)
writer.Write()