Contents
- Introduction
- Example using IsoSurface Module (contour.py)
- Example using Glyph Module (glyph.py)
- Example without Mayavi2 UI (nongui.py)
- Example with a 3D array as numerical source (numeric_source.py)
- Example using Streamline Module (streamline.py)
- Example using ImagePlaneWidget Module (test.py)
- Example using mlab (surf_regular_mlab.py)
This page presents scripting Mayavi2 using the advanced, object-oriented API. Mayavi2 has recently acquired an easy-to-use, thought maybe not as powerful, scripting module: mlab. You are invited to refer to the section of Mayavi2 user guide. |
Introduction
Here, you will be presented some examples of rendering scenes you can get with MayaVi2. You are advised to read Cookbook/MayaVi/ScriptingMayavi2 to understand what you see, although most examples given here are self-explanatory.
Please note that these examples are not up to date. The example gallery for the latest version of Mayavi can be found at http://enthought.github.com/mayavi/mayavi/auto/examples.html. |
Example using IsoSurface Module (contour.py)
1 #!/usr/bin/env mayavi2
2
3 """This script demonstrates how one can script MayaVi and use its
4 contour related modules. Notice the magic line at the top.
5 """
6 # Author: Prabhu Ramachandran <prabhu_r@users.sf.net>
7 # Copyright (c) 2005-2007, Enthought, Inc.
8 # License: BSD Style.
9
10 # Standard library imports
11 from os.path import join, dirname
12
13 # Enthought library imports
14 import enthought.mayavi
15 from enthought.mayavi.sources.vtk_file_reader import VTKFileReader
16 from enthought.mayavi.filters.threshold import Threshold
17 from enthought.mayavi.modules.outline import Outline
18 from enthought.mayavi.modules.grid_plane import GridPlane
19 from enthought.mayavi.modules.contour_grid_plane import ContourGridPlane
20 from enthought.mayavi.modules.iso_surface import IsoSurface
21 from enthought.mayavi.modules.scalar_cut_plane import ScalarCutPlane
22
23
24 def contour():
25 """The script itself. We needn't have defined a function but
26 having a function makes this more reusable.
27 """
28 # 'mayavi' is always defined on the interpreter.
29 # Create a new scene.
30 mayavi.new_scene()
31
32 # Read a VTK (old style) data file.
33 r = VTKFileReader()
34 r.initialize(join(dirname(enthought.mayavi.__file__),
35 'examples', 'data', 'heart.vtk'))
36 mayavi.add_source(r)
37
38 # Create an outline for the data.
39 o = Outline()
40 mayavi.add_module(o)
41
42 # Create three simple grid plane modules.
43 # First normal to 'x' axis.
44 gp = GridPlane()
45 mayavi.add_module(gp)
46 # Second normal to 'y' axis.
47 gp = GridPlane()
48 mayavi.add_module(gp)
49 gp.grid_plane.axis = 'y'
50 # Third normal to 'z' axis.
51 gp = GridPlane()
52 mayavi.add_module(gp)
53 gp.grid_plane.axis = 'z'
54
55 # Create one ContourGridPlane normal to the 'x' axis.
56 cgp = ContourGridPlane()
57 mayavi.add_module(cgp)
58 # Set the position to the middle of the data.
59 cgp.grid_plane.position = 15
60
61 # Another with filled contours normal to 'y' axis.
62 cgp = ContourGridPlane()
63 mayavi.add_module(cgp)
64 # Set the axis and position to the middle of the data.
65 cgp.grid_plane.axis = 'y'
66 cgp.grid_plane.position = 15
67 cgp.contour.filled_contours = True
68
69 # An isosurface module.
70 iso = IsoSurface(compute_normals=True)
71 mayavi.add_module(iso)
72 iso.contour.contours = [220.0]
73
74 # An interactive scalar cut plane.
75 cp = ScalarCutPlane()
76 mayavi.add_module(cp)
77 cp.implicit_plane.normal = 0,0,1
78
79
80 if __name__ == '__main__':
81 contour()
Example using Glyph Module (glyph.py)
1 #!/usr/bin/env mayavi2
2
3 """This script demonstrates the use of a VectorCutPlane, splitting the
4 pipeline using a MaskPoints filter and then viewing the filtered data
5 with the Glyph module.
6 """
7 # Author: Prabhu Ramachandran <prabhu_r@users.sf.net>
8 # Copyright (c) 2005-2007, Enthought, Inc.
9 # License: BSD Style.
10
11 # Standard library imports
12 from os.path import join, dirname
13
14 # Enthought library imports
15 import enthought.mayavi
16 from enthought.mayavi.sources.vtk_xml_file_reader import VTKXMLFileReader
17 from enthought.mayavi.modules.outline import Outline
18 from enthought.mayavi.modules.glyph import Glyph
19 from enthought.mayavi.modules.vector_cut_plane import VectorCutPlane
20 from enthought.mayavi.modules.vectors import Vectors
21 from enthought.mayavi.filters.mask_points import MaskPoints
22
23
24 def glyph():
25 """The script itself. We needn't have defined a function but
26 having a function makes this more reusable.
27 """
28 # 'mayavi' is always defined on the interpreter.
29 # Create a new VTK scene.
30 mayavi.new_scene()
31
32 # Read a VTK (old style) data file.
33 r = VTKXMLFileReader()
34 r.initialize(join(dirname(enthought.mayavi.__file__),
35 'examples', 'data', 'fire_ug.vtu'))
36 mayavi.add_source(r)
37
38 # Create an outline and a vector cut plane.
39 mayavi.add_module(Outline())
40
41 v = VectorCutPlane()
42 mayavi.add_module(v)
43 v.glyph.color_mode = 'color_by_scalar'
44
45 # Now mask the points and show glyphs (we could also use
46 # Vectors but glyphs are a bit more generic)
47 m = MaskPoints()
48 m.filter.set(on_ratio=10, random_mode=True)
49 mayavi.add_filter(m)
50
51 g = Glyph()
52 mayavi.add_module(g)
53 # Note that this adds the module to the filtered output.
54 g.glyph.scale_mode = 'scale_by_vector'
55 # Use arrows to view the scalars.
56 g.glyph.glyph_source = g.glyph.glyph_list[1]
57
58
59 if __name__ == '__main__':
60 glyph()
Example without Mayavi2 UI (nongui.py)
1 #!/usr/bin/env python
2
3 """This script demonstrates how one can use the MayaVi framework
4 without displaying MayaVi's UI. Note: look at the end of this file to
5 see how the non gui plugin is chosen instead of the default gui
6 mayavi plugin.
7
8 """
9 # Author: Prabhu Ramachandran <prabhu_r@users.sf.net>
10 # Copyright (c) 2005, Enthought, Inc.
11 # License: BSD Style.
12
13 # On systems with multiple wx installations installed, pick one that works
14 # with the libraries Mayavi depends on.
15 try:
16 import wxversion
17 wxversion.ensureMinimal('2.6')
18 except ImportError:
19 pass
20
21 # Standard library imports
22 import sys
23 from os.path import join, dirname
24
25 # Enthought library imports
26 from enthought.mayavi.app import Mayavi, NONGUI_PLUGIN_DEFINITIONS
27
28
29 class MyApp(Mayavi):
30 def run(self):
31 """This is executed once the application GUI has started.
32 *Make sure all other MayaVi specific imports are made here!*
33 """
34
35 # Various imports to do different things.
36 from enthought.mayavi.sources.vtk_file_reader import VTKFileReader
37 from enthought.mayavi.modules.outline import Outline
38 from enthought.mayavi.modules.axes import Axes
39 from enthought.mayavi.modules.grid_plane import GridPlane
40 from enthought.mayavi.modules.image_plane_widget import ImagePlaneWidget
41 from enthought.mayavi.modules.text import Text
42 from enthought.mayavi.modules.contour_grid_plane import ContourGridPlane
43 from enthought.mayavi.modules.iso_surface import IsoSurface
44
45 script = self.script
46
47 # Create a new scene.
48 script.new_scene()
49
50 # Read a VTK (old style) data file.
51 r = VTKFileReader()
52 r.initialize('data/heart.vtk')
53 r.initialize(join(dirname(__file__), 'data', 'heart.vtk'))
54 script.add_source(r)
55
56 # Put up some text.
57 t = Text(text='MayaVi rules!', x_position=0.2, y_position=0.9, width=0.8)
58 t.property.color = 1, 1, 0 # Bright yellow, yeah!
59 script.add_module(t)
60
61 # Create an outline for the data.
62 o = Outline()
63 script.add_module(o)
64
65 # Create an axes for the data.
66 a = Axes()
67 script.add_module(a)
68
69 # Create three simple grid plane modules.
70 # First normal to 'x' axis.
71 gp = GridPlane()
72 script.add_module(gp)
73 # Second normal to 'y' axis.
74 gp = GridPlane()
75 gp.grid_plane.axis = 'y'
76 script.add_module(gp)
77 # Third normal to 'z' axis.
78 gp = GridPlane()
79 script.add_module(gp)
80 gp.grid_plane.axis = 'z'
81
82 # Create one ImagePlaneWidget.
83 ipw = ImagePlaneWidget()
84 script.add_module(ipw)
85 # Set the position to the middle of the data.
86 ipw.ipw.slice_position = 16
87
88 # Create one ContourGridPlane normal to the 'x' axis.
89 cgp = ContourGridPlane()
90 script.add_module(cgp)
91 # Set the position to the middle of the data.
92 cgp.grid_plane.axis = 'y'
93 cgp.grid_plane.position = 15
94
95 # An isosurface module.
96 iso = IsoSurface(compute_normals=True)
97 script.add_module(iso)
98 iso.contour.contours = [200.0]
99
100 # Set the view.
101 s = script.engine.current_scene
102 cam = s.scene.camera
103 cam.azimuth(45)
104 cam.elevation(15)
105 s.render()
106
107
108 if __name__ == '__main__':
109 m = MyApp()
110 # Note how we change the plugins that are loaded only here.
111 m.main(plugin_defs=NONGUI_PLUGIN_DEFINITIONS)
Example with a 3D array as numerical source (numeric_source.py)
1 #!/usr/bin/env mayavi2
2
3 """This script demonstrates how to create a numpy array data and
4 visualize it as image data using a few modules.
5
6 """
7 # Author: Prabhu Ramachandran <prabhu_r@users.sf.net>
8 # Copyright (c) 2005-2007, Enthought, Inc.
9 # License: BSD Style.
10
11 # Standard library imports
12 import enthought.util.scipyx as scipy
13
14 # Enthought library imports
15 from enthought.mayavi.sources.array_source import ArraySource
16 from enthought.mayavi.modules.outline import Outline
17 from enthought.mayavi.modules.image_plane_widget import ImagePlaneWidget
18
19
20 def make_data(dims=(128, 128, 128)):
21 """Creates some simple array data of the given dimensions to test
22 with."""
23 np = dims[0]*dims[1]*dims[2]
24
25 # Create some scalars to render.
26 x, y, z = scipy.ogrid[-5:5:dims[0]*1j,-5:5:dims[1]*1j,-5:5:dims[2]*1j]
27 x = x.astype('f')
28 y = y.astype('f')
29 z = z.astype('f')
30
31 scalars = (scipy.sin(x*y*z)/(x*y*z))
32 return scipy.transpose(scalars).copy() # This makes the data contiguous.
33
34
35 def view_numpy():
36 """Example showing how to view a 3D numpy array in mayavi2.
37 """
38 # 'mayavi' is always defined on the interpreter.
39 mayavi.new_scene()
40 # Make the data and add it to the pipeline.
41 data = make_data()
42 src = ArraySource(transpose_input_array=False)
43 src.scalar_data = data
44 mayavi.add_source(src)
45 # Visualize the data.
46 o = Outline()
47 mayavi.add_module(o)
48 ipw = ImagePlaneWidget()
49 mayavi.add_module(ipw)
50 ipw.module_manager.scalar_lut_manager.show_scalar_bar = True
51
52 ipw_y = ImagePlaneWidget()
53 mayavi.add_module(ipw_y)
54 ipw_y.ipw.plane_orientation = 'y_axes'
55
56
57 if __name__ == '__main__':
58 view_numpy()
Example using Streamline Module (streamline.py)
1 #!/usr/bin/env mayavi2
2 """This script demonstrates how one can script MayaVi to display
3 streamlines and an iso surface.
4 """
5 # Author: Prabhu Ramachandran <prabhu_r@users.sf.net>
6 # Copyright (c) 2005-2007, Enthought, Inc.
7 # License: BSD Style.
8
9 # Standard library imports
10 from os.path import join, dirname
11
12 # Enthought library imports
13 from enthought.mayavi.sources.vtk_xml_file_reader import VTKXMLFileReader
14 from enthought.mayavi.modules.outline import Outline
15 from enthought.mayavi.modules.streamline import Streamline
16 from enthought.mayavi.modules.iso_surface import IsoSurface
17
18
19 def setup_data(fname):
20 """Given a VTK XML file name `fname`, this creates a mayavi2
21 reader for it and adds it to the pipeline. It returns the reader
22 created.
23 """
24 mayavi.new_scene()
25 r = VTKXMLFileReader()
26 r.initialize(fname)
27 mayavi.add_source(r)
28 return r
29
30 def streamline():
31 """Sets up the mayavi pipeline for the visualization.
32 """
33 # Create an outline for the data.
34 o = Outline()
35 mayavi.add_module(o)
36
37 s = Streamline(streamline_type='tube')
38 mayavi.add_module(s)
39 s.stream_tracer.integration_direction = 'both'
40 s.seed.widget.center = 3.5, 0.625, 1.25
41 s.module_manager.scalar_lut_manager.show_scalar_bar = True
42
43 i = IsoSurface()
44 mayavi.add_module(i)
45 i.contour.contours[0] = 550
46 i.actor.property.opacity = 0.5
47
48
49 if __name__ == '__main__':
50 import enthought.mayavi
51 fname = join(dirname(enthought.mayavi.__file__),
52 'examples', 'data', 'fire_ug.vtu')
53 r = setup_data(fname)
54 streamline()
Example using ImagePlaneWidget Module (test.py)
1 #!/usr/bin/env python
2
3 """This script demonstrates how one can script MayaVi, set its size,
4 create a new VTK scene and create a few simple modules.
5
6 """
7 # Author: Prabhu Ramachandran <prabhu_r@users.sf.net>
8 # Copyright (c) 2005, Enthought, Inc.
9 # License: BSD Style.
10
11 # On systems with multiple wx installations installed, pick one that works
12 # with the libraries Mayavi depends on.
13 try:
14 import wxversion
15 wxversion.ensureMinimal('2.6')
16 except ImportError:
17 pass
18
19 # Standard library imports
20 import sys
21 from os.path import join, dirname
22
23 # Enthought library imports
24 from enthought.mayavi.app import Mayavi
25
26
27 class MyApp(Mayavi):
28 def run(self):
29 """This is executed once the application GUI has started.
30 *Make sure all other MayaVi specific imports are made here!*
31 """
32 # Various imports to do different things.
33 from enthought.mayavi.sources.vtk_file_reader import VTKFileReader
34 from enthought.mayavi.filters.threshold import Threshold
35 from enthought.mayavi.modules.outline import Outline
36 from enthought.mayavi.modules.axes import Axes
37 from enthought.mayavi.modules.grid_plane import GridPlane
38 from enthought.mayavi.modules.image_plane_widget import ImagePlaneWidget
39 from enthought.mayavi.modules.text import Text
40
41 script = self.script
42 # Create a new scene.
43 script.new_scene()
44
45 # Read a VTK (old style) data file.
46 r = VTKFileReader()
47 r.initialize(join(dirname(__file__), 'data', 'heart.vtk'))
48 script.add_source(r)
49
50 # Put up some text.
51 t = Text(text='MayaVi rules!', x_position=0.2,
52 y_position=0.9, width=0.8)
53 t.property.color = 1, 1, 0 # Bright yellow, yeah!
54 script.add_module(t)
55
56 # Create an outline for the data.
57 o = Outline()
58 script.add_module(o)
59
60 # Create an axes for the data.
61 a = Axes()
62 script.add_module(a)
63
64 # Create an orientation axes for the scene. This only works with
65 # VTK-4.5 and above which is why we have the try block.
66 try:
67 from enthought.mayavi.modules.orientation_axes import OrientationAxes
68 except ImportError:
69 pass
70 else:
71 a = OrientationAxes()
72 a.marker.set_viewport(0.0, 0.8, 0.2, 1.0)
73 script.add_module(a)
74
75 # Create three simple grid plane modules.
76 # First normal to 'x' axis.
77 gp = GridPlane()
78 script.add_module(gp)
79 # Second normal to 'y' axis.
80 gp = GridPlane()
81 gp.grid_plane.axis = 'y'
82 script.add_module(gp)
83 # Third normal to 'z' axis.
84 gp = GridPlane()
85 script.add_module(gp)
86 gp.grid_plane.axis = 'z'
87
88 # Create one ImagePlaneWidget.
89 ipw = ImagePlaneWidget()
90 script.add_module(ipw)
91 # Set the position to the middle of the data.
92 ipw.ipw.slice_position = 16
93
94
95
96 if __name__ == '__main__':
97 a = MyApp()
98 a.main()
Example using mlab (surf_regular_mlab.py)
See also Cookbook/MayaVi/Surf for another way of doing this.
1 #!/usr/bin/env mayavi2
2 """Shows how to view data created by `enthought.tvtk.tools.mlab` with
3 mayavi2.
4 """
5
6 # Author: Prabhu Ramachandran <prabhu@aero.iitb.ac.in>
7 # Copyright (c) 2006-2007, Enthought Inc.
8 # License: BSD Style.
9
10 import numpy
11
12 from enthought.tvtk.tools import mlab
13 from enthought.mayavi.sources.vtk_data_source import VTKDataSource
14 from enthought.mayavi.filters.warp_scalar import WarpScalar
15 from enthought.mayavi.modules.outline import Outline
16 from enthought.mayavi.modules.surface import Surface
17
18
19 def f(x, y):
20 """Some test function.
21 """
22 return numpy.sin(x*y)/(x*y)
23
24 def make_data():
25 """Make some test numpy data and create a TVTK data object from it
26 that we will visualize.
27 """
28 x = numpy.arange(-7., 7.05, 0.1)
29 y = numpy.arange(-5., 5.05, 0.05)
30 s = mlab.SurfRegular(x, y, f)
31 return s.data
32
33 def add_data(tvtk_data):
34 """Add a TVTK data object `tvtk_data` to the mayavi pipleine.
35 """
36 d = VTKDataSource()
37 d.data = tvtk_data
38 mayavi.add_source(d)
39
40 def surf_regular():
41 """Now visualize the data as done in mlab.
42 """
43 w = WarpScalar()
44 mayavi.add_filter(w)
45 o = Outline()
46 s = Surface()
47 mayavi.add_module(o)
48 mayavi.add_module(s)
49
50
51 if __name__ == '__main__':
52 mayavi.new_scene()
53 d = make_data()
54 add_data(d)
55 surf_regular()