Чтение файла vtr, преобразование его и повторная запись не создает файла

Я совершенно новичок в работе с vtk(/vtr/vtu/..) вне paraview, но я хочу немного упростить свой рабочий процесс, поэтому я хочу выполнить некоторое преобразование данных вне paraview. В основном у меня есть две симуляции, но начало координат и ось разные. Разница в происхождении меняется каждый временной шаг, поэтому я хочу преобразовать свои файлы таким образом, чтобы они были выровнены перед открытием их в паравью, чтобы мне не приходилось постоянно менять значения в фильтре преобразования, когда я хочу посмотреть другой временной шаг. Сначала я пытался добиться этого, просто вращая и преобразовывая один файл.

Мой подход таков (основан на многих других веб-страницах, поэтому, к сожалению, я больше не могу отслеживать, что и откуда пришло):

import vtk 
reader = vtk.vtkXMLRectilinearGridReader()
reader.SetFileName(file_name)
reader.Update()

data = reader.GetOutput()

transform = vtk.vtkTransform()
transform.RotateZ(90)
transform.Translate(2.34375, 4.6875, 2.34375)

transformFilter=vtk.vtkTransformFilter()
transformFilter.SetTransform(transform)
transformFilter.SetInputData(data)
transformFilter.Update()

writer = vtk.vtkXMLRectilinearGridWriter()
writer.SetInputData(transformFilter.GetOutput())
writer.SetFileName("Output.vtr")
writer.Update()

Теперь я не получаю никаких ошибок, но также нет созданного файла, и я не знаю, где я ошибаюсь. Любая помощь высоко ценится. (кстати, я попробовал этот ответ, и это действительно создает файл)

РЕДАКТИРОВАТЬ; Может быть, я нашел, почему это идет не так, но все же я не знаю, как это исправить. Если я печатаю data, отображается vtkRectilinearGrid, а если я печатаю transformFilter.GetOutput(), отображается vtkStructuredGrid. Я думал, что фильтр преобразования сохранит тот же тип сетки, но, по-видимому, это не так. У кого-нибудь есть идея оставить тот же тип сетки?


person C. Binair    schedule 19.03.2021    source источник


Ответы (1)


vtkRectilinearGrid ориентирован вдоль главной оси. Это позволяет некоторые оптимизации, такие как неявные координаты.

Вывод фильтра Transform не может быть преобразован в vtkRectlinearGrid, главным образом потому, что вы не можете предположить его ориентацию. Точки не могут быть неявными, как в RectilinearGrid, объект хранит каждую из них.

Как вы сказали, ваше решение состоит в том, чтобы изменить способ записи данных. Вы можете написать файл .vts с расширением vtkXMLStructuredGridWriter.

person Nico Vuaille    schedule 22.03.2021