Как установить значения данных в vtkStructuredGrid - PullRequest
5 голосов
/ 05 октября 2011

Я пытаюсь заполнить структурированную сетку аналитическим полем, но, несмотря на чтение документов vtk, я не выяснил, как на самом деле установить скалярные значения в точках сетки или задать информацию об интервале / начале координат сетки. Начиная с кода ниже, как мне

  1. связывает пространственную информацию с сеткой (т. Е. Ячейка 0,0,0 находится в координатах 0,0,0, интервал равен dx в каждом направлении)
  2. связывает скалярные значения с каждой точкой сетки. Для начала мне нужен только один, но в итоге я бы хотел хранить 3 фрагмента данных в каждой точке (не вектор, 3 разных скаляра).
grid = vtk.vtkStructuredGrid()
numPoints = int((maxGrid - minGrid)/dx)
grid.SetDimensions(numPoints, numPoints, numPoints)

1 Ответ

14 голосов
/ 06 октября 2011

В VTK есть 3 типа «структурированных» сеток: vtkImageData (из которого происходит vtkUniformGrid), vtkRectilinearGrid и vtkStructuredGrid. Все они структурированы в том смысле, что топология установлена. vtkImageData имеет постоянный интервал между точками и выровнен по оси, vtkRectilinearGrid выровнен по оси, но может изменять интервал в каждом направлении оси, а vtkStructuredGrid имеет произвольно расположенные точки (хотя ячейки могут быть недопустимыми).

Для того, что вы хотите сделать, вы должны сделать:

from vtk import *
dx = 2.0
grid = vtkImageData()
grid.SetOrigin(0, 0, 0) # default values
grid.SetSpacing(dx, dx, dx)
grid.SetDimensions(5, 8, 10) # number of points in each direction
# print grid.GetNumberOfPoints()
# print grid.GetNumberOfCells()
array = vtkDoubleArray()
array.SetNumberOfComponents(1) # this is 3 for a vector
array.SetNumberOfTuples(grid.GetNumberOfPoints())
for i in range(grid.GetNumberOfPoints()):
    array.SetValue(i, 1)

grid.GetPointData().AddArray(array)
# print grid.GetPointData().GetNumberOfArrays()
array.SetName("unit array")
...