Mayavi:运行 mayavi 2

日期2007-07-25(最后修改),2006-12-03(创建)

简介

!MayaVi2 使用两种类型的“对象”:模块和过滤器。

!MayaVi 用户指南(v. 1.5)由 P. Ramachandran 定义如下

* "模块是一个实际可视化数据的对象。";

* "过滤器是一个以某种方式过滤数据的对象。一个简单的例子是 !ExtractVectorNorm 过滤器。它提取所选向量数据字段属性的数据文件的幅值。所有使用此过滤器作为输入的模块都将接收向量幅值作为标量字段数据。"

您可以通过以下两种方式之一运行 !MayaVi2

* 按原样运行 !MayaVi2,在命令行上不带任何选项。您将使用 GUI 管理模块和/或过滤器;

* 在命令行上使用一些选项运行 !MayaVi2,从而直接加载您要使用的模块和/或过滤器。

按原样运行 MayaVi2

注意:为了正常运行,您的 PATH 变量应该包含 !MayaVi2 二进制文件所在的目录(例如,/usr/local/bin)。

开始运行 !MayaVi2

在 [ ]
mayavi2

!MayaVi2 将启动一个空白的 TVTK 场景。

* 让我们从加载一些数据开始。进入文件/打开/Vtk 文件。这将弹出一个文件对话框,使用它选择 examples/data 目录下的 heart.vtk 文件。

TVTK 场景没有改变,但您可以通过查看左上角的窗口来确认文件已加载。

* 现在我们有了数据,可以对其进行可视化了。首先,让我们创建一个轮廓。在左上角的窗口中点击 "VTK 文件 (heart.vtk)"。

进入菜单项可视化/模块/轮廓。这将创建一个轮廓对象。我们可以在对象编辑器中编辑轮廓的属性,并且可以在场景编辑器中旋转和操作该对象。

* 现在让我们添加三个网格平面。

选择可视化/模块/!网格平面,这将在 X 轴上创建一个网格平面。我们可以创建另外两个网格平面。通过在对象编辑器中选择轴,我们可以将这些网格平面设置在 Y 和 Z 轴上。

* 我们可以使用等高线网格平面将对象投影到网格平面上。选择可视化/模块/等高线网格平面。对 Y 和 Z 平面也执行此操作。

* 现在我们可以通过选择可视化/模块/等值面来查看我们的数据。

* 现在我们可以通过选择可视化/模块/标量切割平面来完成添加标量切割平面的操作。通过点击白色箭头,我们可以移动该平面。

结果应该如下所示(有关背景/前景颜色问题,请参见 [:Cookbook/MayaVi/Tips: Cookbook/MayaVi/Tips])

