<p>为了这个目的,我放弃了python-vtk-api,这里有一个小的快速编写的类,有人可能会发现它很有用:</p>
<pre><code>class polyDataVtk(object):
"""Class representing the polydata vtk information stored in legacy ASCII .vtk POLYDATA files."""
def __init__(self, fileName = None):
self.__points = []
self.__polygons = []
if fileName is not None:
self.__fileName = fileName
def parse(self, fileName):
"""Parse the POLYDATA information from a .vtk file and append the data to the object.
Does not check for the file consistency."""
file = open(fileName, 'r')
# Use local data first.
points = []
polygons = []
line = ""
while(True):
line = file.readline()
if 'POINTS' in line:
break
nPoints = 0
if (line == ""):
print "No POINTS defined in the .vtk file"
return
# Set the number of points
nPoints = int(line.split()[1])
# Append the numbers.
for i in xrange(nPoints):
points.append(map(lambda x : float(x), file.readline().split()))
# Append polygons.
line = ""
while(True):
line = file.readline()
if 'POLYGONS' in line:
break
if (line == ""):
print "No POLYGONS defined in the .vtk file"
return
# Set the number of polygons.
nPolygons = int(line.split()[1])
# Read the polygons.
for i in xrange(nPolygons):
line = file.readline()
polygons.append(map(lambda x : int(x) + len(self.__points), line.split())[1:])
# File parsed without a problem.
self.__points.extend(points)
self.__polygons.extend(polygons)
file.close()
def write(self,fileName=None, append=False):
# Overwrite the filename provided to the constructor.
if fileName is not None:
self.__fileName = fileName
# No fileName is provided by the constructor or the write method.
if self.__fileName is None:
self.__fileName = "result.vtk"
# Append or overwrite?
if append:
file = open(self.__fileName, 'a')
else:
file = open(self.__fileName, 'w')
file.writelines("# vtk DataFile Version 2.0\n")
file.writelines("appended vtk files\n")
file.writelines("ASCII\n")
file.writelines("DATASET POLYDATA\n")
file.writelines("POINTS %d float \n" % len(self.__points))
for point in self.__points:
file.writelines("%.10f %.10f %.10f\n" % (point[0], point[1], point[2]))
size = 0
for polygon in self.__polygons:
size += len(polygon)
file.writelines("POLYGONS %d %d \n" % (len(self.__polygons),
size
+ len(self.__polygons)))
for polygon in self.__polygons:
file.writelines("%d " % len(polygon))
for label in polygon:
# I don't know how many labels are there in general.
file.writelines("%d " % label)
file.writelines("\n")
file.close()
def fileName(self):
return self.__fileName
</code></pre>