def test_cursor_ray_3d(): # make a mock mouse event mouse_event_1 = MouseEvent( pos=[25, 25], position=[1, 10, 27, 10], dims_point=[1, 0, 0, 0], dims_displayed=[1, 2, 3], view_direction=[0, 1, 0, 0], ) data = np.zeros((5, 20, 20, 20), dtype=int) data[1, 0:10, 0:10, 0:10] = 1 labels = Labels(data, scale=(1, 1, 2, 1), translate=(5, 5, 5)) # set the slice to one with data and the view to 3D labels._slice_dims([1, 0, 0, 0], ndisplay=3) # axis 0 : [0, 20], bounding box extents along view axis, [1, 0, 0] # click is transformed: (value - translation) / scale # axis 1: click at 27 in world coords -> (27 - 5) / 2 = 11 # axis 2: click at 10 in world coords -> (10 - 5) / 1 = 5 start_point, end_point = labels.get_ray_intersections( mouse_event_1.position, mouse_event_1.view_direction, mouse_event_1.dims_displayed, ) np.testing.assert_allclose(start_point, [1, 0, 11, 5]) np.testing.assert_allclose(end_point, [1, 20, 11, 5]) # click in the background mouse_event_2 = MouseEvent( pos=[25, 25], position=[1, 10, 65, 10], dims_point=[1, 0, 0, 0], dims_displayed=[1, 2, 3], view_direction=[0, 1, 0, 0], ) start_point, end_point = labels.get_ray_intersections( mouse_event_2.position, mouse_event_2.view_direction, mouse_event_2.dims_displayed, ) assert start_point is None assert end_point is None # click in a slice with no labels mouse_event_3 = MouseEvent( pos=[25, 25], position=[0, 10, 27, 10], dims_point=[0, 0, 0, 0], dims_displayed=[1, 2, 3], view_direction=[0, 1, 0, 0], ) labels._slice_dims([0, 0, 0, 0], ndisplay=3) start_point, end_point = labels.get_ray_intersections( mouse_event_3.position, mouse_event_3.view_direction, mouse_event_3.dims_displayed, ) np.testing.assert_allclose(start_point, [0, 0, 11, 5]) np.testing.assert_allclose(end_point, [0, 20, 11, 5])
def test_cursor_ray_3d_transposed(): """Test that the cursor works when the displayed viewer axes have been transposed """ # make a mock mouse event mouse_event_1 = MouseEvent( pos=[25, 25], position=[10, 27, 10, 1], dims_point=[0, 0, 0, 1], dims_displayed=[0, 2, 1], view_direction=[1, 0, 0, 0], ) data = np.zeros((20, 20, 20, 5), dtype=int) data[0:10, 0:10, 0:10, 1] = 1 labels = Labels(data, scale=(1, 2, 1, 1), translate=(5, 5, 5, 0)) # set the slice to one with data and the view to 3D labels._slice_dims([0, 0, 0, 1], ndisplay=3) start_point, end_point = labels.get_ray_intersections( mouse_event_1.position, mouse_event_1.view_direction, mouse_event_1.dims_displayed, ) np.testing.assert_allclose(start_point, [0, 11, 5, 1]) np.testing.assert_allclose(end_point, [20, 11, 5, 1])