2009年8月16日星期日

美黑运动

21世纪末期,非洲国家异军突起,经济和军事实力傲视全球,为核战废墟中重建的亚欧北美提供了巨大的人力物力资金支持,非洲文化也随之风靡世界。例如,黑肤丰肌受到爱美人士的推崇,日光浴和户外健身热潮迭起。尤其是黄种人妇女,摆脱了美白的困扰,走出室外,亲近自然,投入轰轰烈烈的阳光健身运动,又称美黑运动。此名字并不贴切,非黑种人妇女没有像历史上追求白人肤色那样追求黑人肤色,而是崇尚健康自然。关于此名字的流行,有大量的学术著作进行探讨,是美黑学的重要组成部分。

据有关机构统计,由于妇女健身狂潮,男女平均寿命差屡创新高。另一个相关因素——男性战争伤亡,由于众所周知的原因未被媒体提及。著名搜索引擎Hoohle显示,2199年的搜索关键字中,“三八男人节”首次超过“三八妇女节”的搜索次数。由于影响深远,美黑运动与历史上欧洲妇女解除束胸、中国妇女解除裹脚,一并被誉为三大妇女解放运动,是核战带来的唯一积极后果。

护肤品制造商与时俱进,雪肌类型换成了墨黑系列。据称,增强阳光吸收并保持皮肤光洁远比阻止阳光制造白皙效果困难得多,因而科技含量更高。“墨一样黑亮,墨一样柔腻”的广告词脍炙人口,中国的徽墨也受惠与此,销量大增,甚至受到收藏家追捧。

男人也深受美黑运动的影响。据报道,死于忧郁症的欧洲著名白人舞蹈艺人逊克杰生前酷爱日光浴,甚至睡觉时也要用500W的白炽灯照着,有人怀疑其严重的忧郁症与此有关。
......


在海滨浴场游泳时,大铃为了防止晒出色斑,带着帽子撑着伞,只在岸边踩踩水,遂有上面的胡思乱想。
[......]

2009年8月7日星期五

Mayavi2 用户手册4——使用Mayavi应用程序

内容来自Mayavi2的中文文档项目。本篇文档的源文件在这里。欢迎感兴趣的朋友加入。其他文档的帖子在这里

章节概要

本章主要关注如何使用mayavi2应用程序。这里的一些内容也适用于在脚本中使用mayavi。我们建议新用户阅读此章以获得关于交互使用库程序的知识。

用户界面(UI)的通常布局

mayavi2应用程序启动时,将出现一个如下图所示的用户界面。

Mayavi的初始用户界面窗口

Mayavi的初始用户界面窗口

此用户界面包括如下几部分。

菜单

使用菜单可以打开文件,载入模块,设置首选项等。

Mayavi引擎树视图(engine tree view)

这是mayavi管道的树视图。 * 右键单击一个树节点可以可以重命名、删除、复制对象。

  • 左键单击一个节点,可以在树视图下面的对象编辑器中编辑其属性。

  • 可以在树视图上拖动节点。例如可以把一个模块从一组模块拖到另一组,或者把一个场景从一个可视化移到另一个可视化。

对象编辑器(object editor)

当单击mayavi管道中的一个对象时,在这里可以编辑其属性。

TVTK场景(scene)

这里显示数据可视化结果。可以使用鼠标和键盘与场景交互。更多细节在下面的章节中。

Python解释器(interpreter)

内置的Python解释器可以用来执行mayavi脚本和做其他事情。可以从mayavi的树视图内将节点拖到解释器内,然后对此节点所代表的对象编写脚本。

如果你安装了高于0.9.1的IPython,Python解释器将使用IPython。

日志(Logger)

可以在此查看应用程序日志消息。

Mayavi的用户界面布局具有高可配置性:

  • 可以拖动各部分之间的线以改变相应视图的大小。

  • 大部分标签可以拖到程序内的任意地方。

  • 每个视图(mayavi引擎视图,对象编辑器,python解释器和日志)都可以在“View”菜单中打开和关闭。

每次改变mayavi的界面设置,都被保存下来,下一次启动应用程序会保持相同的设置。另外,也可以使用View->Perspectives菜单项将不同的布局保存为不同的“perspectives”。

下面是一个特定配置的mayavi用户界面。这里各部分的大小都被改变了。

特定配置的mayavi用户界面

特定配置的mayavi用户界面

