예제 #1
0
def get_default_cubes(centers=np.asarray([[[0, 0, 0]], [[5, 5, 5]]]),
                      directions=np.asarray([[[0, 0, 0]], [[0, 0, 0]]]),
                      colors=np.random.rand(2, 3),
                      scales=[1, 1.5]):
    """Provides cube actors with default parameters

    Parameters
    ----------
    centers: ndarray, shape (2, 3)
        Cube positions
    directions: ndarray, shape (2, 3)
        The orientation vector of the cube.
    colors: ndarray ndarray (2,3) or (2, 4)
        RGB or RGBA (for opacity)
    scales: list of 2 floats
        Cube Sizes
    """
    cube_first_center, cube_second_center = centers
    cube_first_direction, cube_second_direction = directions
    cube_first_color, cube_second_color = colors
    cube_first_scale, cube_second_scale = scales

    cube_first = actor.cube(cube_first_center, cube_first_direction,
                            cube_first_color, cube_first_scale)

    cube_second = actor.cube(cube_second_center, cube_second_direction,
                             cube_second_color, cube_second_scale)

    return (cube_first, cube_second)
예제 #2
0
def generate_cube_with_effect():
    cube = actor.cube(np.array([[0, 0, 0]]))
    shader_to_actor(cube, "vertex", impl_code=vertex_impl,
                    decl_code=vertex_dec, block="valuepass")
    shader_to_actor(cube, "fragment", impl_code=frag_impl,
                    decl_code=frag_dec, block="light")
    return cube
예제 #3
0
파일: test_window.py 프로젝트: zoq/fury
def test_order_transparent():

    scene = window.Scene()

    red_cube = actor.cube(centers=np.array([[0., 0., 2]]),
                          directions=np.array([[0, 1., 0]]),
                          colors=np.array([[1, 0., 0]]))

    green_cube = actor.cube(centers=np.array([[0., 0., -2]]),
                            directions=np.array([[0, 1., 0]]),
                            colors=np.array([[0, 1., 0]]))

    red_cube.GetProperty().SetOpacity(0.2)
    green_cube.GetProperty().SetOpacity(0.2)

    scene.add(red_cube)
    scene.add(green_cube)

    scene.reset_camera()
    scene.reset_clipping_range()

    # without order_transparency the green will look stronger
    # when looked from behind the red cube
    arr = window.snapshot(scene,
                          fname=None,
                          offscreen=True,
                          order_transparent=False)

    # check if flags are set as expected (here no order transparency)
    npt.assert_equal(scene.GetLastRenderingUsedDepthPeeling(), 0)

    green_stronger = arr[150, 150, 1]

    arr = window.snapshot(scene,
                          fname=None,
                          offscreen=True,
                          order_transparent=True)

    # # check if flags are set as expected (here with order transparency)
    npt.assert_equal(scene.GetLastRenderingUsedDepthPeeling(), 1)

    # when order transparency is True green should be weaker
    green_weaker = arr[150, 150, 1]

    assert_greater(green_stronger, green_weaker)