![](files/../_static/items/attachments/MayaVi_RunningMayavi2/mv2.png

使用一些参数运行 MayaVi2:可用的模块和过滤器

为了了解您可以在命令行上设置哪些参数,请键入

在 [ ]
mayavi2 -h

这将列出所有可用选项。在所有这些选项中,有

* -d file.vtk: 设置要加载到 !MayaVi2 中的 VTK 文件;

* -mmodule: 设置要使用的模块。以下列表按字母顺序显示所有可用模块,并附带简短说明(取自 Python 文档文件):

*Axes: 使用 tvtk.!CubeAxesActor 绘制一个简单的轴;

*!ContourGridPlane: 一个等高线网格平面模块。此模块允许您对输入网格数据进行切片,并查看数据的等高线。该模块仅适用于结构化点、直线网格和结构化网格输入。

*!CustomGridPlane: 一个自定义网格平面,比 !GridPlane 具有更多灵活性。这也仅适用于非非结构化/非多边形数据集。

*Glyph: 显示不同类型的字形,根据标量或矢量数据在输入点处进行方向和颜色设置;

*!GridPlane: 一个简单的网格平面模块;

*!ImagePlaneWidget: 一个简单的 !ImagePlaneWidget 模块,用于查看图像数据;

*!IsoSurface: 一个 !IsoSurface 模块,允许用户对输入点数据进行等值面绘制;

*!OrientationAxes: 在侧面创建一个小的坐标轴,指示坐标轴的位置,从而标记场景的方向。它使用 !OrientationMarkerWidget,需要 VTK-4.5 及以上版本。

*Outline: 一个轮廓模块,为给定数据绘制轮廓;

*!ScalarCutPlane: 使用隐式平面对任何输入数据集进行切片,并绘制数据,可选地进行等值线绘制和标量扭曲;

*!SliceUnstructuredGrid: 该模块对非结构化网格数据进行切片,并显示与切片相交或接触的单元格;

*Streamline: 允许用户为给定的矢量数据绘制流线。这支持各种类型的种子对象(线、球体、平面和点种子)。它还允许用户绘制带状物或管状物,并进一步支持不同类型的交互式模式来计算流线。

*!StructuredGridOutline: 为结构化网格绘制与网格一致的轮廓;

*Surface: 为任何输入数据集绘制表面,可选地进行等值线绘制;

*Text: 该模块允许用户在屏幕上放置文本;

*!VectorCutPlane: 使用隐式切片平面对输入数据进行任意切片,并根据矢量场数据放置字形。字形可以使用矢量大小或标量属性进行颜色设置。

*Vectors: 根据输入点的矢量数据,显示不同类型的字形,并根据矢量数据进行方向和颜色设置。这只是一个方便的模块,完全基于 Glyph 模块。

*Volume: Volume 模块使用体绘制技术可视化标量场。它支持 !ImageData 和 !UnstructuredGrid 数据。它还支持 !FixedPointRenderer 用于 !ImageData。但是,性能很慢,因此您最好的选择可能是基于 !ImageData 的渲染器。

*!WarpVectorCutPlane: 使用隐式切割平面对输入数据进行任意切片,并根据矢量场数据对其进行扭曲。标量在扭曲的表面上显示为颜色。

* -ffilter: 设置要使用的过滤器(如果您想查看过滤后的数据,请在模块之前加载它)。可用的过滤器有:

*!CellToPointData: 通过对点处单元格数据的平均值,将单元格属性数据转换为点数据。

*Delaunay2D: 使用 tvtk.Delaunay2D 类执行 2D Delaunay 三角剖分;

*Delaunay3D: 使用 tvtk.Delaunay3D 类执行 3D Delaunay 三角剖分;

*!ExtractGrid: 允许用户选择结构化网格的一部分;

*!ExtractUnstructuredGrid: 允许用户选择非结构化网格的一部分;

*!ExtractVectorNorm: 计算输入矢量数据的范数(欧几里得),并进行可选的 [0, 1] 范围内的缩放。当输入数据具有矢量输入但没有用于矢量大小的标量数据时,这很有用。

*!MaskPoints: 选择性地将输入点传递到下游。这可用于对输入点进行二次采样。请注意,这不会传递几何数据,这意味着所有网格信息都会丢失。

*!PointToCellData: 执行 !CellToPointData 过滤器的逆操作;

*!PolyDataNormals: 从输入数据计算法线。这使网格的外观更平滑。这应该适用于任何输入数据集。注意:此过滤器在 !MayaVi2 GUI 中称为“计算法线”(可视化/过滤器/计算法线)。

*Threshold: 一个简单的过滤器,它对输入数据进行阈值处理;

*!TransformData: 使用 tvtk.!BoxWidget 对输入数据执行线性变换。这与 !ImageData/StructuredPoints 不兼容。

*!WarpScalar: 沿特定方向(法线或指定方向)扭曲输入数据,扭曲比例由局部标量值指定。对于制作地毯图很有用。

*!WarpVector: 沿着点向量属性进行扭曲输入数据,并根据比例因子进行缩放。对于显示流剖面或位移很有用。

好的,你认为你会很快厌倦输入所有这些长名称模块和过滤器吗?别担心,使用你的 shell 自动补全命令!

例如,对于 (t)csh shell,你可以在你的配置 shell 文件中添加以下行

在 [ ]
complete mayavi2 c/-/"(3 d f m n M p q w x z)"/ n/-3/f:*.3ds/ n/-d/f:*.vt?/ n/-f/"(CellToPointData Delaunay2D Delaunay3D ExtractGrid ExtractUnstructuredGrid ExtractVectorNorm MaskPoints PointToCellData PolyDataNormals Threshold TransformData WarpScalar WarpVector)"/ n/-m/"(Axes ContourGridPlane CustomGridPlane Glyph GridPlane ImagePlaneWidget IsoSurface Outline OrientationAxes ScalarCutPlane SliceUnstructuredGrid Streamline StructuredGridOutline Surface Text Vectors VectorCutPlane Volume WarpVectorCutPlane)"/ n/-p/f:{*xyz.bin,*.xyz}/ n/-q/f:{*q.bin,*.q}/ n/-w/f:*.wrl/ n/-x/f:*.py/ n/-z/f:*.mv2/

第一次输入可能很长,但一旦输入,就不需要再费力加载你想要使用的模块或过滤器了! ;-)

