Шаг 181.
Язык Python. Визуализация данных.
Библиотека Mayavi. Работа с pipeline. Структура pipeline

    На этом шаге мы рассмотрим основные компоненты pipeline.

    Конвейер Mayavi состоит из нескольких уровней. На самом верхнем находится движок (Engine). Он не отображается в дереве элементов pipeline, движок отвечает за создание и удаление сцены, на которой отображается модель. Далее идёт сцена (Scene), она содержит в себе:

Engine и 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.

    На следующем шаге мы рассмотрим работу с источниками данных.




Предыдущий шаг Содержание Следующий шаг