我有一些VTK文件,如下所示:

# vtk DataFile Version 1.0
Line representation of vtk
ASCII
DATASET POLYDATA
POINTS 30 FLOAT
234 462 35
233 463 35
231 464 35
232 464 35
229 465 35
[...]
LINES 120 360
2 0 1
2 0 1
2 1 0
2 1 3
2 1 0
2 1 3
2 2 5
2 2 3
[...]

我想从这些VTK文件中得到两个列表:edgesList和verticesList:
  • edgeList应包含以下边缘:(FromVerticeIndex,ToVerticeIndex,Weight)-元组
  • verticesList应该包含(x,y,z)-tuples的顶点。该索引是在edgeList
  • 中提到的索引

    我不知道如何用standard-vtk-python库提取它。我到目前为止:
    import sys, vtk
    
    filename = "/home/graphs/g000231.vtk"
    
    reader = vtk.vtkSTLReader()
    reader.SetFileName(filename)
    reader.Update()
    
    idList = vtk.vtkIdList()
    
    polyDataOutput = reader.GetOutput()
    print polyDataOutput.GetPoints().GetData()
    

    我的python-vtk代码可能没有意义。我宁愿使用vtk库,而不要使用任何自行编写的代码。

    这是我自己编写的代码。它可以工作,但是如果我可以使用vtk库,那就更好了:
    import re
    def readVTKtoGraph(filename):
        """ Specification of VTK-files:
            http://www.vtk.org/VTK/img/file-formats.pdf - page 4 """
        f = open(filename)
        lines = f.readlines()
        f.close()
    
        verticeList = []
        edgeList = []
    
        lineNr = 0
        pattern = re.compile('([\d]+) ([\d]+) ([\d]+)')
        while "POINTS" not in lines[lineNr]:
            lineNr += 1
    
        while "LINES" not in lines[lineNr]:
            lineNr += 1
            m = pattern.match(lines[lineNr])
            if m != None:
                x = float(m.group(1))
                y = float(m.group(2))
                z = float(m.group(3))
                verticeList.append((x,y,z))
    
        while lineNr < len(lines)-1:
            lineNr += 1
            m = pattern.match(lines[lineNr])
            nrOfPoints = m.group(1)
            vertice1 = int(m.group(2))
            vertice2 = int(m.group(3))
            gewicht = 1.0
            edgeList.append((vertice1, vertice2, gewicht))
        return (verticeList, edgeList)
    

    最佳答案

    我没有在Python中使用VTK,但是此阅读器应该能够读取该文件:
    http://www.vtk.org/Wiki/VTK/Examples/Cxx/IO/GenericDataObjectReader

    这是一个如何在Python中使用VTK阅读器的示例:
    http://www.vtk.org/Wiki/VTK/Examples/Python/STLReader

    10-07 19:11
    查看更多