因此,输入(在 !MayaVi2 的示例目录中,参见 [:Cookbook/MayaVi/Installation: Cookbook/MayaVi/Installation])

在 [ ]
mayavi2 -d data/heart.vtk -m Outline -m GridPlane -m GridPlane -m GridPlane -m ContourGridPlane -m ContourGridPlane -m IsoSurface -m ScalarCutPlane

你应该得到这个

好的,这与上一张图并不完全相同,尽管加载了完全相同的模块。

原因是你没有设置(而且据我所知,你不能设置)一些模块属性,例如 !Iso Surface 模块的等值面、!GridPlane 的法线等。

希望你能使用 GUI “手动” 设置这些参数。

所以现在,让我们玩玩这个 GUI ;-)

移动

因此,你可以在这两张图中看到右侧的渲染窗口(TVTK Scene)以及左侧的模块树。让我们考虑第一张图。

你可以像往常一样使用鼠标处理渲染场景,使用 OpenGL

  • 按住左键移动鼠标可以旋转场景;

  • 按住中键移动鼠标可以平移场景;

  • 按住右键移动鼠标可以放大/缩小(注意:如果你有滚轮,也可以使用鼠标滚轮)。

注意:你可以通过点击“View”项或每个小图标(第一个 X:Ox 轴指向你,第二个 X:Ox 轴指向你,等等)来获得“预定义”的视角(垂直于 x 轴、y 轴或 z 轴)。

在窗口左侧,你可以看到加载了哪些模块(“TVTK Scene”是场景的“根”,而“VTK file”是数据源,即 heart.vtk 文件)。

  • “Outline”模块显示包围场景的框;

  • 你有三个网格平面(“!GridPlane”模块),坐标分别为 x = 0、y = 0 和 z = 0;

  • 两个等值线网格平面(“!ContourGridPlane”模块):第一个显示等值线(垂直),第二个显示 z = const 的切割平面;

  • “!IsoSurface”模块显示心脏为黄色;

  • 最后一个切割平面(垂直,y = const)由 “!ScalarCutPlane” 模块显示。

注意,这些场景中没有使用任何过滤器。

使用每个模块/过滤器非常直观。在树中点击你的模块/过滤器,并使用鼠标设置一些参数,或在 GUI 左下角的窗口中输入一些值。

如果你想复制/粘贴/删除/剪切给定的模块/过滤器,右键点击它。一个小窗口会弹出,其中包含一个项目列表。

注意:您可以双击树中选择的模块/过滤器以获得更大的窗口。

要加载其他模块或添加过滤器,请单击窗口顶部的“可视化”项目。

最后,您还可以加载另一个 VTK 数据文件,在“!MayaVi2”文件中加载/保存场景(扩展名为 .mv2),或将其转换为所需的图像格式(PNG、JPEG...),单击“文件”项目或相应的图标(小软盘)。

您还可以通过单击代表一个小方块中四个红色箭头的小图标来使场景全屏显示。要禁用全屏模式,请键入“e”或“q”。

这是使用 !MayaVi2 的最简单方法。请记住,您还可以尝试“mayavi2 -h”以查看可以在 !MayaVi2 命令行中添加哪些选项和参数。

章节作者:GaelVaroquaux、FredericPetit、Unknown[129]

附件