Mayavi 2 脚本编写:基本模块

日期2007-08-12(最后修改),2007-08-10(创建)

简介

这些模块被称为“基本”模块,因为它们是通用的,并且独立于所有类型的数据。

在使用模块之前,请记住您需要导入它。

通常,如果您想更改对象的颜色,您需要键入

In [ ]
module.actor.property.color = fg_color

其中 fg_color 是一个“元组”,例如 (0, 0, 0) 表示黑色。

注意:您可以为每个模块/过滤器设置颜色(当然,在可用时),如上所示。但您也可以为所有 !MayaVi2 会话设置背景/前景颜色。请参见 [:Cookbook/MayaVi/Tips: Cookbook/MayaVi/Tips]。因此,您的背景和前景颜色可能(实际上必须)与此处显示的图片中的颜色不同。

轮廓模块

这个非常简单的模块没有什么特别之处。

开始导入轮廓模块

In [ ]
from enthought.mayavi.modules.outline import Outline

然后

In [ ]
fg_color = (0, 0, 0)    # black foreground color
o = Outline()
script.add_module(o)
o.actor.property.color = fg_color

![](files/../_static/items/attachments/MayaVi_ScriptingMayavi2_BasicModules/basic_outline.png

轴模块

对于轴,您可以设置多个参数

* color for axes;\ * color for labels;\ * labels name;\ * and label format.

您可以键入以下内容

In [ ]
from enthought.mayavi.modules.axes import Axes

然后

In [ ]
a = Axes()
script.add_module(a)
a.axes.property.color = fg_color                     # color for axes
a.axes.axis_title_text_property.color = fg_color     # color for axes title
a.axes.x_label = "Lx"                                # label for Ox axis
a.axes.y_label = "Ly"                                # label for Oy axis
a.axes.z_label = "Lz"                                # label for Oz axis
a.axes.label_format = ""                             # no dimensions displayed
a.axes.axis_label_text_property.color = fg_color     # in case we want to display them

标签格式是沿 Ox、Oy 和 Oz 轴的尺寸格式。默认情况下,它设置为 %6.3g。

![](files/../_static/items/attachments/MayaVi_ScriptingMayavi2_BasicModules/basic_axes.png)

方向轴模块

!方向轴模块将在渲染窗口的角落显示一个小三面体,显示三个轴 Ox、Oy、Oz 的方向。

注意:为了使用此模块,必须安装 VTK > 5.0。

这里没有什么特别之处,就像轮廓模块一样,您可以设置标签颜色

In [ ]
from enthought.mayavi.modules.orientation_axes import OrientationAxes

In [ ]
oa = OrientationAxes()
script.add_module(oa)
oa.text_property.color = fg_color

![](files/../_static/items/attachments/MayaVi_ScriptingMayavi2_BasicModules/basic_orientationaxes.png)

文本模块

您可以使用此模块为渲染窗口显示标题。

您需要一个文本(一个字符串),并且必须使用 x_position 和 y_position 参数在窗口中设置其位置(坐标在 x 和 y 中从 0 到 1)。

然后您可以设置文本的高度和宽度

In [ ]
from enthought.mayavi.modules.text import Text

In [ ]
# I like my title centered and at top of the window
t = Text()
t.text = "My Title Centered at the Top"
script.add_module(t)
t.actor.scaled_text = False
t.actor.text_property.font_size = 34
t.actor.text_property.color = fg_color
# have to find out text width to center it. Tricky, but works fine. Thanks to Prabhu.
t.width = 1.0*t.actor.mapper.get_width(t.scene.renderer)/t.scene.renderer.size[0]
height = 1.0*t.actor.mapper.get_height(t.scene.renderer)/t.scene.renderer.size[1]
t.x_position = 0.5-t.width/2
t.y_position = 1-height

![](files/../_static/items/attachments/MayaVi_ScriptingMayavi2_BasicModules/basic_title.png)

现在,我们将介绍如何设置颜色条,称为“标量”或“矢量”颜色条。它取决于您在文件中拥有的数据。

设置颜色条

严格来说,颜色条不是一个模块,也就是说,您不需要使用 add_module() 命令添加它:您必须将“module_manager”对象与之前加载的模块关联,例如 Text 模块。

然后,您可以按如下方式配置颜色条(关键字不言自明)

In [ ]
mmsclut = t.module_manager.scalar_lut_manager
mmsclut.show_scalar_bar = True
mmsclutsc = mmsclut.scalar_bar
mmsclutsc.orientation = "vertical"    # or "horizontal"
mmsclutsc.width = 0.1
mmsclutsc.height = 0.8
mmsclutsc.position = (0.01, 0.15)     # color bar located to the left of the rendering window
mmsclutsc.label_text_property.color = fg_color
mmsclutsc.title_text_property.color = fg_color
mmsclut.number_of_labels = 10
mmsclut.number_of_colors = 64
mmsclut.data_name = "My Label"

![](files/../_static/items/attachments/MayaVi_ScriptingMayavi2_BasicModules/basic_colorbar.png)

注意:要为矢量而不是标量配置颜色条,请将上面的“scalar_lut_manager”替换为“vector_lut_manager”。

最后,为了结束“基本”模块部分,让我们看看如何设置场景。

设置场景

通过“设置场景”,您需要阅读“场景将如何被看到”:例如,设置背景颜色和场景的视角。

像往常一样,使用 python & TVTK 设置这些参数非常容易。

如果您想更改背景颜色,您可能还需要更改所有模块的前景色。我们在这里提醒一下。

In [ ]
#! /usr/bin/env python

from enthought.mayavi.modules.outline import Outline
from enthought.mayavi.modules.axes import Axes
from enthought.mayavi.modules.orientation_axes import OrientationAxes
from enthought.mayavi.modules.text import Text

# we want a dark foreground color on a bright background
fg_color = (0.06666, 0.06666, 0.1804)   # dark blue
bg_color = (1, 1, 0.94118)              # ivory

# setting foreground color for Outline module
o = Outline()
script.add_module(o)
o.actor.property.color = fg_color

# setting foreground color for Axes module
a = Axes()
script.add_module(a)
a.axes.property.color = fg_color                     # color for axes
a.axes.axis_title_text_property.color = fg_color     # color for axes label
a.axes.x_label = "Lx"                                # label for Ox axis
a.axes.y_label = "Ly"                                # label for Oy axis
a.axes.z_label = "Lz"                                # label for Oz axis
a.axes.label_format = ""                             # no dimensions displayed


# setting foreground color for OrientationAxes module
oa = OrientationAxes()
script.add_module(oa)
oa.text_property.color = fg_color

# setting foreground color for Text module
t = Text()
t.text = "My Title Centered at the Top"
script.add_module(t)
t.actor.scaled_text = False
t.actor.text_property.font_size = 34
t.actor.text_property.color = fg_color
t.width = 1.0*t.actor.mapper.get_width(t.scene.renderer)/t.scene.renderer.size[0]
height = 1.0*t.actor.mapper.get_height(t.scene.renderer)/t.scene.renderer.size[1]
t.x_position = 0.5-t.width/2
t.y_position = 1-height

# setting foreground color for labels and title color bar.
mmsclut = t.module_manager.scalar_lut_manager
mmsclut.show_scalar_bar = True
mmsclutsc = mmsclut.scalar_bar
mmsclutsc.orientation = "vertical"
mmsclutsc.width = 0.1
mmsclutsc.height = 0.8
mmsclutsc.position = (0.01, 0.15)
mmsclutsc.label_text_property.color = fg_color
mmsclutsc.title_text_property.color = fg_color
mmsclut.number_of_labels = 10
mmsclut.number_of_colors = 64
mmsclut.data_name = "My Label"

# setting background color for the scene.
t.scene.background = bg_color

一些视角也在 !MayaVi2 中预定义。

如果您想

* Ox 轴 垂直于 场景:使用 x_plus_view() (朝向) 或 x_minus_view() (向后) 方法;

* Oy 轴 垂直于 场景:使用 y_plus_view() (朝向) 或 y_minus_view() (向后) 方法;

* Oz 轴 垂直于 场景:使用 z_plus_view() (朝向) 或 z_minus_view() (向后) 方法;

* 等轴测视图 (坐标法线为 (1, 1, 1)),使用 isometric_view 方法。

您也可以

* 设置您的需求的仰角和方位角(以度为单位);

* 设置场景的缩放比例。

In [ ]
t.scene.x_plus_view()
t.scene.camera.azimuth(62)
t.scene.camera.elevation(19.5)
t.scene.camera.zoom(1.5)

最后,您可以选择是否要为您的场景使用透视视图或平行投影

In [ ]
t.scene.camera.parallel_projection = True

![](files/../_static/items/attachments/MayaVi_ScriptingMayavi2_BasicModules/basic_scene_parall.png

用于平行投影,或

In [ ]
t.scene.camera.parallel_projection = False

用于透视视图。

这里,“t”代表之前加载的 Text 模块。

注意:您可以为场景设置许多其他参数。请参阅 [:Cookbook/MayaVi/Tips: Cookbook/MayaVi/Tips] 以了解有关设置参数模块的更多信息。

现在,是时候阅读最有趣的部分了:配置和使用与您的数据交互的模块和过滤器。

章节作者:FredericPetit

附件