def test_mutli_block_clean(): # now test a clean of the null values multi = pyvista.MultiBlock() multi[1, 'rect'] = ex.load_rectilinear() multi[2, 'empty'] = pyvista.PolyData() multi[3, 'mempty'] = pyvista.MultiBlock() multi[5, 'uni'] = ex.load_uniform() # perfromt he clean to remove all Null elements multi.clean() assert multi.n_blocks == 2 assert multi.GetNumberOfBlocks() == 2 assert isinstance(multi[0], pyvista.RectilinearGrid) assert isinstance(multi[1], pyvista.UniformGrid) assert multi.get_block_name(0) == 'rect' assert multi.get_block_name(1) == 'uni' # Test a nested data struct foo = pyvista.MultiBlock() foo[3] = ex.load_ant() assert foo.n_blocks == 4 multi = pyvista.MultiBlock() multi[1, 'rect'] = ex.load_rectilinear() multi[5, 'multi'] = foo # perfromt he clean to remove all Null elements assert multi.n_blocks == 6 multi.clean() assert multi.n_blocks == 2 assert multi.GetNumberOfBlocks() == 2 assert isinstance(multi[0], pyvista.RectilinearGrid) assert isinstance(multi[1], pyvista.MultiBlock) assert multi.get_block_name(0) == 'rect' assert multi.get_block_name(1) == 'multi' assert foo.n_blocks == 1
def test_multi_slice_index(): multi = pyvista.MultiBlock() # Add examples multi.append(ex.load_ant()) multi.append(ex.load_sphere()) multi.append(ex.load_uniform()) multi.append(ex.load_airplane()) multi.append(ex.load_globe()) # Now check everything sub = multi[0:3] assert len(sub) == 3 for i in range(3): assert id(sub[i]) == id(multi[i]) assert sub.get_block_name(i) == multi.get_block_name(i) sub = multi[0:-1] assert len(sub) == len(multi) == multi.n_blocks for i in range(multi.n_blocks): assert id(sub[i]) == id(multi[i]) assert sub.get_block_name(i) == multi.get_block_name(i) sub = multi[0:-1:2] assert len(sub) == 3 for i in range(3): j = i * 2 assert id(sub[i]) == id(multi[j]) assert sub.get_block_name(i) == multi.get_block_name(j)
def test_multi_block_length(): multi = pyvista.MultiBlock() # Add examples multi.append(ex.load_ant()) multi.append(ex.load_sphere()) multi.append(ex.load_uniform()) multi.append(ex.load_airplane()) multi.append(None) assert multi.length
def test_multi_block_repr(): multi = pyvista.MultiBlock() # Add examples multi.append(ex.load_ant()) multi.append(ex.load_sphere()) multi.append(ex.load_uniform()) multi.append(ex.load_airplane()) multi.append(None) # Now check everything assert multi.n_blocks == 5 assert multi._repr_html_() is not None
def test_combine_filter(): multi = pyvista.MultiBlock() # Add examples multi.append(ex.load_ant()) multi.append(ex.load_sphere()) multi.append(ex.load_uniform()) multi.append(ex.load_airplane()) multi.append(ex.load_globe()) # Now check everything assert multi.n_blocks == 5 # Now apply the geometry filter to combine a plethora of data blocks geom = multi.combine() assert isinstance(geom, pyvista.UnstructuredGrid)
def test_multi_block_copy(): multi = pyvista.MultiBlock() # Add examples multi.append(ex.load_ant()) multi.append(ex.load_sphere()) multi.append(ex.load_uniform()) multi.append(ex.load_airplane()) multi.append(ex.load_globe()) # Now check everything newobj = multi.copy() assert multi.n_blocks == 5 == newobj.n_blocks assert id(multi[0]) != id(newobj[0]) assert id(multi[-1]) != id(newobj[-1]) return
def test_extract_geometry(): multi = pyvista.MultiBlock() # Add examples multi.append(ex.load_ant()) multi.append(ex.load_sphere()) multi.append(ex.load_uniform()) nested = pyvista.MultiBlock() nested.append(ex.load_airplane()) nested.append(ex.load_globe()) multi.append(nested) # Now check everything assert multi.n_blocks == 4 # Now apply the geometry filter to combine a plethora of data blocks geom = multi.extract_geometry() assert isinstance(geom, pyvista.PolyData)
def test_multi_block_list_index(): multi = pyvista.MultiBlock() # Add examples multi.append(ex.load_ant()) multi.append(ex.load_sphere()) multi.append(ex.load_uniform()) multi.append(ex.load_airplane()) multi.append(ex.load_globe()) # Now check everything indices = [0, 3, 4] sub = multi[indices] assert len(sub) == len(indices) for i, j in enumerate(indices): assert id(sub[i]) == id(multi[j]) assert sub.get_block_name(i) == multi.get_block_name(j)
def test_multi_block_io(extension, binary, tmpdir): filename = str(tmpdir.mkdir("tmpdir").join('tmp.%s' % extension)) multi = pyvista.MultiBlock() # Add examples multi.append(ex.load_ant()) multi.append(ex.load_sphere()) multi.append(ex.load_uniform()) multi.append(ex.load_airplane()) multi.append(ex.load_globe()) # Now check everything assert multi.n_blocks == 5 # Save it out multi.save(filename, binary) foo = pyvista.MultiBlock(filename) assert foo.n_blocks == multi.n_blocks foo = pyvista.read(filename) assert foo.n_blocks == multi.n_blocks
def test_multi_block_negative_index(): multi = pyvista.MultiBlock() # Add examples multi.append(ex.load_ant()) multi.append(ex.load_sphere()) multi.append(ex.load_uniform()) multi.append(ex.load_airplane()) multi.append(ex.load_globe()) # Now check everything assert id(multi[-1]) == id(multi[4]) assert id(multi[-2]) == id(multi[3]) assert id(multi[-3]) == id(multi[2]) assert id(multi[-4]) == id(multi[1]) assert id(multi[-5]) == id(multi[0]) with pytest.raises(IndexError): foo = multi[-6] return
def test_export_multi(tmpdir): filename = str(tmpdir.mkdir("tmpdir").join('scene-multi')) multi = pyvista.MultiBlock() # Add examples multi.append(ex.load_ant()) multi.append(ex.load_sphere()) multi.append(ex.load_uniform()) multi.append(ex.load_airplane()) multi.append(ex.load_rectilinear()) # Create the scene plotter = pyvista.Plotter(off_screen=OFF_SCREEN) plotter.add_mesh(multi) plotter.export_vtkjs(filename, compress_arrays=True) cpos_out = plotter.show() # Export must be called before showing! plotter.close() # Now make sure the file is there assert os.path.isfile(f'{filename}.vtkjs')
def test_multi_block_append(): """This puts all of the example data objects into a a MultiBlock container""" multi = pyvista.MultiBlock() # Add examples multi.append(ex.load_ant()) multi.append(ex.load_sphere()) multi.append(ex.load_uniform()) multi.append(ex.load_airplane()) multi.append(ex.load_rectilinear()) # Now check everything assert multi.n_blocks == 5 assert multi.bounds is not None assert isinstance(multi[0], pyvista.PolyData) assert isinstance(multi[1], pyvista.PolyData) assert isinstance(multi[2], pyvista.UniformGrid) assert isinstance(multi[3], pyvista.PolyData) assert isinstance(multi[4], pyvista.RectilinearGrid) # Now overwrite a block multi[4] = pyvista.Sphere() assert isinstance(multi[4], pyvista.PolyData) multi[4] = vtk.vtkUnstructuredGrid() assert isinstance(multi[4], pyvista.UnstructuredGrid)
def test_multi_block_copy(): multi = pyvista.MultiBlock() # Add examples multi.append(ex.load_ant()) multi.append(ex.load_sphere()) multi.append(ex.load_uniform()) multi.append(ex.load_airplane()) multi.append(ex.load_globe()) # Now check everything newobj = multi.copy() assert multi.n_blocks == 5 == newobj.n_blocks assert id(multi[0]) != id(newobj[0]) assert id(multi[-1]) != id(newobj[-1]) for i in range(newobj.n_blocks): assert pyvista.is_pyvista_dataset(newobj.GetBlock(i)) # Now check shallow newobj = multi.copy(deep=False) assert multi.n_blocks == 5 == newobj.n_blocks assert id(multi[0]) == id(newobj[0]) assert id(multi[-1]) == id(newobj[-1]) for i in range(newobj.n_blocks): assert pyvista.is_pyvista_dataset(newobj.GetBlock(i)) return
def test_multi_block_list_index(): multi = pyvista.MultiBlock() # Add examples multi.append(ex.load_ant()) multi.append(ex.load_sphere()) multi.append(ex.load_uniform()) multi.append(ex.load_airplane()) multi.append(ex.load_globe()) # Now check everything indices = [0, 3, 4] sub = multi[indices] assert len(sub) == len(indices) for i, j in enumerate(indices): assert id(sub[i]) == id(multi[j]) assert sub.get_block_name(i) == multi.get_block_name(j) # check list of key names multi = pyvista.MultiBlock() multi["foo"] = pyvista.Sphere() multi["goo"] = pyvista.Box() multi["soo"] = pyvista.Cone() indices = ["goo", "foo"] sub = multi[indices] assert len(sub) == len(indices) assert isinstance(sub["foo"], pyvista.PolyData)
def test_load_ant(): """ Load ply ant mesh """ mesh = examples.load_ant() assert mesh.n_points
def ant(): return examples.load_ant()
def plot_ants_plane(notebook=None): """Plot two ants and airplane. Demonstrate how to create a plot class to plot multiple meshes while adding scalars and text. This example plots the following: .. code:: python >>> import pyvista >>> from pyvista import examples Load and shrink airplane >>> airplane = examples.load_airplane() >>> airplane.points /= 10 Rotate and translate ant so it is on the plane. >>> ant = examples.load_ant() >>> ant.rotate_x(90) >>> ant.translate([90, 60, 15]) Make a copy and add another ant. >>> ant_copy = ant.copy() >>> ant_copy.translate([30, 0, -10]) Create plotting object. >>> plotter = pyvista.Plotter() >>> _ = plotter.add_mesh(ant, 'r') >>> _ = plotter.add_mesh(ant_copy, 'b') Add airplane mesh and make the color equal to the Y position. >>> plane_scalars = airplane.points[:, 1] >>> _ = plotter.add_mesh(airplane, scalars=plane_scalars, ... scalar_bar_args={'title': 'Plane Y Location'}) >>> _ = plotter.add_text('Ants and Plane Example') >>> plotter.show() Parameters ---------- notebook : bool, optional When ``True``, the resulting plot is placed inline a jupyter notebook. Assumes a jupyter console is active. Examples -------- >>> from pyvista import demos >>> demos.plot_ants_plane() """ # load and shrink airplane airplane = examples.load_airplane() airplane.points /= 10 # rotate and translate ant so it is on the plane ant = examples.load_ant() ant.rotate_x(90) ant.translate([90, 60, 15]) # Make a copy and add another ant ant_copy = ant.copy() ant_copy.translate([30, 0, -10]) # Create plotting object plotter = pv.Plotter(notebook=notebook) plotter.add_mesh(ant, 'r') plotter.add_mesh(ant_copy, 'b') # Add airplane mesh and make the color equal to the Y position plane_scalars = airplane.points[:, 1] plotter.add_mesh(airplane, scalars=plane_scalars, scalar_bar_args={'title': 'Plane Y\nLocation'}) plotter.add_text('Ants and Plane Example') plotter.show()