可视化数据

在Mayavi中可视化数据可通过下列步骤实现:将数据载入为数据源(data sources),将可视化模块应用于这些数据源以可视化数据,更多描述请参考an-overview-of-mayavi和learning-mayavi-by-example。

在使用模块过滤器之前,需要载入数据或进行类似的操作。Mayavi支持几种数据文件格式,最主要的是VTK数据文件格式。或者,mlab 可用来从numpy矩阵中载入数据。关于数据结构的更多信息,请参考 data-structures-used-by-mayavi。

数据被载入后,就可以使用各种过滤器filters过滤或其他方法修改数据,然后使用几个模块 modules来可视化数据。

这里列出所有的Mayavi模块过滤器。此列表作为参考很有用:

Unknown element:
.. toctree::

modules.rst filters.rst

与场景交互

在用户界面中的TVTK场景可以通过单击标签的“x”图标来关闭。每个场景有一个工具栏,包括各种功能:

  • 设置沿着X、Y和Z轴正负方向的等比例视图的按钮。

  • 打开平行投影代替默认的透视投影的按钮。查看二维图形时特别有用。

  • 显示xyz坐标轴的按钮。

  • 打开全屏视图的按钮。注意,进入全屏模式后,可以输入“q”或“e”回到正常窗口。

  • 将场景保存为各种图形格式的按钮。图形格式取决于文件后缀。

  • 打开场景配置界面的按钮。

与场景交互的主要方法是使用鼠标和键盘。

鼠标交互

有两种鼠标交互的模式。

  • 照相机模式:默认模式,使用鼠标操作照相机。输入“c”键可激活此模式。

  • 角色模式(Actor mode):使用鼠标操作其所指向的角色。输入“a”键可激活此模式。

场景视图可以通过操作鼠标进行变换,通常是按住鼠标键然后拖动从而完成操作。

  • 按住鼠标左键并拖动将在移动的方向上旋转照相机/角色。

    • 同时按住“SHIFT”键将移动场景——正如按住鼠标中键并拖动一样。

    • 同时按住“CONTROL”将围绕照相机焦点旋转。

    • 同时按住“SHIFT”和“CONTROL”并向上拖动将放大,向下则缩小。这与右键相同。

  • 按住右键并向上拖动将放大(或增加角色比例),向下拖动则缩小(或减小角色比例)。

  • 按住鼠标中键并拖动将移动场景或移动(translate)对象。

  • 向上滚动鼠标滚轮将放大,反之缩小。

键盘交互

场景支持下列键盘命令:

  • '3': 打开/关闭立体渲染(stereo render)。如果“stereo”首选项没有设为True,此命令可能无效。

  • 'a': 将鼠标交互设为角色模式。

  • 'c': 将鼠标交互设为照相机模式。

  • 'e'/'q'/'Esc': 退出全屏模式。

  • 'f': 将照相机焦点移到鼠标所指位置。这将移动照相机焦点从而将视图中心移动至鼠标所指位置。

  • 'j': 将鼠标交互设为操纵杆模式。在操纵杆模式中,鼠标在一定程度上模拟操纵杆。例如,按住鼠标左键从中心移开将转动场景。

  • 'l': 配置场景的照明。这将打开一个弹出窗口以改变照明设置。

  • 'p': 获取鼠标位置处的数据。这将打开一个弹出窗口显示获取的数据。此界面允许用户改变获取数据的来源:单元(cell),点(point),或任意点(arbitrary point)。

  • 'r': 重置照相机焦点和位置。这是个很方便的命令。

  • 's': 将场景保存为图片。这将打开一个文件选择对话框,文件名后缀决定图片类型。

  • 't': 将鼠标交互设为轨迹球模式(trackball mode),此为鼠标交互的默认模式。

  • '='/'+': 放大。

  • '-': 缩小。

  • '方向键': 按方向键可以转动照相机。同时按下"SHIFT"键,则移动照相机。

内置的Python解释器

