def test_save_and_load_polydata(): l_ext = ["vtk", "fib", "ply", "xml"] fname = "temp-io" for ext in l_ext: with InTemporaryDirectory() as odir: data = np.random.randint(0, 255, size=(50, 3)) pd = vtk.vtkPolyData() pd.SetPoints(numpy_to_vtk_points(data)) fname_path = pjoin(odir, "{0}.{1}".format(fname, ext)) save_polydata(pd, fname_path) npt.assert_equal(os.path.isfile(fname_path), True) assert_greater(os.stat(fname_path).st_size, 0) out_pd = load_polydata(fname_path) out_data = numpy_support.vtk_to_numpy(out_pd.GetPoints().GetData()) npt.assert_array_equal(data, out_data) npt.assert_raises(IOError, save_polydata, vtk.vtkPolyData(), "test.vti") npt.assert_raises(IOError, save_polydata, vtk.vtkPolyData(), "test.obj") npt.assert_raises(IOError, load_polydata, "test.vti")
def test_get_bounds(): size = (15, 15) test_bounds = [0.0, 15, 0.0, 15, 0.0, 0.0] points = vtk.vtkPoints() points.InsertNextPoint(0, 0, 0) points.InsertNextPoint(size[0], 0, 0) points.InsertNextPoint(size[0], size[1], 0) points.InsertNextPoint(0, size[1], 0) # Create the polygon polygon = vtk.vtkPolygon() polygon.GetPointIds().SetNumberOfIds(4) # make a quad polygon.GetPointIds().SetId(0, 0) polygon.GetPointIds().SetId(1, 1) polygon.GetPointIds().SetId(2, 2) polygon.GetPointIds().SetId(3, 3) # Add the polygon to a list of polygons polygons = vtk.vtkCellArray() polygons.InsertNextCell(polygon) # Create a PolyData polygonPolyData = vtk.vtkPolyData() polygonPolyData.SetPoints(points) polygonPolyData.SetPolys(polygons) # Create a mapper and actor mapper = vtk.vtkPolyDataMapper2D() mapper = set_input(mapper, polygonPolyData) actor = vtk.vtkActor2D() actor.SetMapper(mapper) compute_bounds(actor) npt.assert_equal(get_bounds(actor), test_bounds)
def test_polydata_polygon(interactive=False): # Create a cube my_triangles = np.array([[0, 6, 4], [0, 2, 6], [0, 3, 2], [0, 1, 3], [2, 7, 6], [2, 3, 7], [4, 6, 7], [4, 7, 5], [0, 4, 5], [0, 5, 1], [1, 5, 7], [1, 7, 3]], dtype='i8') my_vertices = np.array([[0.0, 0.0, 0.0], [0.0, 0.0, 1.0], [0.0, 1.0, 0.0], [0.0, 1.0, 1.0], [1.0, 0.0, 0.0], [1.0, 0.0, 1.0], [1.0, 1.0, 0.0], [1.0, 1.0, 1.0]]) colors = my_vertices * 255 my_polydata = vtk.vtkPolyData() utils.set_polydata_vertices(my_polydata, my_vertices) utils.set_polydata_triangles(my_polydata, my_triangles) npt.assert_equal(len(my_vertices), my_polydata.GetNumberOfPoints()) npt.assert_equal(len(my_triangles), my_polydata.GetNumberOfCells()) npt.assert_equal(utils.get_polydata_normals(my_polydata), None) res_triangles = utils.get_polydata_triangles(my_polydata) res_vertices = utils.get_polydata_vertices(my_polydata) npt.assert_array_equal(my_vertices, res_vertices) npt.assert_array_equal(my_triangles, res_triangles) utils.set_polydata_colors(my_polydata, colors) npt.assert_equal(utils.get_polydata_colors(my_polydata), colors) utils.update_polydata_normals(my_polydata) normals = utils.get_polydata_normals(my_polydata) npt.assert_equal(len(normals), len(my_vertices)) mapper = utils.get_polymapper_from_polydata(my_polydata) actor1 = utils.get_actor_from_polymapper(mapper) actor2 = utils.get_actor_from_polydata(my_polydata) scene = window.Scene() for actor in [actor1, actor2]: scene.add(actor) if interactive: window.show(scene) arr = window.snapshot(scene) report = window.analyze_snapshot(arr) npt.assert_equal(report.objects, 1)
def test_save_and_load_options(): l_ext = ["ply", "vtk"] l_options = [{ 'color_array_name': 'horizon', }, { 'binary': True, }] fname = "temp-io" for ext, option in zip(l_ext, l_options): with InTemporaryDirectory() as odir: data = np.random.randint(0, 255, size=(50, 3)) pd = vtk.vtkPolyData() pd.SetPoints(numpy_to_vtk_points(data)) fname_path = pjoin(odir, "{0}.{1}".format(fname, ext)) save_polydata(pd, fname_path, **option) npt.assert_equal(os.path.isfile(fname_path), True) assert_greater(os.stat(fname_path).st_size, 0) out_pd = load_polydata(fname_path) out_data = numpy_support.vtk_to_numpy(out_pd.GetPoints().GetData()) npt.assert_array_equal(data, out_data) l_ext = ["vtk", "vtp", "ply", "stl", "mni.obj"] l_options = [{}, { 'binary': False, }] for ext, option in zip(l_ext, l_options): with InTemporaryDirectory() as odir: data = np.random.randint(0, 255, size=(50, 3)) pd = vtk.vtkPolyData() pd.SetPoints(numpy_to_vtk_points(data)) fname_path = pjoin(odir, "{0}.{1}".format(fname, ext)) save_polydata(pd, fname_path, **option) npt.assert_equal(os.path.isfile(fname_path), True) assert_greater(os.stat(fname_path).st_size, 0)
def _sphere(scale=1): vertices, faces = prim_sphere('symmetric362') from fury.utils import set_polydata_vertices, set_polydata_triangles, vtk polydata = vtk.vtkPolyData() set_polydata_vertices(polydata, scale * vertices) set_polydata_triangles(polydata, faces) from fury.utils import set_polydata_normals, normals_from_v_f normals = normals_from_v_f(scale * vertices, faces) set_polydata_normals(polydata, normals) return polydata, scale * vertices, normals
def test_polydata_lines(): colors = np.array([[1, 0, 0], [0, 0, 1.]]) line_1 = np.array([[0, 0, 0], [2, 2, 2], [3, 3, 3.]]) line_2 = line_1 + np.array([0.5, 0., 0.]) lines = [line_1, line_2] pd_lines, is_cmap = utils.lines_to_vtk_polydata(lines, colors) res_lines = utils.get_polydata_lines(pd_lines) npt.assert_array_equal(lines, res_lines) npt.assert_equal(is_cmap, False) res_colors = utils.get_polydata_colors(pd_lines) res_colors = np.unique(res_colors, axis=0) / 255 npt.assert_array_equal(colors, np.flipud(res_colors)) npt.assert_equal(utils.get_polydata_colors(vtk.vtkPolyData()), None)
import numpy as np from fury import window, utils from fury.io import save_polydata, load_polydata from fury.utils import vtk my_polydata = vtk.vtkPolyData() my_vertices = np.array([[1.0, 0.0, 0.0], #0 [2.0, 0.75, 0.0], #1 [3.0, 0.0, 0.0], #2 [2.75, 1.25, 0.0], #3 [3.75, 2.0, 0.0], #4 [2.5, 2.0, 0.0], #5 [2.0, 3.0, 0.0], #6 [1.5, 2.0, 0.0], #7 [0.25, 2.0, 0.0], #8 [1.25, 1.25, 0.0]]) #9 my_triangles = np.array([[1, 9, 0], #good [1, 2, 3], [3, 4, 5], #good [5, 6, 7], [7, 8, 9], #good [1, 9, 3], #good [3, 7, 9], #good [3, 5, 7]], dtype='i8') #good utils.set_polydata_vertices(my_polydata, my_vertices) utils.set_polydata_triangles(my_polydata, my_triangles)
from fury.utils import vtk from fury import ui, window linesPolyData = vtk.vtkPolyData() pts = vtk.vtkPoints() count = 0 for i in range(0, 1800, 30): pts.InsertNextPoint([0, i, 0]) pts.InsertNextPoint([800, i, 0]) pts.InsertNextPoint([i, 0, 0]) pts.InsertNextPoint([i, 800, 0]) count += 1 linesPolyData.SetPoints(pts) lines = vtk.vtkCellArray() for i in range(0, count + 1, 4): h_line = vtk.vtkLine() v_line = vtk.vtkLine() h_line.GetPointIds().SetId(0, i) h_line.GetPointIds().SetId(1, i + 1) v_line.GetPointIds().SetId(0, i + 2) v_line.GetPointIds().SetId(1, i + 3) lines.InsertNextCell(h_line) lines.InsertNextCell(v_line)