vtk.vtkPolyDataReader()

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()

 

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值