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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章