Paraview: получение данных о баллах из переменных интеграции

Используя Python для взаимодействия с Paraview, я хочу получить данные «Очки» из интегрированного фильтра переменных.

Я пробовал GetArray («Очки»), но он не может его найти, хотя вы можете четко видеть его в графическом интерфейсе, если вы перейдете в режим просмотра электронной таблицы.

Мой код ниже. При подходе с графическим интерфейсом пользователя, который я получаю для Point ID = 0, массив «Points» имеет три значения (0,54475, -1,27142e-18, 4,23808e-19), что имеет смысл, поскольку стрелка по умолчанию симметрична по y и z.

Есть ли способ получить значение 0,54475 внутри Python?

MWE

#Import Paraview Libraries
#import sys
#sys.path.append('Path\\To\\Paraview\\bin\\Lib\\site-packages')
from paraview.simple import *
#### disable automatic camera reset on 'Show'
paraview.simple._DisableFirstRenderCameraReset()
# create a new 'Arrow'
arrow1 = Arrow()
# create a new 'Integrate Variables'
integrateVariables1 = IntegrateVariables(Input=arrow1)
pdata = paraview.servermanager.Fetch(integrateVariables1).GetPointData()

print pdata.GetArray("Points") # prints None

person Miguel    schedule 02.01.2018    source источник


Ответы (1)


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

Однако VTK обрабатывает координаты точки несколько иначе, поэтому код, который вам нужен для координат точки:

arrow1 = Arrow()
integrateVariables1 = IntegrateVariables(Input=arrow1)
integrated_filter = paraview.servermanager.Fetch(integrateVariables1)
print integrated_filter.GetPoint(0)

Это дает мне: (0.5447500348091125, -1.2714243711743785e-18, 4.238081064918634e-19)

Я также предлагаю вам сделать это в программируемом фильтре Python. Передача фильтра с сервера обратно клиенту - не лучшая практика, и предпочтительно выполнять все вычисления на сервере.

person Stuart Buckingham    schedule 03.01.2018
comment
Это хороший ответ, но я не согласен с последним утверждением об использовании программируемого фильтра. В большинстве случаев я бы также сказал, что вам следует избегать использования Fetch для передачи данных с сервера на клиент, но результат интеграции переменных является исключением. Результатом интеграции переменных является один элемент (меньший, чем информация о диапазоне, автоматически загружаемая клиенту), и это обычный вариант использования в пакетной обработке ParaView для выполнения тяжелых вычислений на стороне сервера, а затем получения агрегированного значения ( как результаты интеграции переменных) клиенту. - person Kenneth Moreland; 03.01.2018
comment
Кеннет, я согласен с вами в том, что получение интегрируемых переменных не является значительным объемом данных. Я просто пытался предупредить ОП о привычке использовать Fetch, так как использование его в фильтрах с большими объемами данных будет чрезвычайно вредным. Очевидно, это зависит от фактического варианта использования, но поскольку программируемые фильтры имеют одинаковый доступ к stdout, печать может выполняться на клиенте или сервере. Для более сложной обработки результата лучшим вариантом является выборка. - person Stuart Buckingham; 03.01.2018
comment
Спасибо, очень хорошо сработало. На самом деле я хочу использовать результат в качестве источника среза, который затем буду использовать в качестве источника фильтра оптимизации с настраиваемым источником. Я буду помнить о рекомендации осторожно использовать Fetch в будущем. - person Miguel; 04.01.2018