内置的Python解释器为产生超强功能提供了可能性。此解释器具有命令补全、文档自动生成、工具提示和多行编辑等功能。另外,它还提供下列功能:

  • 名字mayavi自动地绑定到enthought.mayavi.script.Script实例,方便编写mayavi脚本。

  • 名字``application``绑定到envisage程序。

  • 如果通过File->Open File...菜单项打开Python文件,可以使用一个具有语法高亮功能的编辑器对其编辑。使用Control-r可以执行脚本,Control-s可保存文件,当编写简单mayavi脚本时很方便。也可以使用Control-nControl-s增大和减少字体。

  • 正如上面提到的,可以从Mayavi引擎树视图中将节点拖入Python解释器,对象将被正常写入脚本语句。通常使用的模式如下:

       >>> tvtk_scene_1

    >>> s = _

    在此例中,名称\ ``s``\ 被绑定到拖入的tvtk_scene对象。\ ``_``\ 变量保存了最后使用的表达式,这里即为拖入的对象。使用\ ``tvtk_scene_1``\ 也可以,但此变量名称是系统自动生成的,其中的数字没有具体含义(mouthful)。

自动生成脚本

Mayavi具有非常便利和强大的脚本记录功能,可用于下列方面:

  • 将所有操作记录为易于阅读的Python脚本,可以用来重新生成可视化结果。

  • 易于学习Mayavi的编码基础和如何编辑脚本。

录制mayavi操作为脚本

这里是使用此功能的方法:

  1. 当启动mayavi2程序时,引擎视图(树视图)的工具栏有一个红色的记录图标,在问号图标旁边,单击此图标。此操作也可以在独立的mlab会话中进行。

  2. 将弹出一个窗口,其中有一些样本代码行,可以独立运行或使用下列方式运行:mayavi2 -x script.py或者python script.py

  3. 在UI内进行想做的操作,此时可以看到执行这些操作所需的代码。例如,产生一个新数据源(通过增加节点对话框,文件菜单或右键单击任意选项),然后增加一个模块/过滤器等等。在树视图中编辑对象。

  4. 移动UI中的照相机,旋转,放大,缩小。所有这些操作将产生相应的代码。对于照相机,只有最终位置被存下来(否则将产生无数无用的代码行)。对于场景的主要键盘操作将被记录(除了 'c'/'t'/'j'/'a')。这意味着程序将记录方向键和'+'/'-'键等。

    进行操作的同时代码被更新,这是学习mayavi API的好方式。

  5. 完成操作后,再次单击记录图标,程序将询问保存文件的名称,例如script.py。如果只对代码感兴趣而不愿保存文件,单击'cancel'。

  6. 关闭记录窗口,退出Mayavi(如果你愿意)。

  7. 现在从解释器输入:

     $  mayavi2 -x script.py

    或:

     $ python script.py

    这样将运行所有代码,回到你上次离开时的状态。你可以自由地修改此脚本--事实上这正是自动代码生成的意义所在!

也可以对现有的Mayavi会话进行编程,理解这一点很重要。所以,如果启动mayavi后,你做了一些操作,或运行一个mayavi脚本,接着想记录以 后的操作,这是可以完成的。按照以前一样的流程进行即可。这里需要记住的一点是脚本记录器不创建你在此会话中已经建立的对象。

Note

也可以删除或拖动mayavi树视图中的对象。然而这可能不是你想在自动记录的脚本中所进行的操作。

正如前面所谈到的,脚本记录在mlab会话中或其他使用mayavi的地方都有效。任何mlab专用代码不会被记录,只有使用OO Mayavi API的代码才会被记录下来。

限制

脚本记录器将记录大多数重要的操作。但不支持下列操作:

  • 在场景中,“c”/“t”/“j”/“a”/“p”按键操作不能正确地记录。原因在于其实现非常复杂,对于基本的脚本编写没有必要。

  • 对界面的任意的脚本显然不会正常工作。

  • 只有改变特性(trait)和执行的特定方法(call)能被记录在代码中。所以执行任意对象的任意方法通常不会被记录下来,只有mayavi引擎的特定方法可以被记录下来。

命令行参数

下面的章节将介绍几个``mayavi2``应用程序的命令行参数。这些介绍也可以在mayavi2的用户手册中找到。

完整的管道可以通过命令行建立起来,所以Mayavi可以集成在shell脚本中提供可视化功能。

可以如下运行Mayavi:

 mayavi2 [options] [args]

这里的arg1arg2等等是可选的文件名,对应于已经保存的Mayavi2可视化(filename.mv2),Mayavi2脚本(filename.py)或任何Mayavi支持的数据文件。如果没有提供参数或选项,mayavi将以默认的空白场景启动。

这些选项如下:

-h

打印所有命令行选项然后退出。与--help相同。