예제 #4
0
파일: test_pick.py 프로젝트: mlraglin/fury
def test_hover_selection_vertices(recording=False):
    # simply hover through blue, green, red cubes
    # close to any vertices of each of the cubes

    recording_filename = join(DATA_DIR, 'selector_vertices.log.gz')

    centers, colors, radii = _get_three_cubes()

    scene = window.Scene()

    cube_actor = actor.cube(centers,
                            directions=(1, 0, 0),
                            colors=colors,
                            scales=radii)

    scene.add(cube_actor)

    selm = pick.SelectionManager(select='vertices')

    showm = window.ShowManager(scene,
                               size=(900, 768),
                               reset_camera=False,
                               order_transparent=True)

    showm.initialize()

    global track_objects2
    track_objects2 = []

    def hover_callback(_obj, _event):
        global track_objects2
        event_pos = selm.event_position(showm.iren)
        info = selm.select(event_pos, showm.scene, (100, 100))
        selected_triangles = info[0]['vertex']
        if selected_triangles is not None:
            track_objects2.append(selected_triangles[0] // 8)
        showm.render()

    showm.add_iren_callback(hover_callback)

    if recording:
        showm.record_events_to_file(recording_filename)

    else:
        showm.play_events_from_file(recording_filename)

    track_obj = set(track_objects2)

    npt.assert_(track_obj.issubset({0, 1, 2}))
    del track_objects2
예제 #5
0
파일: test_pick.py 프로젝트: mlraglin/fury
def test_hover_selection_actors_only(recording=False):
    # simply hover going through blue, green, red cubes

    recording_filename = join(DATA_DIR, 'selector_actors.log.gz')

    centers, colors, radii = _get_three_cubes()

    scene = window.Scene()

    cube_actor = actor.cube(centers,
                            directions=(1, 0, 0),
                            colors=colors,
                            scales=radii)

    scene.add(cube_actor)

    selm = pick.SelectionManager(select='actors')

    showm = window.ShowManager(scene,
                               size=(900, 768),
                               reset_camera=False,
                               order_transparent=True)

    showm.initialize()

    def hover_callback(_obj, _event):
        event_pos = selm.event_position(showm.iren)
        info = selm.pick(event_pos, showm.scene)
        selected_actor = info['actor']
        # print(id(selected_actor), id(cube_actor))
        if selected_actor is not None:
            npt.assert_equal(id(cube_actor), id(selected_actor))
        showm.render()

    showm.add_iren_callback(hover_callback)

    if recording:
        showm.record_events_to_file(recording_filename)

    else:
        showm.play_events_from_file(recording_filename)
예제 #6
0
panel.add_element(text_block, (0.3, 0.3))

###############################################################################
# Build scene and add an actor with many objects.

scene = window.Scene()

label_actor = actor.label(text='Test')

###############################################################################
# This actor is made with 3 cubes of different orientation

directions = np.array([[np.sqrt(2) / 2, 0, np.sqrt(2) / 2],
                       [np.sqrt(2) / 2, np.sqrt(2) / 2, 0],
                       [0, np.sqrt(2) / 2, np.sqrt(2) / 2]])
fury_actor = actor.cube(centers, directions, colors, heights=radii)

###############################################################################
# Access the memory of the vertices of all the cubes

vertices = utils.vertices_from_actor(fury_actor)
num_vertices = vertices.shape[0]
num_objects = centers.shape[0]

###############################################################################
# Access the memory of the colors of all the cubes

vcolors = utils.colors_from_actor(fury_actor, 'colors')

###############################################################################
# Adding an actor showing the axes of the world coordinates
예제 #7
0
파일: test_pick.py 프로젝트: mlraglin/fury
def test_selector_manager():

    centers, colors, radii = _get_three_cubes()

    scene = window.Scene()

    cube_actor = actor.cube(centers,
                            directions=(1, 0, 2),
                            colors=colors,
                            scales=radii)

    pts = 100 * (np.random.rand(100, 3) - 0.5) + np.array([20, 0, 0.])
    pts_actor = actor.dots(pts, dot_size=10)

    rgb = 255 * np.ones((400, 400, 3), dtype=np.uint8)
    tex_actor = actor.texture(rgb)

    scene.add(cube_actor)
    scene.add(pts_actor)
    scene.add(tex_actor)

    showm = window.ShowManager(scene,
                               size=(900, 768),
                               reset_camera=False,
                               order_transparent=True)

    showm.initialize()

    tb = ui.TextBlock2D(bold=True)

    # use itertools to avoid global variables
    counter = itertools.count()

    selm = pick.SelectionManager(select='faces')

    selm.selectable_off([tex_actor])
    selm.selectable_on([tex_actor])
    selm.selectable_off([tex_actor])

    def timer_callback(_obj, _event):
        cnt = next(counter)
        tb.message = "Let's count up to 15 and exit :" + str(cnt)
        if cnt % 10 == 0:
            # select large area
            info_plus = selm.select((900 // 2, 768 // 2), scene, (30, 30))
            for info in info_plus.keys():
                if info_plus[info]['actor'] in [cube_actor, pts_actor]:
                    npt.assert_(True)
                else:
                    npt.assert_(False)
            # select single pixel
            info_ = selm.pick((900 // 2, 768 // 2), scene)
            if info_['actor'] in [cube_actor, pts_actor]:
                npt.assert_(True)
            else:
                npt.assert_(False)

        showm.render()
        if cnt == 15:
            showm.exit()
            pass

    scene.add(tb)

    # Run every 200 milliseconds
    showm.add_timer_callback(True, 200, timer_callback)
    showm.start()
예제 #8
0
def test_double_click_events(recording=False):
    filename = "test_double_click_events.log.gz"
    recording_filename = pjoin(DATA_DIR, filename)

    label = ui.TextBlock2D(position=(400, 780),
                           font_size=40,
                           color=(1, 0.5, 0),
                           justification="center",
                           vertical_justification="top",
                           text="FURY rocks!!!")

    cube = actor.cube(np.array([(0, 0, 0)]),
                      np.array([(0.16526678, 0.0186237, 0.01906076)]),
                      (1, 1, 1),
                      scales=3)

    states = defaultdict(lambda: 0)

    def left_single_click(iren, obj):
        states["LeftButtonPressEvent"] += 1
        iren.force_render()

    def left_double_click(iren, obj):
        states["LeftButtonDoubleClickEvent"] += 1
        label.color = (1, 0, 0)
        iren.force_render()

    def right_single_click(iren, obj):
        states["RightButtonPressEvent"] += 1
        iren.force_render()

    def right_double_click(iren, obj):
        states["RightButtonDoubleClickEvent"] += 1
        label.color = (0, 1, 0)
        iren.force_render()

    def middle_single_click(iren, obj):
        states["MiddleButtonPressEvent"] += 1
        iren.force_render()

    def middle_double_click(iren, obj):
        states["MiddleButtonDoubleClickEvent"] += 1
        label.color = (0, 0, 1)
        iren.force_render()

    test_events = {
        "LeftButtonPressEvent": left_single_click,
        "LeftButtonDoubleClickEvent": left_double_click,
        "RightButtonPressEvent": right_single_click,
        "RightButtonDoubleClickEvent": right_double_click,
        "MiddleButtonPressEvent": middle_single_click,
        "MiddleButtonDoubleClickEvent": middle_double_click
    }

    current_size = (800, 800)
    showm = window.ShowManager(size=current_size, title="Double Click Test")
    showm.scene.add(cube)
    showm.scene.add(label)

    for test_event, callback in test_events.items():
        showm.style.add_callback(cube, test_event, callback)

    if recording:
        showm.record_events_to_file(recording_filename)
        print(list(states.items()))
    else:
        showm.play_events_from_file(recording_filename)
        msg = ("Wrong count for '{}'.")
        expected = [('LeftButtonPressEvent', 3),
                    ('LeftButtonDoubleClickEvent', 1),
                    ('MiddleButtonPressEvent', 3),
                    ('MiddleButtonDoubleClickEvent', 1),
                    ('RightButtonPressEvent', 2),
                    ('RightButtonDoubleClickEvent', 1)]

        # Useful loop for debugging.
        for event, count in expected:
            if states[event] != count:
                print("{}: {} vs. {} (expected)".format(
                    event, states[event], count))

        for event, count in expected:
            npt.assert_equal(states[event], count, err_msg=msg.format(event))
예제 #9
0
from fury import actor, window, interactor
import numpy as np

dir1 = np.random.rand(1, 3)
dir2 = np.random.rand(1, 3)
cube1 = actor.cube([(0, 0, 0)], [(0.16526678, 0.0186237, 0.01906076)],
                   (1, 1, 1),
                   heights=3)
cube2 = actor.cube([(0, 0, 0)], [(0.16526678, 0.0186237, 0.01906076)],
                   (1, 0, 0),
                   heights=3)

print(dir1)
print(dir2)

cube2.SetVisibility(False)


def left_single_click(iren, obj):
    print("> Left Single Click <")
    print(iren.event.name)
    iren.force_render()


def left_double_click(iren, obj):
    print("> Left Double Click <")
    print(iren.event.name)
    cube1.SetVisibility(not bool(cube1.GetVisibility()))
    cube2.SetVisibility(not bool(cube2.GetVisibility()))
    iren.force_render()
예제 #10
0
파일: viz_ui.py 프로젝트: tantheta01/fury
def change_icon_callback(i_ren, _obj, _button):
    _button.next_icon()
    i_ren.force_render()


button_example.on_left_mouse_button_clicked = change_text_callback
second_button_example.on_left_mouse_button_pressed = change_icon_callback

###############################################################################
# Cube and sliders
# ================
#
# Let's add a cube to the scene and control it with sliders.

cube = actor.cube(centers=np.array([[15, 0, 0]]),
                  colors=np.array([[0, 0, 1]]),
                  scales=np.array([[20, 20, 20]]),
                  directions=np.array([[0, 0, 1]]))

###############################################################################
# Now we'll add three sliders: one circular and two linear.

ring_slider = ui.RingSlider2D(center=(740, 400),
                              initial_value=0,
                              text_template="{angle:5.1f}°")

line_slider_x = ui.LineSlider2D(center=(500, 250),
                                initial_value=0,
                                min_value=-10,
                                max_value=10,
                                orientation="horizontal")
예제 #11
0
# Keep track of total number of triangle faces
# Note that every quad of each cube has 2 triangles
# and each cube has 6 quads in total.

num_faces = num_cubes * 6 * 2

###############################################################################
# Build scene and add an actor with many objects.

scene = window.Scene()

###############################################################################
# Build the actor containing all the cubes

cube_actor = actor.cube(centers,
                        directions=(1, 0, 0),
                        colors=colors,
                        scales=radii)

###############################################################################
# Access the memory of the vertices of all the cubes

vertices = utils.vertices_from_actor(cube_actor)
num_vertices = vertices.shape[0]
num_objects = centers.shape[0]

###############################################################################
# Access the memory of the colors of all the cubes

vcolors = utils.colors_from_actor(cube_actor, 'colors')

###############################################################################