На этом шаге мы рассмотрим организацию работы в конвейерном режиме.
Вариант работы с библиотекой Mayavi, которого мы придерживались на предыдущих шагах, на самом деле является довольно ограниченным и не позволяет использовать все возможности, которые предоставляет этот инструмент. По сути, функции, с которыми мы познакомились, являются заранее заданными сценариями (шаблонами) работы, дающими определённый результат. Например, если мы работаем с функцией surf(), то передаём ей в качестве входных данных numpy-массивы, а получаем поверхность, которая строится определенным образом по переданным данным и т.п. На более глубоком уровне работа Mayavi представляет собой выполнение ряда операций в конвейерном (pipeline) режиме. Pipeline предполагает последовательность из трёх этапов:
Для построения pipeline'а библиотека Mayavi представляет инструмент pipeline, который находится в пакете mlab.
Когда вы вызываете любую функцию из рассмотренных на предыдущих шагах, Mayavi строит соответствующий pipeline, который включает в себя объекты, обеспечивающие работу с нужным источником данных и модуль, который строит модель соответствующего вида.
Для того чтобы посмотреть на структуру конвейера, нажмите на кнопку "Mayavi pipeline" на панели инструментов сцены (см. рисунок 1). Для примера посмотрим на pipeline, который формируется для функции imshow(). Запустите код программы, приведённый ниже:
import numpy as np from mayavi import mlab x, y = np.mgrid[-2:2:0.1, -2:2:0.1] z = np.cos(x * y) * np.sin(x * y) mlab.imshow(z) mlab.show()
В результате откроется сцена, представленная на рисунке ниже.
Рис.1. Модель, построенная с помощью функции imshow()
Нажмите на указанную кнопку на панели инструментов. В окне "Mayavi pipeline" конвейер представляется в виде дерева в левой части окна.
Рис.2. Окно Mayavi pipeline
В нашем случае конвейер состоит из двух элементов:
Построим соответствующие pipeline'ы вручную:
import numpy as np from mayavi import mlab x, y = np.mgrid[-2:2:0.1, -2:2:0.1] z = np.cos(x * y) * np.sin(x * y) src = mlab.pipeline.array2d_source(z) img = mlab.pipeline.image_actor(src) mlab.show()
Результат выполнения этого кода, будет аналогичный варианту с mlab.imshow().
Рис.3. Результат построения с использованием pipeline
Фактически строки:
mlab.imshow(z)
src = mlab.pipeline.array2d_source(z) img = mlab.pipeline.image_actor(src)
На следующем шаге мы закончим изучение этого вопроса.