Как создать цветовую карту в VTK? - PullRequest
0 голосов
/ 07 мая 2020

Я создал простой неструктурированный квадрат в VTK.

x = [0,10,0,10]
y = [0, 0, 10, 10]
z = [0,0,0,0]
data = np.asarray([x,y,z]).T
for i in range(0, len(x)):
    points.InsertPoint(i, data[i])
quad = [2,3,1,0]
ugrid.InsertNextCell(vtk.VTK_QUAD, 4, quad)
ugrid.SetPoints(points)

Допустим, я хотел создать цветовую карту температуры по квадрату. Я знаю температуру по углам:

 temp = [0,20,40,60]

Как я могу раскрасить весь квадрат, зная эти значения?

VTK предоставляет один пример создания цветовой карты в своих учебных пособиях (учебник ColoredElevationMap) Однако я не совсем понимаю это и считаю, что есть еще один более простой способ создать цветовую карту в VTK, о котором я не знаю.

Ответы [ 2 ]

2 голосов
/ 07 мая 2020

Вы должны добавить свой массив данных и установить его как скаляры (= массив по умолчанию для использования в VTK, особенно для раскраски)

temperature = vtk.vtkIntArray()
temperature.SetName("Temp")
temp = [00,20,40,60]
for t in temp:
    temperature.InsertNextValue(t)

ugrid.GetPointData().SetScalars(temperature)

Затем в части рендеринга этот массив будет использоваться по умолчанию для окраска. Вам все равно нужно обновить цветовую гамму

mapper.SetScalarRange(ugrid.GetScalarRange())

, вы можете взглянуть на этот пример: https://lorensen.github.io/VTKExamples/site/Python/Rendering/Rainbow/

1 голос
/ 07 мая 2020

Добавление к ответу Нико Вуайля. Цвет карты можно изменить с помощью таблицы поиска, например:

lut = vtk.vtkLookupTable()
lut.SetHueRange(0, 0)
lut.SetSaturationRange(0, 0)
lut.SetValueRange(0.2, 1.0)
lut.Build()

и

Mapper.SetLookupTable(lut)
...