def view_data(filename,fieldName='x-velocity'): """Visualize a 3D numpy array in mayavi2. """ # 'mayavi' is always defined on the interpreter. mayavi.new_scene() # Make the data and add it to the pipeline. data = read_data(filename,fieldName) src = ArraySource(transpose_input_array=False) src.scalar_data = data mayavi.add_source(src) # Visualize the data. o = Outline() mayavi.add_module(o) ipw = ImagePlaneWidget() mayavi.add_module(ipw) ipw.module_manager.scalar_lut_manager.show_scalar_bar = True ipw.module_manager.scalar_lut_manager.data_name = fieldName ipw_y = ImagePlaneWidget() mayavi.add_module(ipw_y) ipw_y.ipw.plane_orientation = 'y_axes' ipw_z = ImagePlaneWidget() mayavi.add_module(ipw_z) ipw_z.ipw.plane_orientation = 'z_axes'
def view_data(filename, fieldName='x-velocity'): """Visualize a 3D numpy array in mayavi2. """ # 'mayavi' is always defined on the interpreter. mayavi.new_scene() # Make the data and add it to the pipeline. data = read_data(filename, fieldName) src = ArraySource(transpose_input_array=False) src.scalar_data = data mayavi.add_source(src) # Visualize the data. o = Outline() mayavi.add_module(o) ipw = ImagePlaneWidget() mayavi.add_module(ipw) ipw.module_manager.scalar_lut_manager.show_scalar_bar = True ipw.module_manager.scalar_lut_manager.data_name = fieldName ipw_y = ImagePlaneWidget() mayavi.add_module(ipw_y) ipw_y.ipw.plane_orientation = 'y_axes' ipw_z = ImagePlaneWidget() mayavi.add_module(ipw_z) ipw_z.ipw.plane_orientation = 'z_axes'
def setUp(self): """Initial setting up of test fixture, automatically called by TestCase before any other test method is invoked""" e = NullEngine() # Uncomment to see visualization for debugging etc. #e = Engine() e.start() s = e.new_scene() self.e = e self.s = s ############################################################ # Create a new scene and set up the visualization. d = ArraySource() sc, vec = self.make_data() d.origin = (-5, -5, -5) d.scalar_data = sc d.vector_data = vec e.add_source(d) # Create an outline for the data. o = Outline() e.add_module(o) # View the data. st = Streamline() e.add_module(st) widget = st.seed.widget widget.trait_set(radius=1.0, center=(-4.0, -4.0, -4.0), theta_resolution=4, phi_resolution=4) st = Streamline(streamline_type='ribbon') seed = st.seed seed.widget = seed.widget_list[1] e.add_module(st) seed.widget.trait_set(point1=(-5.0, -4.5, -4.0), point2=(-5.0, -4.5, 4.0)) st.ribbon_filter.width = 0.25 st = Streamline(streamline_type='tube') seed = st.seed seed.widget = seed.widget_list[2] e.add_module(st) seed.widget.trait_set(center=(-5.0, 1.5, -2.5)) st.tube_filter.radius = 0.15 st = Streamline(streamline_type='tube') seed = st.seed seed.widget = seed.widget_list[3] e.add_module(st) seed.widget.position = (-5.0, 3.75, 3.75) st.tube_filter.radius = 0.2 self.st = st self.scene = e.current_scene return
def setUp(self): """Initial setting up of test fixture, automatically called by TestCase before any other test method is invoked""" e = NullEngine() # Uncomment to see visualization for debugging etc. #e = Engine() e.start() s=e.new_scene() self.e=e self.s=s ############################################################ # Create a new scene and set up the visualization. d = ArraySource() sc, vec = self.make_data() d.origin = (-5, -5, -5) d.scalar_data = sc d.vector_data = vec e.add_source(d) # Create an outline for the data. o = Outline() e.add_module(o) # View the data. st = Streamline() e.add_module(st) widget = st.seed.widget widget.set(radius=1.0, center=(-4.0, -4.0, -4.0), theta_resolution=4, phi_resolution=4) st = Streamline(streamline_type='ribbon') seed = st.seed seed.widget = seed.widget_list[1] e.add_module(st) seed.widget.set(point1=(-5.0, -4.5, -4.0), point2=(-5.0, -4.5, 4.0)) st.ribbon_filter.width = 0.25 st = Streamline(streamline_type='tube') seed = st.seed seed.widget = seed.widget_list[2] e.add_module(st) seed.widget.set(center=(-5.0, 1.5, -2.5)) st.tube_filter.radius = 0.15 st = Streamline(streamline_type='tube') seed = st.seed seed.widget = seed.widget_list[3] e.add_module(st) seed.widget.position=(-5.0, 3.75, 3.75) st.tube_filter.radius = 0.2 self.st = st self.scene = e.current_scene return
def setUp(self): """Initial setting up of test fixture, automatically called by TestCase before any other test method is invoked""" e = NullEngine() # Uncomment to see visualization for debugging etc. #e = Engine() e.start() s = e.new_scene() self.e = e self.s = s ############################################################ # Create a new scene and set up the visualization. d = ArraySource() sc, vec = self.make_data() d.origin = (-5, -5, -5) d.scalar_data = sc d.vector_data = vec e.add_source(d) # Create an outline for the data. o = Outline() e.add_module(o) # Glyphs for the scalars g = Glyph() e.add_module(g) g.glyph.glyph_source.glyph_position = 'center' g.glyph.glyph.vector_mode = 'use_normal' g.glyph.glyph.scale_factor = 0.5 g.glyph.mask_points.on_ratio = 20 g.actor.property.line_width = 1.0 v = VectorCutPlane() glyph = v.glyph gs = glyph.glyph_source gs.glyph_position = 'tail' gs.glyph_source = gs.glyph_list[1] e.add_module(v) v.implicit_plane.set(normal=(0, 1, 0), origin=(0, 3, 0)) v = VectorCutPlane() glyph = v.glyph gs = glyph.glyph_source gs.glyph_source = gs.glyph_list[2] gs.glyph_position = 'head' e.add_module(v) v.implicit_plane.set(normal=(0, 1, 0), origin=(0, -2, 0)) self.g = g self.v = v self.scene = e.current_scene return
def setUp(self): """Initial setting up of test fixture, automatically called by TestCase before any other test method is invoked""" e = NullEngine() # Uncomment to see visualization for debugging etc. #e = Engine() e.start() s=e.new_scene() self.e=e self.s=s ############################################################ # Create a new scene and set up the visualization. d = ArraySource() sc, vec = self.make_data() d.origin = (-5, -5, -5) d.scalar_data = sc d.vector_data = vec e.add_source(d) # Create an outline for the data. o = Outline() e.add_module(o) # Glyphs for the scalars g = Glyph() e.add_module(g) g.glyph.glyph_source.glyph_position = 'center' g.glyph.glyph.vector_mode = 'use_normal' g.glyph.glyph.scale_factor = 0.5 g.glyph.mask_points.on_ratio = 20 g.actor.property.line_width = 1.0 v = VectorCutPlane() glyph = v.glyph gs = glyph.glyph_source gs.glyph_position = 'tail' gs.glyph_source = gs.glyph_list[1] e.add_module(v) v.implicit_plane.set(normal=(0, 1, 0), origin=(0, 3, 0)) v = VectorCutPlane() glyph = v.glyph gs = glyph.glyph_source gs.glyph_source = gs.glyph_list[2] gs.glyph_position = 'head' e.add_module(v) v.implicit_plane.set(normal=(0, 1, 0), origin=(0, -2, 0)) self.g=g self.v=v self.scene = e.current_scene return
def view_numpy( data ): """Example showing how to view a 3D numpy array in mayavi2. """ # 'mayavi' is always defined on the interpreter. mayavi.new_scene() # Make the data and add it to the pipeline. src = ArraySource( transpose_input_array=False ) src.scalar_data = data mayavi.add_source( src ) # Visualize the data. o = Outline() mayavi.add_module( o ) ipw = ImagePlaneWidget() mayavi.add_module( ipw ) ipw.module_manager.scalar_lut_manager.show_scalar_bar = True ipw_y = ImagePlaneWidget() mayavi.add_module( ipw_y ) ipw_y.ipw.plane_orientation = 'y_axes'
def view_numpy(): """Example showing how to view a 3D numpy array in mayavi2. """ # 'mayavi' is always defined on the interpreter. mayavi.new_scene() # Make the data and add it to the pipeline. data = make_data() src = ArraySource(transpose_input_array=False) src.scalar_data = data mayavi.add_source(src) # Visualize the data. o = Outline() mayavi.add_module(o) ipw = ImagePlaneWidget() mayavi.add_module(ipw) ipw.module_manager.scalar_lut_manager.show_scalar_bar = True ipw_y = ImagePlaneWidget() mayavi.add_module(ipw_y) ipw_y.ipw.plane_orientation = 'y_axes'
def setUp(self): """Initial setting up of test fixture, automatically called by TestCase before any other test method is invoked""" e = NullEngine() # Uncomment to see visualization for debugging etc. #e = Engine() e.start() s=e.new_scene() self.e=e self.s=s ############################################################ # Create a new scene and set up the visualization. d = ArraySource() sc = self.make_data() d.scalar_data = sc e.add_source(d) self.t = Text3D() e.add_module(self.t) self.scene = e.current_scene return
def setUp(self): """Initial setting up of test fixture, automatically called by TestCase before any other test method is invoked""" e = NullEngine() # Uncomment to see visualization for debugging etc. #e = Engine() e.start() s=e.new_scene() self.e=e self.s=s ############################################################ # Create a new scene and set up the visualization. d = ArraySource() sc = self.make_data() d.scalar_data = sc e.add_source(d) # Create an outline for the data. o = Outline() e.add_module(o) # ImagePlaneWidgets for the scalars ipw = ImagePlaneWidget() e.add_module(ipw) ipw_y = ImagePlaneWidget() e.add_module(ipw_y) ipw_y.ipw.plane_orientation = 'y_axes' ipw_z = ImagePlaneWidget() e.add_module(ipw_z) ipw_z.ipw.plane_orientation = 'z_axes' self.scene = e.current_scene return
def do(self): ############################################################ # Imports. script = self.script from mayavi.sources.array_source import ArraySource from mayavi.modules.outline import Outline from mayavi.modules.surface import Surface from mayavi.modules.vectors import Vectors ############################################################ # Create a new scene and set up the visualization. s = self.new_scene() d = ArraySource() self.check_input_validation(d) sc, vec = self.make_2d_data() d.origin = (-1, -1, 0) d.scalar_data = sc d.vector_data = vec script.add_source(d) # Create an outline for the data. o = Outline() script.add_module(o) # View the data. s = Surface() script.add_module(s) v = Vectors() script.add_module(v) # Add a 3D data source d = ArraySource() sc, vec = self.make_3d_data() d.scalar_data = sc d.vector_data = vec script.add_source(d) # Create an outline for the data. o = Outline() script.add_module(o) # View a slice. s = Surface() script.add_module(s) v = Vectors() script.add_module(v) # Set the scene to a suitable view. s.scene.z_plus_view() c = s.scene.camera c.azimuth(-30) c.elevation(30) self.check() ############################################################ # Test if saving a visualization and restoring it works. bg = s.scene.background # Save visualization. f = StringIO() f.name = abspath('test.mv2') # We simulate a file. script.save_visualization(f) f.seek(0) # So we can read this saved data. # Remove existing scene. engine = script.engine engine.close_scene(s) # Load visualization script.load_visualization(f) s = engine.current_scene # Set the scene to a suitable view. s.scene.z_plus_view() c = s.scene.camera c.azimuth(-30) c.elevation(30) s.scene.background = bg self.check() ############################################################ # Test if the MayaVi2 visualization can be deepcopied. # Pop the source object. sources = s.children s.children = [] # Add it back to see if that works without error. s.children.extend(sources) s.scene.reset_zoom() self.check() # Now deepcopy the source and replace the existing one with # the copy. This basically simulates cutting/copying the # object from the UI via the right-click menu on the tree # view, and pasting the copy back. sources1 = copy.deepcopy(sources) s.children[:] = sources s.scene.reset_zoom() self.check()
def do(self): ############################################################ # Imports. script = self.script from mayavi.sources.array_source import ArraySource from mayavi.modules.outline import Outline from mayavi.modules.streamline import Streamline ############################################################ # Create a new scene and set up the visualization. s = self.new_scene() d = ArraySource() sc, vec = self.make_data() d.origin = (-5, -5, -5) d.scalar_data = sc d.vector_data = vec script.add_source(d) # Create an outline for the data. o = Outline() script.add_module(o) # View the data. st = Streamline() script.add_module(st) widget = st.seed.widget widget.set(radius=1.0, center=(-4.0, -4.0, -4.0), theta_resolution=4, phi_resolution=4) st = Streamline(streamline_type='ribbon') seed = st.seed seed.widget = seed.widget_list[1] script.add_module(st) seed.widget.set(point1=(-5.0, -4.5, -4.0), point2=(-5.0, -4.5, 4.0)) st.ribbon_filter.width = 0.25 st = Streamline(streamline_type='tube') seed = st.seed seed.widget = seed.widget_list[2] script.add_module(st) seed.widget.set(center=(-5.0, 1.5, -2.5)) st.tube_filter.radius = 0.15 st = Streamline(streamline_type='tube') seed = st.seed seed.widget = seed.widget_list[3] script.add_module(st) seed.widget.position=(-5.0, 3.75, 3.75) st.tube_filter.radius = 0.2 # Set the scene to a suitable view. s.scene.z_plus_view() c = s.scene.camera c.azimuth(-30) c.elevation(30) s.render() # Update the streamlines. mm = o.module_manager for child in mm.children[1:]: child.update_streamlines = True # Now compare the image. self.compare_image(s, 'images/test_streamline.png') ############################################################ # Test if the modules respond correctly when the components # are changed. tf = st.tube_filter st.tube_filter = tf.__class__() st.tube_filter = tf st.ribbon_filter = st.ribbon_filter.__class__() seed = st.seed st.seed = seed.__class__() st.seed = seed st.actor = st.actor.__class__() tracer = st.stream_tracer st.stream_tracer = tracer.__class__() st.stream_tracer = tracer s.render() # Now compare the image. self.compare_image(s, 'images/test_streamline.png') s.render() ############################################################ # Test if saving a visualization and restoring it works. bg = s.scene.background # Save visualization. f = BytesIO() f.name = abspath('test.mv2') # We simulate a file. script.save_visualization(f) f.seek(0) # So we can read this saved data. # Remove existing scene. engine = script.engine engine.close_scene(s) # Load visualization script.load_visualization(f) s = engine.current_scene # Set the scene to a suitable view. s.scene.z_plus_view() c = s.scene.camera c.azimuth(-30) c.elevation(30) s.render() s.scene.background = bg # Now compare the image. self.compare_image(s, 'images/test_streamline.png') ############################################################ # Test if the MayaVi2 visualization can be deepcopied. # Pop the source object. sources = s.children s.children = [] # Add it back to see if that works without error. s.children.extend(sources) s.scene.reset_zoom() # Now compare the image. self.compare_image(s, 'images/test_streamline.png') # Now deepcopy the source and replace the existing one with # the copy. This basically simulates cutting/copying the # object from the UI via the right-click menu on the tree # view, and pasting the copy back. sources1 = copy.deepcopy(sources) s.children[:] = sources s.scene.reset_zoom() self.compare_image(s, 'images/test_streamline.png')
def do(self): ############################################################ # Imports. script = self.script from mayavi.sources.array_source import ArraySource from mayavi.modules.outline import Outline from mayavi.modules.image_plane_widget import ImagePlaneWidget ############################################################ # Create a new scene and set up the visualization. s = self.new_scene() d = ArraySource() sc = self.make_data() d.scalar_data = sc script.add_source(d) # Create an outline for the data. o = Outline() script.add_module(o) # ImagePlaneWidgets for the scalars ipw = ImagePlaneWidget() script.add_module(ipw) ipw_y = ImagePlaneWidget() script.add_module(ipw_y) ipw_y.ipw.plane_orientation = 'y_axes' ipw_z = ImagePlaneWidget() script.add_module(ipw_z) ipw_z.ipw.plane_orientation = 'z_axes' # Set the scene to a suitable view. self.set_view(s) self.check() ############################################################ # Test if saving a visualization and restoring it works. # Save visualization. f = BytesIO() f.name = abspath('test.mv2') # We simulate a file. script.save_visualization(f) f.seek(0) # So we can read this saved data. # Remove existing scene. engine = script.engine engine.close_scene(s) # Load visualization script.load_visualization(f) s = engine.current_scene # Set the scene to a suitable view. self.set_view(s) self.check() ############################################################ # Test if the MayaVi2 visualization can be deepcopied. # Pop the source object. sources = s.children s.children = [] # Add it back to see if that works without error. s.children.extend(sources) self.set_view(s) self.check() # Now deepcopy the source and replace the existing one with # the copy. This basically simulates cutting/copying the # object from the UI via the right-click menu on the tree # view, and pasting the copy back. sources1 = copy.deepcopy(sources) s.children[:] = sources self.set_view(s) self.check()
def do(self): ############################################################ # Imports. script = self.script from mayavi.sources.array_source import ArraySource from mayavi.modules.outline import Outline from mayavi.modules.glyph import Glyph from mayavi.modules.vector_cut_plane import VectorCutPlane ############################################################ # Create a new scene and set up the visualization. s = self.new_scene() d = ArraySource() sc, vec = self.make_data() d.origin = (-5, -5, -5) d.scalar_data = sc d.vector_data = vec script.add_source(d) # Create an outline for the data. o = Outline() script.add_module(o) # Glyphs for the scalars g = Glyph() script.add_module(g) g.glyph.glyph_source.glyph_position = 'center' g.glyph.glyph.vector_mode = 'use_normal' g.glyph.glyph.scale_factor = 0.5 g.actor.property.line_width = 1.0 v = VectorCutPlane() glyph = v.glyph gs = glyph.glyph_source gs.glyph_position = 'tail' gs.glyph_source = gs.glyph_list[1] script.add_module(v) v.implicit_plane.trait_set(normal=(0, 1, 0), origin=(0, 3, 0)) v = VectorCutPlane() glyph = v.glyph gs = glyph.glyph_source gs.glyph_source = gs.glyph_list[2] gs.glyph_position = 'head' script.add_module(v) v.implicit_plane.trait_set(normal=(0, 1, 0), origin=(0, -2, 0)) # Set the scene to a suitable view. self.set_view(s) self.check() ############################################################ # Test if the modules respond correctly when the components # are changed. g.actor = g.actor.__class__() glyph = g.glyph g.glyph = glyph.__class__() g.glyph = glyph glyph = v.glyph v.glyph = glyph.__class__() v.glyph = glyph v.actor = v.actor.__class__() v.cutter = v.cutter.__class__() ip = v.implicit_plane v.implicit_plane = ip.__class__() v.implicit_plane = ip s.render() self.check() ############################################################ # Test if saving a visualization and restoring it works. # Save visualization. f = BytesIO() f.name = abspath('test.mv2') # We simulate a file. script.save_visualization(f) f.seek(0) # So we can read this saved data. # Remove existing scene. engine = script.engine engine.close_scene(s) # Load visualization script.load_visualization(f) s = engine.current_scene # Set the scene to a suitable view. self.set_view(s) self.check() ############################################################ # Test if the MayaVi2 visualization can be deepcopied. # Pop the source object. sources = s.children s.children = [] # Add it back to see if that works without error. s.children.extend(sources) self.set_view(s) self.check() # Now deepcopy the source and replace the existing one with # the copy. This basically simulates cutting/copying the # object from the UI via the right-click menu on the tree # view, and pasting the copy back. sources1 = copy.deepcopy(sources) s.children[:] = sources self.set_view(s) self.check()
def view_data(data): """Example showing how to view a 3D numpy array in mayavi2. """ def set_labelE(ind): return '{0:.0f} eV'.format(source.energies[ind]) def move_view(obj, evt): labelE.text = set_labelE(ipwX.ipw.slice_index) pos = labelE.position labelE.position = ipwX.ipw.slice_index * src.spacing[0] + 1,\ pos[1], pos[2] labelE.vector_text.update() def set_lut(ipw): lutM = ipw.module_manager.scalar_lut_manager # lutM.show_scalar_bar = True # lutM.number_of_labels = 9 lutM.lut.scale = 'log10' lutM.lut.range = [dataMax*vmin, dataMax] lutM.lut_mode = 'hot' @animate() def anim(data, ipwX): scene.scene.off_screen_rendering = True scene.scene.anti_aliasing_frames = 0 for i in range(0, data.shape[0], 1): ipwX.ipw.slice_index = i move_view(None, None) if saveName is not None: scene.scene.save('{0}{1:04d}.png'.format(saveName, i)) yield # 'mayavi' is always defined on the interpreter. scene = mayavi.new_scene() # analysis:ignore scene.scene.background = (0, 0, 0) print(source.prefix_save_name()) src = ArraySource(transpose_input_array=True) sh = data.shape # print(sh) if 'xrt' in source.prefix_save_name() or\ 'srw' in source.prefix_save_name(): src.scalar_data = data[:, :sh[1]//2+1, :sh[2]//2+1].copy() else: src.scalar_data = data[:, ::-1, ::-1].copy() # src.spacing = np.array([-0.05, 1, 1]) # src.spacing = np.array([-0.25, 1, 1]) src.spacing = np.array([-0.25, 0.25, 0.25]) mayavi.add_source(src) # analysis:ignore # Visualize the data. # o = Outline() # mayavi.add_module(o) ipwY = ImagePlaneWidget() mayavi.add_module(ipwY) # analysis:ignore ipwY.ipw.plane_orientation = 'y_axes' # our x-axis ipwY.ipw.slice_index = int(data.shape[1] - 1) # if 'xrt' in source.prefix_save_name(): # ipwY.ipw.slice_index /= int(2) ipwY.ipw.left_button_action = 0 set_lut(ipwY) if isZplane: ipwZ = ImagePlaneWidget() mayavi.add_module(ipwZ) # analysis:ignore ipwZ.ipw.plane_orientation = 'z_axes' # our z-axis ipwZ.ipw.slice_index = int(data.shape[2] - 1) # if 'xrt' in source.prefix_save_name(): # ipwZ.ipw.slice_index /= int(2) ipwZ.ipw.left_button_action = 0 if 'xrt' in source.prefix_save_name() or\ 'srw' in source.prefix_save_name(): pass else: data = np.concatenate((data[:, :0:-1, :], data), axis=1) data = np.concatenate((data[:, :, :0:-1], data), axis=2) sh = data.shape print(sh) src = ArraySource(transpose_input_array=True) src.scalar_data = data.copy() # src.spacing = np.array([-0.05, 1, 1]) # src.spacing = np.array([-0.25, 1, 1]) src.spacing = np.array([-0.25, 0.25, 0.25]) mayavi.add_source(src) # analysis:ignore ipwX = ImagePlaneWidget() mayavi.add_module(ipwX) # analysis:ignore ipwX.ipw.plane_orientation = 'x_axes' # energy set_lut(ipwX) ipwX.ipw.add_observer('WindowLevelEvent', move_view) ipwX.ipw.add_observer('StartInteractionEvent', move_view) ipwX.ipw.add_observer('EndInteractionEvent', move_view) labelE = Text3D() mayavi.add_module(labelE) # analysis:ignore labelE.position = (1, data.shape[1]*0.73*src.spacing[1], data.shape[2]*0.85*src.spacing[2]) labelE.orientation = 90, 0, 90 labelE.text = 'Energy' labelE.scale = 3, 3, 1 labelE.actor.property.color = 0, 1, 1 labelE.orient_to_camera = False labelE.text = set_labelE(0) view(45, 70, 200) wantToAnimate = True if wantToAnimate: anim(data, ipwX) else: ipwX.ipw.slice_index = data.shape[0]-1 move_view(None, None)
def view_data(data): """Example showing how to view a 3D numpy array in mayavi2. """ def set_labelE(ind): return '{0:.0f} eV'.format(source.energies[ind]) def move_view(obj, evt): labelE.text = set_labelE(ipwX.ipw.slice_index) pos = labelE.position labelE.position = ipwX.ipw.slice_index * src.spacing[0] + 1,\ pos[1], pos[2] labelE.vector_text.update() def set_lut(ipw): lutM = ipw.module_manager.scalar_lut_manager # lutM.show_scalar_bar = True # lutM.number_of_labels = 9 lutM.lut.scale = 'log10' lutM.lut.range = [dataMax * vmin, dataMax] lutM.lut_mode = 'hot' @animate() def anim(data, ipwX): scene.scene.off_screen_rendering = True scene.scene.anti_aliasing_frames = 0 for i in range(0, data.shape[0], 1): ipwX.ipw.slice_index = i move_view(None, None) if saveName is not None: scene.scene.save('{0}{1:04d}.png'.format(saveName, i)) yield # 'mayavi' is always defined on the interpreter. scene = mayavi.new_scene() # analysis:ignore scene.scene.background = (0, 0, 0) print(source.prefix_save_name()) src = ArraySource(transpose_input_array=True) sh = data.shape # print(sh) if 'xrt' in source.prefix_save_name() or\ 'srw' in source.prefix_save_name(): src.scalar_data = data[:, :sh[1] // 2 + 1, :sh[2] // 2 + 1].copy() else: src.scalar_data = data[:, ::-1, ::-1].copy() # src.spacing = np.array([-0.05, 1, 1]) # src.spacing = np.array([-0.25, 1, 1]) src.spacing = np.array([-0.25, 0.25, 0.25]) mayavi.add_source(src) # analysis:ignore # Visualize the data. # o = Outline() # mayavi.add_module(o) ipwY = ImagePlaneWidget() mayavi.add_module(ipwY) # analysis:ignore ipwY.ipw.plane_orientation = 'y_axes' # our x-axis ipwY.ipw.slice_index = int(data.shape[1] - 1) # if 'xrt' in source.prefix_save_name(): # ipwY.ipw.slice_index /= int(2) ipwY.ipw.left_button_action = 0 set_lut(ipwY) if isZplane: ipwZ = ImagePlaneWidget() mayavi.add_module(ipwZ) # analysis:ignore ipwZ.ipw.plane_orientation = 'z_axes' # our z-axis ipwZ.ipw.slice_index = int(data.shape[2] - 1) # if 'xrt' in source.prefix_save_name(): # ipwZ.ipw.slice_index /= int(2) ipwZ.ipw.left_button_action = 0 if 'xrt' in source.prefix_save_name() or\ 'srw' in source.prefix_save_name(): pass else: data = np.concatenate((data[:, :0:-1, :], data), axis=1) data = np.concatenate((data[:, :, :0:-1], data), axis=2) sh = data.shape print(sh) src = ArraySource(transpose_input_array=True) src.scalar_data = data.copy() # src.spacing = np.array([-0.05, 1, 1]) # src.spacing = np.array([-0.25, 1, 1]) src.spacing = np.array([-0.25, 0.25, 0.25]) mayavi.add_source(src) # analysis:ignore ipwX = ImagePlaneWidget() mayavi.add_module(ipwX) # analysis:ignore ipwX.ipw.plane_orientation = 'x_axes' # energy set_lut(ipwX) ipwX.ipw.add_observer('WindowLevelEvent', move_view) ipwX.ipw.add_observer('StartInteractionEvent', move_view) ipwX.ipw.add_observer('EndInteractionEvent', move_view) labelE = Text3D() mayavi.add_module(labelE) # analysis:ignore labelE.position = (1, data.shape[1] * 0.73 * src.spacing[1], data.shape[2] * 0.85 * src.spacing[2]) labelE.orientation = 90, 0, 90 labelE.text = 'Energy' labelE.scale = 3, 3, 1 labelE.actor.property.color = 0, 1, 1 labelE.orient_to_camera = False labelE.text = set_labelE(0) view(45, 70, 200) wantToAnimate = True if wantToAnimate: anim(data, ipwX) else: ipwX.ipw.slice_index = data.shape[0] - 1 move_view(None, None)
def do(self): ############################################################ # Imports. script = self.script from mayavi.sources.array_source import ArraySource from mayavi.modules.outline import Outline from mayavi.modules.streamline import Streamline ############################################################ # Create a new scene and set up the visualization. s = self.new_scene() d = ArraySource() sc, vec = self.make_data() d.origin = (-5, -5, -5) d.scalar_data = sc d.vector_data = vec script.add_source(d) # Create an outline for the data. o = Outline() script.add_module(o) # View the data. st = Streamline() script.add_module(st) widget = st.seed.widget widget.set(radius=1.0, center=(-4.0, -4.0, -4.0), theta_resolution=4, phi_resolution=4) st = Streamline(streamline_type='ribbon') seed = st.seed seed.widget = seed.widget_list[1] script.add_module(st) seed.widget.set(point1=(-5.0, -4.5, -4.0), point2=(-5.0, -4.5, 4.0)) st.ribbon_filter.width = 0.25 st = Streamline(streamline_type='tube') seed = st.seed seed.widget = seed.widget_list[2] script.add_module(st) seed.widget.set(center=(-5.0, 1.5, -2.5)) st.tube_filter.radius = 0.15 st = Streamline(streamline_type='tube') seed = st.seed seed.widget = seed.widget_list[3] script.add_module(st) seed.widget.position = (-5.0, 3.75, 3.75) st.tube_filter.radius = 0.2 # Set the scene to a suitable view. s.scene.z_plus_view() c = s.scene.camera c.azimuth(-30) c.elevation(30) s.render() # Update the streamlines. mm = o.module_manager for child in mm.children[1:]: child.update_streamlines = True # Now compare the image. self.compare_image(s, 'images/test_streamline.png') ############################################################ # Test if the modules respond correctly when the components # are changed. tf = st.tube_filter st.tube_filter = tf.__class__() st.tube_filter = tf st.ribbon_filter = st.ribbon_filter.__class__() seed = st.seed st.seed = seed.__class__() st.seed = seed st.actor = st.actor.__class__() tracer = st.stream_tracer st.stream_tracer = tracer.__class__() st.stream_tracer = tracer s.render() # Now compare the image. self.compare_image(s, 'images/test_streamline.png') s.render() ############################################################ # Test if saving a visualization and restoring it works. bg = s.scene.background # Save visualization. f = BytesIO() f.name = abspath('test.mv2') # We simulate a file. script.save_visualization(f) f.seek(0) # So we can read this saved data. # Remove existing scene. engine = script.engine engine.close_scene(s) # Load visualization script.load_visualization(f) s = engine.current_scene # Set the scene to a suitable view. s.scene.z_plus_view() c = s.scene.camera c.azimuth(-30) c.elevation(30) s.render() s.scene.background = bg # Now compare the image. self.compare_image(s, 'images/test_streamline.png') ############################################################ # Test if the MayaVi2 visualization can be deepcopied. # Pop the source object. sources = s.children s.children = [] # Add it back to see if that works without error. s.children.extend(sources) s.scene.reset_zoom() # Now compare the image. self.compare_image(s, 'images/test_streamline.png') # Now deepcopy the source and replace the existing one with # the copy. This basically simulates cutting/copying the # object from the UI via the right-click menu on the tree # view, and pasting the copy back. sources1 = copy.deepcopy(sources) s.children[:] = sources s.scene.reset_zoom() self.compare_image(s, 'images/test_streamline.png')