Esempio n. 1
0
    def draw_image(self):
        w, h = (self.w, self.h)
        clearws()
        setwindow(0, self.w, 0, self.h)
        setviewport(0, 1, 0, 1)

        setbackgroundcolor(1, 1, 1, 0)
        vertices, normals = triangulate(data, \
          (1.0/64, 1.0/64, 1.0/128), (-0.5, -0.5, -0.5), self.isolevel)
        mesh = createmesh(len(vertices)*3, vertices, normals, \
          ones(vertices.shape))
        drawmesh(mesh, 1, (0, 0, 0), (0, 0, 1), (0, 1, 0), (1, 1, 1),
                 (1, 1, 1))
        center = spherical_to_cartesian(-2, pi * self.y / self.h + pi / 2,
                                        pi * self.x / self.w)
        up = spherical_to_cartesian(1, pi * self.y / self.h + pi,
                                    pi * self.x / self.w)
        cameralookat(center[0], center[1], -0.25 + center[2], 0, 0, -0.25,
                     up[0], up[1], up[2])
        drawimage(0, self.w, 0, self.h, \
          self.w, self.h, GR3_Drawable.GR3_DRAWABLE_GKS)
        if self.export:
            export("mri.html", 800, 800)
            print("Saved current isosurface to mri.html")
            self.export = False
        clear()
        deletemesh(c_int(mesh.value))
Esempio n. 2
0
    def draw_image(self):
        if not self.needs_refresh:
            return
        self.needs_refresh = False
        w, h = (self.w, self.h)
        clearws()
        setwindow(0, self.w, 0, self.h)
        setviewport(0, 1, 0, 1)

        setbackgroundcolor(1, 1, 1, 0)
        vertices, normals = triangulate(data, \
          (1.0/64, 1.0/64, 1.0/128), (-0.5, -0.5, -0.5), self.isolevel)
        mesh = createmesh(len(vertices)*3, vertices, normals, \
          ones(vertices.shape))
        drawmesh(mesh, 1, (0,0,0), (0,0,1), (0,1,0), (1,1,1), (1,1,1))
        center = spherical_to_cartesian(-2, pi*self.y/self.h+pi/2, pi*self.x/self.w)
        up = spherical_to_cartesian(1, pi*self.y/self.h+pi, pi*self.x/self.w)
        cameralookat(center[0], center[1], -0.25+center[2], 0, 0, -0.25, up[0], up[1], up[2])
        drawimage(0, self.w, 0, self.h, \
          self.w, self.h, GR3_Drawable.GR3_DRAWABLE_GKS)
        if self.export:
            export("mri.html", 800, 800)
            print("Saved current isosurface to mri.html")
            self.export = False
        clear()
        deletemesh(c_int(mesh.value))
Esempio n. 3
0
    def draw_image(self):
        if not self.needs_refresh:
            return
        self.needs_refresh = False
        gr.clearws()
        gr.setwindow(0, self.w, 0, self.h)
        gr.setviewport(0, 1, 0, 1)

        gr3.setbackgroundcolor(1, 1, 1, 0)
        vertices, normals = gr3.triangulate(data,
                                            (1.0 / 64, 1.0 / 64, 1.0 / 128),
                                            (-0.5, -0.5, -0.5), self.isolevel)
        mesh = gr3.createmesh(
            len(vertices) * 3, vertices, normals, np.ones(vertices.shape))
        gr3.drawmesh(mesh, 1, (0, 0, 0), (0, 0, 1), (0, 1, 0), (1, 1, 1),
                     (1, 1, 1))
        center = spherical_to_cartesian(-2,
                                        np.pi * self.y / self.h + np.pi / 2,
                                        np.pi * self.x / self.w)
        up = spherical_to_cartesian(1, np.pi * self.y / self.h + np.pi,
                                    np.pi * self.x / self.w)
        gr3.cameralookat(center[0], center[1], -0.25 + center[2], 0, 0, -0.25,
                         up[0], up[1], up[2])
        gr3.drawimage(0, self.w, 0, self.h, self.w, self.h,
                      gr3.GR3_Drawable.GR3_DRAWABLE_GKS)
        if self.export:
            gr3.export("mri.html", 800, 800)
            print("Saved current isosurface to mri.html")
            self.export = False
        gr3.clear()
        gr3.deletemesh(c_int(mesh.value))
