8

次のような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ファイルから2つのリストを取得したいと思います:edgesListとverticesList:

  • edgeListには、エッジを(FromVerticeIndex、ToVerticeIndex、Weight)-タプルとして含める必要があります
  • verticesListには、頂点を(x、y、z)-タプルとして含める必要があります。インデックスは、edgesListに記載されているインデックスです。

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-codeが意味をなさない可能性があります。私は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)
4

2 に答える 2

2

私は Python で VTK を使用しませんが、このリーダーはそのファイルを読み取ることができるはずです: http://www.vtk.org/Wiki/VTK/Examples/Cxx/IO/GenericDataObjectReader

Python で VTK リーダーを使用する方法の例を次に示します: http://www.vtk.org/Wiki/VTK/Examples/Python/STLReader

于 2011-12-12T00:34:07.163 に答える