Программируемый фильтр ParaView для контуров

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

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

Вот что у меня есть до сих пор:

pdi = self.GetPolyDataInput()
pdo =  self.GetPolyDataOutput() 
c = vtk.vtkContourFilter()
c.SetInputConnection(pdo)
c.SetValue(0, 0.01)
c.Update()
self.GetOutput().ShallowCopy(c.GetOutput())

Проблема в том, что pdo стоит "None", т.е. у меня нет PolyData. Когда я использую pdo = self.GetOutput(), я получаю объект vtkImageData. Что не работает как InputConnection для ContourFilter.

Моим идеальным решением был бы фрагмент кода, где мне просто нужно скопировать список значений с отрендеренными изоповерхностями для этих значений, предпочтительно в виде разных объектов, чтобы я мог их раскрасить и добавить/удалить из текущего RenderView.

Я использую необработанные данные в качестве входных данных


person mimre    schedule 28.09.2017    source источник
comment
почему вы хотите использовать программируемый фильтр для этого?   -  person Mathieu Westphal    schedule 29.09.2017
comment
Честно говоря, мне не нужен программируемый фильтр, я просто подумал, что это правильный путь. Я просто хочу вставить список изозначений, а не добавлять их по одному. Если у вас есть другой способ сделать это, дайте мне знать   -  person mimre    schedule 29.09.2017


Ответы (1)


Для этого вы можете использовать оболочку Python. Нажмите на объект Contour в обозревателе конвейеров. Затем откройте оболочку Python (Инструменты -> Оболочка Python). Выполните следующие строки кода Python в оболочке:

contour = GetActiveSource()
contour.Isosurfaces = [100.0, 200.0, 300.0]
person Cory Quammen    schedule 28.09.2017
comment
К сожалению, я получаю следующую ошибку: raceback (последний последний вызов): Файл ‹console›, строка 1, в ‹module› Файл /usr/local/lib/paraview-5.4/site-packages/paraview/servermanager.py, строка 453, в setattr, чтобы добавить этот атрибут.) AttributeError: Attribute Isosurfaces не существует. Этот класс не позволяет добавлять новые атрибуты, чтобы избежать ошибок из-за опечаток. Используйте add_attribute(), если вы действительно хотите добавить этот атрибут. - person mimre; 29.09.2017
comment
Эй, я решил проблему. Можете ли вы добавить к своему ответу, что вам нужно выбрать Contour в браузере конвейера? Тогда он работает нормально. - person mimre; 09.10.2017
comment
Я сказал нажать на объект Contour во втором предложении :-) - person Cory Quammen; 10.10.2017