def test_ui_line_slider_2d_vertical(recording=False): filename = "test_ui_line_slider_2d_vertical" recording_filename = pjoin(DATA_DIR, filename + ".log.gz") expected_events_counts_filename = pjoin(DATA_DIR, filename + ".json") line_slider_2d_test = ui.LineSlider2D(initial_value=-2, min_value=-5, max_value=5, orientation="vertical") line_slider_2d_test.center = (300, 300) # Assign the counter callback to every possible event. event_counter = EventCounter() event_counter.monitor(line_slider_2d_test) current_size = (600, 600) show_manager = window.ShowManager(size=current_size, title="FURY Vertical Line Slider") show_manager.scene.add(line_slider_2d_test) if recording: show_manager.record_events_to_file(recording_filename) print(list(event_counter.events_counts.items())) event_counter.save(expected_events_counts_filename) else: show_manager.play_events_from_file(recording_filename) expected = EventCounter.load(expected_events_counts_filename) event_counter.check_counts(expected)
cube_actor = window.vtk.vtkActor() cube_actor.SetMapper(cube_mapper) if color is not None: cube_actor.GetProperty().SetColor(color) return cube_actor cube = cube_maker(color=(0, 0, 1), size=(20, 20, 20), center=(15, 0, 0)) ############################################################################### # Now we'll add two sliders: one circular and one linear. ring_slider = ui.RingSlider2D(center=(740, 400), initial_value=0, text_template="{angle:5.1f}°") line_slider = ui.LineSlider2D(center=(500, 250), initial_value=0, min_value=-10, max_value=10) ############################################################################### # We can use a callback to rotate the cube with the ring slider. def rotate_cube(slider): angle = slider.value previous_angle = slider.previous_value rotation_angle = angle - previous_angle cube.RotateX(rotation_angle) ring_slider.on_change = rotate_cube ###############################################################################
def test_ui_tab_ui(interactive=False): filename = "test_ui_tab_ui" recording_filename = pjoin(DATA_DIR, filename + ".log.gz") expected_events_counts_filename = pjoin(DATA_DIR, filename + ".json") tab_ui = ui.TabUI(position=(50, 50), size=(300, 300), nb_tabs=3, draggable=True) tab_ui.tabs[0].title = "Tab 1" tab_ui.tabs[1].title = "Tab 2" tab_ui.tabs[2].title = "Tab 3" tab_ui.add_element(0, ui.Checkbox(["Option 1", "Option 2"]), (0.5, 0.5)) tab_ui.add_element(1, ui.LineSlider2D(), (0.0, 0.5)) tab_ui.add_element(2, ui.TextBlock2D(), (0.5, 0.5)) with npt.assert_raises(IndexError): tab_ui.add_element(3, ui.TextBlock2D(), (0.5, 0.5, 0.5)) with npt.assert_raises(IndexError): tab_ui.remove_element(3, ui.TextBlock2D()) with npt.assert_raises(IndexError): tab_ui.update_element(3, ui.TextBlock2D(), (0.5, 0.5, 0.5)) npt.assert_equal("Tab 1", tab_ui.tabs[0].title) npt.assert_equal("Tab 2", tab_ui.tabs[1].title) npt.assert_equal("Tab 3", tab_ui.tabs[2].title) npt.assert_equal(3, tab_ui.nb_tabs) collapses = itertools.count() changes = itertools.count() def collapse(tab_ui): if tab_ui.collapsed: next(collapses) def tab_change(tab_ui): next(changes) tab_ui.on_change = tab_change tab_ui.on_collapse = collapse event_counter = EventCounter() event_counter.monitor(tab_ui) current_size = (800, 800) show_manager = window.ShowManager(size=current_size, title="Tab UI Test") show_manager.scene.add(tab_ui) if interactive: show_manager.record_events_to_file(recording_filename) print(list(event_counter.events_counts.items())) event_counter.save(expected_events_counts_filename) else: show_manager.play_events_from_file(recording_filename) expected = EventCounter.load(expected_events_counts_filename) event_counter.check_counts(expected) npt.assert_equal(0, tab_ui.active_tab_idx) npt.assert_equal(11, next(changes)) npt.assert_equal(5, next(collapses))
# Now we would like to change the position of each ``image_actor`` using a # slider. The sliders are widgets which require access to different areas of # the visualization pipeline and therefore we don't recommend using them with # ``show``. The more appropriate way is to use them with the ``ShowManager`` # object which allows accessing the pipeline in different areas. Here is how: show_m = window.ShowManager(ren, size=(1200, 900)) show_m.initialize() ############################################################################### # After we have initialized the ``ShowManager`` we can go ahead and create # sliders to move the slices and change their opacity. line_slider_z = ui.LineSlider2D(min_value=0, max_value=shape[2] - 1, initial_value=shape[2] / 2, text_template="{value:.0f}", length=140) line_slider_x = ui.LineSlider2D(min_value=0, max_value=shape[0] - 1, initial_value=shape[0] / 2, text_template="{value:.0f}", length=140) line_slider_y = ui.LineSlider2D(min_value=0, max_value=shape[1] - 1, initial_value=shape[1] / 2, text_template="{value:.0f}", length=140)
if color is not None: cube_actor.GetProperty().SetColor(color) return cube_actor cube = cube_maker(color=(0, 0, 1), size=(20, 20, 20), center=(15, 0, 0)) ############################################################################### # Now we'll add five sliders: 1 circular and 4 linear sliders. # By default the alignments are 'bottom' for horizontal and 'top' for vertical. ring_slider = ui.RingSlider2D(center=(630, 400), initial_value=0, text_template="{angle:5.1f}°") hor_line_slider_text_top = ui.LineSlider2D(center=(400, 230), initial_value=0, orientation='horizontal', min_value=-10, max_value=10, text_alignment='top') hor_line_slider_text_bottom = ui.LineSlider2D(center=(400, 200), initial_value=0, orientation='horizontal', min_value=-10, max_value=10, text_alignment='bottom') ver_line_slider_text_left = ui.LineSlider2D(center=(100, 400), initial_value=0, orientation='vertical', min_value=-10, max_value=10, text_alignment='left') ver_line_slider_text_right = ui.LineSlider2D(center=(150, 400), initial_value=0,
panel_2 = ui.Panel2D(size=(250, 250), color=(0.8, 0.3, 0.5), position=(150, 150)) ############################################################################### # Now we create two listboxes listbox_1 = ui.ListBox2D(size=(150, 150), values=['First', 'Second', 'Third']) listbox_2 = ui.ListBox2D(size=(250, 250), values=['First', 'Second', 'Third']) ############################################################################### # Now we create two diffrent UI i.e. a slider and a listbox slider = ui.LineSlider2D(length=150) listbox = ui.ListBox2D(size=(150, 150), values=['First', 'Second', 'Third']) ############################################################################### # Now, we create grids with different shapes rect_grid = GridLayout(position_offset=(0, 0, 0)) square_grid = GridLayout(cell_shape='square', position_offset=(0, 300, 0)) diagonal_grid = GridLayout(cell_shape="diagonal", position_offset=(0, 600, 0)) ############################################################################### # Applying the grid to the ui elements rect_grid.apply([panel_1, panel_2]) square_grid.apply([listbox_1, listbox_2]) diagonal_grid.apply([slider, listbox])
cube_actor.GetProperty().SetColor(color) return cube_actor cube = cube_maker(color=(0, 0, 1), size=(20, 20, 20), center=(15, 5, 0)) ############################################################################### # 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") line_slider_y = ui.LineSlider2D(center=(650, 350), initial_value=0, min_value=-10, max_value=10, orientation="vertical") ############################################################################### # We can use a callback to rotate the cube with the ring slider. def rotate_cube(slider): angle = slider.value
control_panel.add_element(slider_label_roughness, (.01, .86)) control_panel.add_element(slider_label_anisotropy, (.01, .77)) control_panel.add_element(slider_label_anisotropy_rotation, (.01, .68)) control_panel.add_element(slider_label_anisotropy_direction_x, (.01, .59)) control_panel.add_element(slider_label_anisotropy_direction_y, (.01, .5)) control_panel.add_element(slider_label_anisotropy_direction_z, (.01, .41)) control_panel.add_element(slider_label_coat_strength, (.01, .32)) control_panel.add_element(slider_label_coat_roughness, (.01, .23)) control_panel.add_element(slider_label_base_ior, (.01, .14)) control_panel.add_element(slider_label_coat_ior, (.01, .05)) ############################################################################### # Our sliders are created and added to the panel in the following way. slider_slice_metallic = ui.LineSlider2D(initial_value=pbr_params.metallic, max_value=1, length=195, text_template='{value:.1f}') slider_slice_roughness = ui.LineSlider2D(initial_value=pbr_params.roughness, max_value=1, length=195, text_template='{value:.1f}') slider_slice_anisotropy = ui.LineSlider2D(initial_value=pbr_params.anisotropy, max_value=1, length=195, text_template='{value:.1f}') slider_slice_anisotropy_rotation = ui.LineSlider2D( initial_value=pbr_params.anisotropy_rotation, max_value=1, length=195, text_template='{value:.1f}') slider_slice_coat_strength = ui.LineSlider2D(
tab_ui = ui.TabUI(position=(49, 94), size=(300, 300), nb_tabs=3, draggable=True) ############################################################################### # Slider Controls for a Cube for Tab Index 0 # ========================================== # # Now we prepare content for the first tab. ring_slider = ui.RingSlider2D(initial_value=0, text_template="{angle:5.1f}°") line_slider_x = ui.LineSlider2D(initial_value=0, min_value=-10, max_value=10, orientation="horizontal", text_alignment="Top") line_slider_y = ui.LineSlider2D(initial_value=0, min_value=-10, max_value=10, orientation="vertical", text_alignment="Right") cube = actor.box(centers=np.array([[10, 0, 0]]), directions=np.array([[0, 1, 0]]), colors=np.array([[0, 0, 1]]), scales=np.array([[1, 1, 1]])) cube_x = 0 cube_y = 0
min_centers = np.min(centers, axis=0) max_centers = np.max(centers, axis=0) low_perc = np.array([50, 50, 50]) high_perc = np.array([100, 100, 100]) low_ranges = np.array( [np.percentile(centers[:, i], v) for i, v in enumerate(low_perc)]) high_ranges = np.array( [np.percentile(centers[:, i], v) for i, v in enumerate(high_perc)]) slider_frame_thr = ui.LineSlider2D(initial_value=0, min_value=0, max_value=len(xml_files) - 1, length=260, line_width=3, outer_radius=8, font_size=16, text_template="{value:.0f}") slider_clipping_plane_thrs_x = ui.LineDoubleSlider2D( line_width=3, outer_radius=8, length=260, initial_values=(low_ranges[0], high_ranges[0]), min_value=min_centers[0], max_value=max_centers[0], font_size=16, text_template="{value:.0f}") slider_clipping_plane_thrs_y = ui.LineDoubleSlider2D(
#Drawing Axis lines = [np.array([[-500.,-800.,-500.],[500.,-800.,-500.],[500.,800.,-500.],[-500.,800.,-500.],[-500.,-800.,-500.],[-500.,-800.,500.],[-500.,800.,500.],[-500.,800.,-500.],[-500.,800.,500.],[500.,800.,500.],[500.,800.,-500.],[500.,800.,-500.],[500.,-800.,-500.],[500.,-800.,500.],[500.,800.,500.],[500.,-800.,500.],[-500.,-800.,500.]])] colors = np.random.rand(1,3) c = actor.line(lines, colors) scene.add(c) x_label = actor.text_3d(text='x axis (micron)',position=(-100,-900,550),font_size=50,justification='left') scene.add(x_label) y_label = actor.text_3d(text='y axis (micron)',position=(-900,0,550),font_size=50,justification='left') scene.add(y_label) z_label = actor.text_3d(text='z axis (micron)',position=(600,-900,0),font_size=50,justification='left') scene.add(z_label) line_slider = ui.LineSlider2D(center=(200, 250), initial_value=1, min_value=0, max_value=37,text_template="{value:.0f}") line_slider.on_change = line_slider_value showm.scene.add(line_slider) current_Timepoint = 1 def timer_callback(_obj, _event): global current_Timepoint, Timepoint, c cnt = next(counter) maxcnt = 1000 Logic_check = (current_Timepoint == Timepoint) current_Timepoint = Timepoint tb.message = "Time Point : " + str(Timepoint)+ " hrs" scene.add(tb) #scene.camera_info()
def build_slider_demo(self): panel = ui.Panel2D(size=(500, 150), color=(1.0, 1.0, 1.0), align="right", opacity=0.1) panel.center = (500, 400) ring_slider = ui.RingSlider2D(center=(740, 400), initial_value=0, text_template="{angle:5.1f}") ring_slider.default_color = (1, 0.5, 0) ring_slider.track.color = (0.8, 0.3, 0) ring_slider.active_color = (0.9, 0.4, 0) ring_slider.handle.color = (1, 0.5, 0) line_slider = ui.LineSlider2D(center=(500, 250), initial_value=0, min_value=-10, max_value=10) line_slider.default_color = (1, 0.5, 0) line_slider.track.color = (0.8, 0.3, 0) line_slider.active_color = (0.9, 0.4, 0) line_slider.handle.color = (1, 0.5, 0) def cube_maker(color=(1, 1, 1), size=(0.2, 0.2, 0.2), center=(0, 0, 0)): cube = vtk.vtkCubeSource() cube.SetXLength(size[0]) cube.SetYLength(size[1]) cube.SetZLength(size[2]) if center is not None: cube.SetCenter(*center) cube_mapper = vtk.vtkPolyDataMapper() cube_mapper.SetInputConnection(cube.GetOutputPort()) cube_actor = vtk.vtkActor() cube_actor.SetMapper(cube_mapper) if color is not None: cube_actor.GetProperty().SetColor(color) return cube_actor cube = cube_maker(color=(0, 0, 1), size=(20, 20, 20), center=(15, 0, 0)) def rotate_cube(slider): angle = slider.value previous_angle = slider.previous_value rotation_angle = angle - previous_angle cube.RotateX(rotation_angle) ring_slider.on_change = rotate_cube def translate_cube(slider): value = slider.value cube.SetPosition(value, 0, 0) line_slider.on_change = translate_cube panel.add_element(ring_slider, (50, 20)) panel.add_element(line_slider, (200, 70)) return ('Slider Demo', [panel, cube])
grid_shape[1] - 1, 0, grid_shape[2] - 1) scene = window.Scene() scene.add(odf_actor_z) scene.add(odf_actor_y) scene.add(odf_actor_x) show_m = window.ShowManager(scene, reset_camera=True, size=(1200, 900)) show_m.initialize() ############################################################################### # Now that we have a `ShowManager` containing our slicer, we can go on and # configure our UI for changing the slices to visualize. line_slider_z = ui.LineSlider2D(min_value=0, max_value=grid_shape[2] - 1, initial_value=grid_shape[2] / 2, text_template="{value:.0f}", length=140) line_slider_y = ui.LineSlider2D(min_value=0, max_value=grid_shape[1] - 1, initial_value=grid_shape[1] / 2, text_template="{value:.0f}", length=140) line_slider_x = ui.LineSlider2D(min_value=0, max_value=grid_shape[0] - 1, initial_value=grid_shape[0] / 2, text_template="{value:.0f}", length=140)
def create_visualization(self): ren_win = self.getView('-1') scene = ren_win.GetRenderers().GetFirstRenderer() showm = self.getSharedObject('SHOWM') self.panel = ui.Panel2D((480, 270), position=(5, 5), color=(1, 1, 1), opacity=.1, align='right') self.slider_frame_label = build_label('Frame') self.slider_frame_label.set_visibility(False) self.slider_frame_thr = ui.LineSlider2D(initial_value=0, min_value=0, max_value=1, length=260, line_width=3, outer_radius=8, font_size=16, text_template="{value:.0f}") self.slider_frame_thr.set_visibility(False) self.slider_frame_thr.on_change = self.change_frame self.slider_clipping_plane_label_x = build_label('X Clipping Plane') self.slider_clipping_plane_thrs_x = ui.LineDoubleSlider2D( line_width=3, outer_radius=8, length=260, initial_values=(self.low_ranges[0], self.high_ranges[0]), min_value=self.min_centers[0], max_value=self.max_centers[0], font_size=16, text_template="{value:.0f}") self.slider_clipping_plane_label_y = build_label('Y Clipping Plane') self.slider_clipping_plane_thrs_y = ui.LineDoubleSlider2D( line_width=3, outer_radius=8, length=260, initial_values=(self.low_ranges[1], self.high_ranges[1]), min_value=self.min_centers[1], max_value=self.max_centers[1], font_size=16, text_template="{value:.0f}") self.slider_clipping_plane_label_z = build_label('Z Clipping Plane') self.slider_clipping_plane_thrs_z = ui.LineDoubleSlider2D( line_width=3, outer_radius=8, length=260, initial_values=(self.low_ranges[2], self.high_ranges[2]), min_value=self.min_centers[2], max_value=self.max_centers[2], font_size=16, text_template="{value:.0f}") self.panel.add_element(self.slider_frame_label, (.04, .85)) self.panel.add_element(self.slider_frame_thr, (.38, .85)) self.panel.add_element(self.slider_clipping_plane_label_x, (.04, .55)) self.panel.add_element(self.slider_clipping_plane_thrs_x, (.38, .55)) self.panel.add_element(self.slider_clipping_plane_label_y, (.04, .35)) self.panel.add_element(self.slider_clipping_plane_thrs_y, (.38, .35)) self.panel.add_element(self.slider_clipping_plane_label_z, (.04, .15)) self.panel.add_element(self.slider_clipping_plane_thrs_z, (.38, .15)) scene.ResetCamera() scene.add(self.panel) self.size = scene.GetSize() # showm.add_window_callback(self.win_callback) showm.render() if self.load_default: print("load default") data = { "folder": os.path.abspath(os.path.dirname(__file__)), "filename": 'output00000246.xml' } self.add_frame(data)