Ejemplo n.º 1
0
def test_image_resize_sum(resx, resy, comp, scale):
    shape = (resx, resy)
    if comp != 1:
        shape = shape + (comp, )
    old_img = np.random.rand(*shape).astype(np.float32)
    if resx == resy:
        new_img = ti.imresize(old_img, resx * scale)
    else:
        new_img = ti.imresize(old_img, resx * scale, resy * scale)
    assert np.sum(old_img) * scale**2 == ti._testing.approx(np.sum(new_img))
Ejemplo n.º 2
0
 def main(self):
     gui = ti.GUI('Marching cube')
     while gui.running and not gui.get_event(gui.ESCAPE):
         if self.use_sparse:
             ti.deactivate_all_snodes()
         else:
             self.m.fill(0)
         self.touch(*gui.get_cursor_pos())
         ret_len = self.march()
         ret = self.r.to_numpy()[:ret_len] / self.N
         if self.dim == 2:
             #gui.set_image(ti.imresize(self.m, *gui.res))
             self.compute_grad()
             gui.set_image(ti.imresize(self.g, *gui.res) * 0.5 + 0.5)
             gui.lines(ret[:, 0], ret[:, 1], color=0xff66cc, radius=1.5)
         else:
             gui.triangles(ret[:, 0, 0:2],
                           ret[:, 1, 0:2],
                           ret[:, 2, 0:2],
                           color=0xffcc66)
             gui.lines(ret[:, 0, 0:2],
                       ret[:, 1, 0:2],
                       color=0xff66cc,
                       radius=0.5)
             gui.lines(ret[:, 1, 0:2],
                       ret[:, 2, 0:2],
                       color=0xff66cc,
                       radius=0.5)
             gui.lines(ret[:, 2, 0:2],
                       ret[:, 0, 0:2],
                       color=0xff66cc,
                       radius=0.5)
             gui.text(f'Press space to save mesh to PLY ({len(ret)} faces)',
                      (0, 1))
             if gui.is_pressed(gui.SPACE):
                 num = ret.shape[0]
                 writer = ti.PLYWriter(num_vertices=num * 3, num_faces=num)
                 vertices = ret.reshape(num * 3, 3) * 2 - 1
                 writer.add_vertex_pos(vertices[:, 0], vertices[:, 1],
                                       vertices[:, 2])
                 indices = np.arange(0, num * 3)
                 writer.add_faces(indices)
                 writer.export('mciso_output.ply')
                 print('Mesh saved to mciso_output.ply')
         gui.show()
Ejemplo n.º 3
0
 def main(self):
     gui = ti.GUI('Marching cube')
     while gui.running and not gui.get_event(gui.ESCAPE):
         self.clear()
         self.touch(*gui.get_cursor_pos())
         self.march()
         Jts = self.Jts.to_numpy()[:self.Js_n[None]]
         vs = (self.vs.to_numpy()[:self.vs_n[None]] + 0.5) / self.N
         ret = vs[Jts]
         if self.dim == 2:
             #gui.set_image(ti.imresize(self.m, *gui.res))
             gui.set_image(ti.imresize(self.g, *gui.res) + 0.5)
             gui.lines(ret[:, 0], ret[:, 1], color=0xff66cc, radius=1.25)
             #gui.circles(vs, color=0xffff33, radius=1.5)
         else:
             #gui.triangles(ret[:, 0, 0:2],
             #ret[:, 1, 0:2],
             #ret[:, 2, 0:2],
             #color=0xffcc66)
             gui.lines(ret[:, 0, 0:2],
                       ret[:, 1, 0:2],
                       color=0xff66cc,
                       radius=0.5)
             gui.lines(ret[:, 1, 0:2],
                       ret[:, 2, 0:2],
                       color=0xff66cc,
                       radius=0.5)
             gui.lines(ret[:, 2, 0:2],
                       ret[:, 0, 0:2],
                       color=0xff66cc,
                       radius=0.5)
             gui.text(
                 f'Press space to save mesh to PLY ({len(vs)} verts, {len(Jts)} faces)',
                 (0, 1))
             if gui.is_pressed(gui.SPACE):
                 writer = ti.PLYWriter(num_vertices=len(vs),
                                       num_faces=len(Jts))
                 writer.add_vertex_pos(vs[:, 0], vs[:, 1], vs[:, 2])
                 writer.add_faces(Jts)
                 writer.export('mciso_output.ply')
                 print('Mesh saved to mciso_output.ply')
         gui.show()