Esempio n. 4
0
def cavity_triangles(cavity_grid, cavity_indices, isolevel, step, offset,
                     discretization_grid):
    cavity_triangles = []
    cavity_surface_areas = []
    grid = np.zeros(cavity_grid.shape, dtype=np.bool)

    for cavity_index in cavity_indices:
        grid = np.logical_or(grid, cavity_grid == -(cavity_index + 1))
    views = []
    for x, y, z in itertools.product(*map(xrange, (3, 3, 3))):
        view = grid[x:grid.shape[0] - 2 + x, y:grid.shape[1] - 2 + y,
                    z:grid.shape[2] - 2 + z]
        views.append(view)
    grid = np.zeros(grid.shape, np.uint16)
    grid[:, :, :] = 0
    grid[1:-1, 1:-1, 1:-1] = sum(views) + 100

    vertices, normals = triangulate(grid, (1, 1, 1), (0, 0, 0), 100 + isolevel)
    discrete_vertices = np.array(np.floor(vertices + 0.5), dtype=np.int)
    vertices *= np.tile(step, (vertices.shape[0], 3, 1))
    vertices += np.tile(offset, (vertices.shape[0], 3, 1))
    normals /= np.tile(step, (normals.shape[0], 3, 1))

    cavity_surface_area = 0
    for cavity_triangle, discrete_triangle in itertools.izip(
            vertices, discrete_vertices):
        any_outside = False
        for vertex, discrete_vertex in itertools.izip(cavity_triangle,
                                                      discrete_triangle):
            if discretization_grid[tuple(discrete_vertex)] != 0:
                any_outside = True
                break
        if not any_outside:
            v1, v2, v3 = cavity_triangle
            a = v2 - v1
            b = v3 - v1
            triangle_surface_area = np.linalg.norm(np.cross(a, b)) * 0.5
            cavity_surface_area += triangle_surface_area

    return vertices, normals, cavity_surface_area
Esempio n. 5
0
def cavity_triangles(cavity_grid,
                     cavity_indices,
                     isolevel, step, offset,
                     discretization_grid):
    cavity_triangles = []
    cavity_surface_areas = []
    grid = np.zeros(cavity_grid.shape, dtype=np.bool)

    for cavity_index in cavity_indices:
        grid = np.logical_or(grid, cavity_grid == -(cavity_index + 1))
    views = []
    for x, y, z in itertools.product(*map(xrange, (3, 3, 3))):
        view = grid[x:grid.shape[0] - 2 + x, y:grid.shape[1] - 2 + y, z:grid.shape[2] - 2 + z]
        views.append(view)
    grid = np.zeros(grid.shape, np.uint16)
    grid[:, :, :] = 0
    grid[1:-1, 1:-1, 1:-1] = sum(views) + 100

    vertices, normals = triangulate(grid, (1, 1, 1), (0, 0, 0), 100 + isolevel)
    discrete_vertices = np.array(np.floor(vertices + 0.5), dtype=np.int)
    vertices *= np.tile(step, (vertices.shape[0], 3, 1))
    vertices += np.tile(offset, (vertices.shape[0], 3, 1))
    normals /= np.tile(step, (normals.shape[0], 3, 1))

    cavity_surface_area = 0
    for cavity_triangle, discrete_triangle in itertools.izip(vertices, discrete_vertices):
        any_outside = False
        for vertex, discrete_vertex in itertools.izip(cavity_triangle, discrete_triangle):
            if discretization_grid[tuple(discrete_vertex)] != 0:
                any_outside = True
                break
        if not any_outside:
            v1, v2, v3 = cavity_triangle
            a = v2 - v1
            b = v3 - v1
            triangle_surface_area = np.linalg.norm(np.cross(a, b)) * 0.5
            cavity_surface_area += triangle_surface_area

    return vertices, normals, cavity_surface_area