во время моих расчетов я сохраняю кучу файлов .vtk, которые связаны с одним временным шагом. Каждый файл описывает многогранник (класс C ++, который я определил), используя формат файла POLYDATA ASCII. Многогранники записываются простой функцией-членом класса многогранников.
Чтобы не определять совершенно новый класс для коллекции многогранников, который мне нужен для визуализации и путаницы в моем коде C ++, я хочу объединить несколько файлов .vtk в один файл .vtk.
Использование python-vtk вызывает у меня некоторые проблемы:
from vtk import *
reader = vtkPolyDataReader()
reader.SetFileName("file1.vtk")
reader.Update()
polyData1 = reader.GetOutput()
reader.SetFileName('file2.vtk')
reader.Update()
polyData2 = reader.GetOutput()
# Expand the output points
points1 = polyData1.GetPoints()
points2 = polyData2.GetPoints()
insertPosition = points1.GetNumberOfPoints()
for i in xrange(points2.GetNumberOfPoints()):
insertPoint = points2.GetPoint(i)
points1.InsertPoint(insertPosition,
insertPoint[0], insertPoint[1], insertPoint[2])
insertPosition += 1
print points1.GetNumberOfPoints()
# Change the cell ids of every cell in the polydata2 to correspond with
# the new points (appended point array)
increment = points1.GetNumberOfPoints();
for i in xrange(polyData2.GetNumberOfCells()):
cell = polyData2.GetCell(i)
cellIds = cell.GetPointIds()
for j in xrange(cellIds.GetNumberOfIds()):
oldId = cellIds.GetId(j)
cellIds.SetId(j, oldId + increment)
polyData1.Allocate(polyData1.GetNumberOfCells(), 1)
for i in xrange(polyData2.GetNumberOfCells()):
cell = polyData2.GetCell(i)
polyData1.InsertNextCell(cell.GetCellType(), cell.GetPointIds())
writer = vtkPolyDataWriter()
writer.SetFileName("output.vtk")
writer.SetInput(polyData1)
writer.Write()
Делая это, я получу дубликаты очков, и это нормально. Проблема заключается в том, что этот скрипт выполняется для следующих файлов .vtk:
file1:
# vtk DataFile Version 2.0
surface written 2011-12-19T15:30:18
ASCII
DATASET POLYDATA
POINTS 8 float
0.48999999999999999112 0.4000000000000000222 0.5999999999999999778
0.48999999999999999112 0.5 0.5999999999999999778
0.48999999999999999112 0.5 0.69999999999999995559
0.48999999999999999112 0.4000000000000000222 0.69999999999999995559
0.5 0.5 0.5999999999999999778
0.5 0.5 0.69999999999999995559
0.5 0.4000000000000000222 0.69999999999999995559
0.5 0.4000000000000000222 0.5999999999999999778
POLYGONS 6 30
4 0 1 2 3
4 4 5 6 7
4 4 1 2 5
4 6 5 2 3
4 7 0 1 4
4 0 7 6 3
CELL_DATA 6
FIELD attributes 1
zone 1 6 float
1 1 1 1 1 1
file2:
# vtk DataFile Version 2.0
surface written 2011-12-19T15:30:18
ASCII
DATASET POLYDATA
POINTS 8 float
0.58999999999999996891 0.5999999999999999778 0.5
0.58999999999999996891 0.69999999999999995559 0.5
0.58999999999999996891 0.69999999999999995559 0.5999999999999999778
0.58999999999999996891 0.5999999999999999778 0.5999999999999999778
0.5999999999999999778 0.69999999999999995559 0.5
0.5999999999999999778 0.69999999999999995559 0.5999999999999999778
0.5999999999999999778 0.5999999999999999778 0.5999999999999999778
0.5999999999999999778 0.5999999999999999778 0.5
POLYGONS 6 30
4 0 1 2 3
4 4 5 6 7
4 4 1 2 5
4 6 5 2 3
4 7 0 1 4
4 0 7 6 3
CELL_DATA 6
FIELD attributes 1
zone 1 6 float
1 1 1 1 1 1
Результат: точки с 8 координатами и ячейки (грани) вообще не добавляются.
Это только у меня или у Python-обёрток для vtkArray и подобных vtkObjects нет возможности перебора?