Ejemplo n.º 4
0
 def main(self, export_result=None):
     gui = ti.GUI('Marching cube')
     while gui.running and not gui.get_event(gui.ESCAPE):
         if self.use_sparse:
             ti.root.deactivate_all()
         else:
             self.m.fill(0)
         self.touch(*gui.get_cursor_pos())
         ret_len = self.march()
         ret = self.r.to_numpy()[:ret_len] / self.N
         if self.dim == 2:
             gui.set_image(ti.imresize(self.m, *gui.res))
             gui.lines(ret[:, 0], ret[:, 1], color=0xff66cc, radius=1.5)
         else:
             gui.triangles(ret[:, 0, 0:2],
                           ret[:, 1, 0:2],
                           ret[:, 2, 0:2],
                           color=0xffcc66)
             gui.lines(ret[:, 0, 0:2],
                       ret[:, 1, 0:2],
                       color=0xff66cc,
                       radius=0.5)
             gui.lines(ret[:, 1, 0:2],
                       ret[:, 2, 0:2],
                       color=0xff66cc,
                       radius=0.5)
             gui.lines(ret[:, 2, 0:2],
                       ret[:, 0, 0:2],
                       color=0xff66cc,
                       radius=0.5)
             if export_result is not None:
                 num = ret.shape[0]
                 writer = ti.PLYWriter(num_vertices=num * 3, num_faces=num)
                 vertices = ret.reshape(num * 3, 3) * 2 - 1
                 writer.add_vertex_pos(vertices[:, 0], vertices[:, 1],
                                       vertices[:, 2])
                 indices = np.arange(0, num * 3)
                 writer.add_faces(indices)
                 writer.export_frame(gui.frame, export_result)
         gui.show()
Ejemplo n.º 5
0
    for i, j in ti.ndrange(N - 1, N - 1):
        id = 0
        if m[i, j] > 1: id |= 1
        if m[i + 1, j] > 1: id |= 2
        if m[i, j + 1] > 1: id |= 4
        if m[i + 1, j + 1] > 1: id |= 8

        E = [ti.Vector(_) + .5 for _ in [(.5, 0), (0, .5), (1, .5), (.5, 1)]]

        for k in range(2):
            if et[id, k][0] == -1:
                break

            n = ti.atomic_add(r_n, 1)
            for l in ti.static(range(2)):
                e = et[id, k][l]
                r[n, l] = ti.Vector([i, j]) + list_subscript(E, e)

    return r_n


gui = ti.GUI('Marching rect')
while gui.running and not gui.get_event(gui.ESCAPE):
    touch(*gui.get_cursor_pos())
    ret_len = march()
    ret = r.to_numpy()[:ret_len] / N
    gui.set_image(ti.imresize(m, *gui.res))
    gui.lines(ret[:, 0], ret[:, 1], color=0xff66cc, radius=1.5)
    gui.show()
Ejemplo n.º 6
0
            ret += vel[x, y, z].norm() * 4
            cnt += 1
        img[x, y] = ret / cnt


#'''
initialize()
gui = ti.GUI('LBM', (1024, 256))
while gui.running and not gui.get_event(gui.ESCAPE):
    t0 = time.time()
    for subs in range(28):
        substep()
    render()
    ti.sync()
    print(time.time() - t0)
    gui.set_image(ti.imresize(img, *gui.res))
    gui.show()
'''
initialize()
for frame in range(24 * 24):

    print('compute for', frame); t0 = time.time()
    for subs in range(28):
        #print('substep', subs)
        substep()
    print('compute time', time.time() - t0)

    #grid = np.empty(res + (4,), dtype=np.float32)
    #grid[..., 3] = rho.to_numpy()
    #grid[..., :3] = vel.to_numpy()
Ejemplo n.º 7
0

gui = ti.GUI('Game of Life', (img_size, img_size))
gui.fps_limit = 15

print('[Hint] Press `r` to reset')
print('[Hint] Press SPACE to pause')
print('[Hint] Click LMB, RMB and drag to add alive / dead cells')

init()
paused = False
while gui.running:
    for e in gui.get_events(gui.PRESS, gui.MOTION):
        if e.key == gui.ESCAPE:
            gui.running = False
        elif e.key == gui.SPACE:
            paused = not paused
        elif e.key == 'r':
            alive.fill(0)

    if gui.is_pressed(gui.LMB, gui.RMB):
        mx, my = gui.get_cursor_pos()
        alive[int(mx * n), int(my * n)] = gui.is_pressed(gui.LMB)
        paused = True

    if not paused:
        run()

    gui.set_image(ti.imresize(alive, img_size).astype(np.uint8) * 255)
    gui.show()
Ejemplo n.º 8
0
        if pixels[i + 1, j] > level: case_id |= 2
        if pixels[i + 1, j + 1] > level: case_id |= 4
        if pixels[i, j + 1] > level: case_id |= 8

        for k in range(2):
            if edge_table[case_id, k][0] == -1:
                break

            n = ti.atomic_add(n_edges, 1)
            for l in ti.static(range(2)):
                vertex_id = edge_table[case_id, k][l]
                edge_coords[n, l] = ti.Vector([i, j
                                               ]) + get_vertex(vertex_id) + 0.5

    return n_edges


level = 0.2

gui = ti.GUI('Marching squares')
while gui.running and not gui.get_event(gui.ESCAPE):
    touch(*gui.get_cursor_pos(), 0.05)
    n_edges = march(level)
    edge_coords_np = edge_coords.to_numpy()[:n_edges] / N
    gui.set_image(ti.imresize(pixels, *gui.res) / level)
    gui.lines(edge_coords_np[:, 0],
              edge_coords_np[:, 1],
              color=0xff66cc,
              radius=1.5)
    gui.show()