На этом шаге мы рассмотрим основные компоненты pipeline.
Конвейер Mayavi состоит из нескольких уровней. На самом верхнем находится движок (Engine). Он не отображается в дереве элементов pipeline, движок отвечает за создание и удаление сцены, на которой отображается модель. Далее идёт сцена (Scene), она содержит в себе:
источник данных -> фильтры (от нуля до n штук) -> Module Manager -> модуль визуализации
Источники данных предназначены для загрузки данных из numPy-массивов, списков и т.п. в специальные объекты. Фильтры позволяют выполнить над данными различные преобразования, менеджер модулей (отображается как Colors and legends в Mayavi pipeline) управляет цветом и представлением данных. Модули визуализации непосредственно формируют представление на сцене в виде линий, поверхностей, точек и т.п.
Pipeline можно собрать вручную через пользовательский интерфейс либо написать программу, которая вызывает функции создания элементов конвейера и передаёт в них нужные аргументы. Третий вариант - это воспользоваться заранее подготовленной функцией из библиотеки Mayavi, которая построит pipeline для решения конкретной задачи, например отображение поверхности, линии и т.п. Каждый элемент, входящий в pipeline, имеет ссылку на родительский элемент, данные из которого он получает.
Напишем пример для вывода родительских элементов функции surf():
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) obj = mlab.surf(z) while(True): print(type(obj)) if hasattr(obj, "parent"): obj = obj.parent else: break
Запустим эту программу:
<class 'mayavi.modules.surface.Surface'>
<class 'mayavi.core.module_manager.ModuleManager'>
<class 'mayavi.filters.poly_data_normals.PolyDataNormals'>
<class 'mayavi.filters.warp_scalar.WarpScalar'>
<class 'mayavi.sources.array_source.ArraySource'>
<class 'mayavi.core.scene.Scene'>
<class 'mayavi.core.engine.Engine'>
Обратите внимание, когда вы программно строите pipeline, то явно указывать ModuleManager не нужно, также как Scene и Engine.
На следующем шаге мы рассмотрим работу с источниками данных.