-V

打印Mayavi版本然后退出。与--version相同。

-z file_name

载入之前保存的Mayavi2可视化。与--viz file_name--visualization file_name相同。

-d data_file

打开所支持格式的数据文件或非文件的数据源对象,包括VTK文件格式(.vtk, .xml, .vt[i,p,r,s,u], .pvt[i,p,r,s,u]),VRML2 (.wrl),3D Studio (.3ds),PLOT3D (*.xyz)和其他所支持的格式。

data_file``也可以是非文件的数据源,例如\ ``ParametricSurfacePointLoad将载入对应的数据源。本选项与--data相同。

-m module-name

模块是事际上对数据进行可视化的对象。给定的module-name将被载入当前ModuleManager。模块名字必须有效,否则将得到出错信息。

如果模块像这样给出:package.sub.module.SomeModule,那么模块(SomeModule)将从``package.sub.module``中导入。mayavi2的标准模块不需要完整路径,例如:

 mayavi2 -d data.vtk -m Outline -m user_modules.AModule

在此例中,Outline是标准模块,user_modules.AModule是某个用户自定义模块。本选项与--module相同。

-f filter-name

过滤器是以某种方式过滤数据的对象。filter-name将载入并对应于当前的源对象或过滤器对象。过滤器必须有效,否则将得到出错信息。

如果过滤器像这样给出:package.sub.filter.SomeFilter,那么过滤器(SomeFilter)将从package.sub.filter导入。mayavi2的标准过滤器不需要完整路径。例如:

 mayavi2 -d data.vtk -f ExtractVectorNorm -f user_filters.AFilter

在此例中,ExtractVectorNorm是一个标准过滤器,user_filters.AFilter是某个用户定义的过滤器。本选项与--filter相同。

-M

在Mayavi管道中启动一个新模块管理器。与--module-mgr相同。

-n

建立一个新窗口或场景。在此之后的选项将作用于新创建的场景。与--new-window相同。

-o

在offscreen模式下运行Mayavi,没有任何图形用户界面。此模式在需要后台渲染图片(例如动画)时非常有用,避免弹出扰人的用户界面。Mayavi脚本(通过-x选项运行)应该在此模式下工作得很好。与--offscreen相同。

-x script-file

运行给定的脚本,同时确保名字空间中的“mayavi”是Mayavi的脚本实例 --就像在内置的Python解释器内一样。与--exec相同.

-s python-expression

对最后建立的对象执行Python命令。假设前一个对象是个模块,如果要设置其颜色并保存场景,可以这样做:

 $ mayavi2 [...] -m Outline -s"actor.property.color = (1,0,0)" \
-s "scene.save('test.png', size=(800, 800))"

应在命令前后使用引号。本选项与--set相同。

Warning

-x--exec使用execfile,如果脚本做不合适的操作将很危险。类似的,-s--set使用exec,如不适当使用也很危险。

还有很重要的一点,mayavi的命令行参数是按照给出顺序依次处理的。由此用户可以实现一些有趣的操作。

下面是一些命令行参数的例子:

 $ mayavi2 -d ParametricSurface -s "function='dini'" -m Surface \
-s "module_manager.scalar_lut_manager.show_scalar_bar = True" \
-s "scene.isometric_view()" -s "scene.save('snapshot.png')"

$ mayavi2 -d heart.vtk -m Axes -m Outline -m GridPlane \
-m ContourGridPlane -m IsoSurface

$ mayavi2 -d fire_ug.vtu -m Axes -m Outline -m VectorCutPlane \
-f MaskPoints -m Glyph

在上面的例子中,heart.vtkfire_ug.vtu等VTK文件可以在源文件目录的examples/data中找到。它们是否安装到你的电脑取决于你的操作系统。

[......]

2009年8月4日星期二

天神脸谱


从杂志封面上看到“青森ねぶた祭”的一个大型灯笼的照片,于是将其脸部画下来。可是没有规划好大小,头盔画不下了。

“青森ねぶた祭”是日本青森县的著名节日,其中一个重要活动是大型灯笼游行。灯笼造型多取材于天神(菅原道真 雷神と化す)或古代英雄(義経渡海),有一些甚至出自三国志(呉軍の先鋒・鈴の甘寧)和水浒传(水滸伝より「黒旋風・李逵と張順」)。详情可查看下面的网站:

[......]