From 395f878f7bf8168e7698647cbeb4ba1ce5872900 Mon Sep 17 00:00:00 2001 From: Praneeth Shetty Date: Fri, 15 Jul 2022 16:09:12 +0530 Subject: [PATCH 01/37] adding key release callback --- fury/ui/core.py | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/fury/ui/core.py b/fury/ui/core.py index 46f34b91b..125975175 100644 --- a/fury/ui/core.py +++ b/fury/ui/core.py @@ -108,6 +108,7 @@ def __init__(self, position=(0, 0)): self.on_middle_mouse_double_clicked = lambda i_ren, obj, element: None self.on_middle_mouse_button_dragged = lambda i_ren, obj, element: None self.on_key_press = lambda i_ren, obj, element: None + self.on_key_release = lambda i_ren, obj, element: None @abc.abstractmethod def _setup(self): @@ -261,7 +262,8 @@ def handle_events(self, actor): self.add_callback(actor, "MiddleButtonReleaseEvent", self.middle_button_release_callback) self.add_callback(actor, "MouseMoveEvent", self.mouse_move_callback) - self.add_callback(actor, "KeyPressEvent", self.key_press_callback) + self.add_callback(actor, "KeyPressEvent", self.on_key_press_callback) + self.add_callback(actor, "KeyReleaseEvent", self.on_key_release_callback) @staticmethod def left_button_click_callback(i_ren, obj, self): @@ -325,9 +327,13 @@ def mouse_move_callback(i_ren, obj, self): self.on_middle_mouse_button_dragged(i_ren, obj, self) @staticmethod - def key_press_callback(i_ren, obj, self): + def on_key_press_callback(i_ren, obj, self): self.on_key_press(i_ren, obj, self) + @staticmethod + def on_key_release_callback(i_ren, obj, self): + self.on_key_release(i_ren, obj, self) + class Rectangle2D(UI): """A 2D rectangle sub-classed from UI.""" From d527745fc3b91c30e615e13b9cd808a21b427f85 Mon Sep 17 00:00:00 2001 From: Praneeth Shetty Date: Fri, 15 Jul 2022 16:15:22 +0530 Subject: [PATCH 02/37] adding interface to identity key status --- fury/ui/elements.py | 29 ++++++++++++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) diff --git a/fury/ui/elements.py b/fury/ui/elements.py index 37a9b5ec5..dd289a95f 100644 --- a/fury/ui/elements.py +++ b/fury/ui/elements.py @@ -3147,7 +3147,7 @@ def rotate(self, angle): set_polydata_vertices(self.shape._polygonPolyData, new_points_arr) update_actor(self.shape.actor) - self.cal_bounding_box(self.position) + self.cal_bounding_box(self.position) def cal_bounding_box(self, position): """Calculates the min and max position of the bounding box. @@ -3219,6 +3219,8 @@ def resize(self, size): def left_button_pressed(self, i_ren, _obj, shape): mode = self.drawpanel.current_mode if mode == "selection": + if self.drawpanel.key_status["Control_L"]: + self.drawpanel.shape_group.add(self) click_pos = np.array(i_ren.event.position) self._drag_offset = click_pos - self.position i_ren.event.abort() @@ -3266,6 +3268,12 @@ def __init__(self, size=(400, 400), position=(0, 0), is_draggable=False): self.current_mode = "selection" self.shape_list = [] + self.shape_group = DrawShapeGroup() + self.key_status = { + "Control_L": False, + "Shift_L": False, + "Alt_L": False + } def _setup(self): """Setup this UI component. @@ -3277,6 +3285,10 @@ def _setup(self): self.left_button_pressed self.canvas.background.on_left_mouse_button_dragged = \ self.left_button_dragged + self.canvas.background.on_key_press = \ + self.key_press + self.canvas.background.on_key_release = \ + self.key_release # Todo # Convert mode_data into a private variable and make it read-only @@ -3331,6 +3343,8 @@ def _add_to_scene(self, scene): """ self.current_scene = scene + iren = scene.GetRenderWindow().GetInteractor().GetInteractorStyle() + iren.add_active_prop(self.canvas.actors[0]) self.canvas.add_to_scene(scene) def _get_size(self): @@ -3461,3 +3475,16 @@ def left_button_dragged(self, i_ren, _obj, element): mouse_position = self.clamp_mouse_position(i_ren.event.position) self.handle_mouse_drag(mouse_position) i_ren.force_render() + + def key_press(self, i_ren, _obj, _drawpanel): + self.key_status[i_ren.event.key] = True + + def key_release(self, i_ren, _obj, _drawpanel): + # key = i_ren.event.key + # if key == "Shift_L": + # self.key_status[key] = False + # elif key == "Control_L": + # self.key_status[key] = False + # elif key == "Alt_L": + # self.key_status[key] = False + self.key_status[i_ren.event.key] = False From c4fd598fe442c64244bb9555d41248a4ba00174d Mon Sep 17 00:00:00 2001 From: Praneeth Shetty Date: Fri, 15 Jul 2022 16:16:22 +0530 Subject: [PATCH 03/37] adding DrawShapeGroup --- fury/ui/elements.py | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/fury/ui/elements.py b/fury/ui/elements.py index dd289a95f..821490d6a 100644 --- a/fury/ui/elements.py +++ b/fury/ui/elements.py @@ -3060,6 +3060,43 @@ def directory_click_callback(self, i_ren, _obj, listboxitem): i_ren.event.abort() +class DrawShapeGroup: + def __init__(self): + self.grouped_shapes = [] + self._position = None + + def add(self, shape): + if shape in self.grouped_shapes: + self.remove(shape) + else: + self.grouped_shapes.append(shape) + print(self.grouped_shapes) + + def remove(self, shape): + self.grouped_shapes.remove(shape) + print(self.grouped_shapes) + + def clear(self, shape): + self.grouped_shapes = [] + print(self.grouped_shapes) + + def is_empty(self): + return bool(len(self.grouped_shapes)) + print(self.grouped_shapes) + + @property + def position(self): + return self._position + print(self.grouped_shapes) + + @property + def position(self, value): + offset = np.asarray(self._position) - value + for shape in self.grouped_shapes: + shape.position += offset + print(self.grouped_shapes) + + class DrawShape(UI): """Create and Manage 2D Shapes. """ From f054c142afd4824cd2089d0cd71dc56fc326eec2 Mon Sep 17 00:00:00 2001 From: Praneeth Shetty Date: Fri, 15 Jul 2022 16:47:18 +0530 Subject: [PATCH 04/37] adding bb border --- fury/ui/elements.py | 42 +++++++++++++++++++++++++++++++++++++----- 1 file changed, 37 insertions(+), 5 deletions(-) diff --git a/fury/ui/elements.py b/fury/ui/elements.py index 821490d6a..4886aadc1 100644 --- a/fury/ui/elements.py +++ b/fury/ui/elements.py @@ -3070,10 +3070,12 @@ def add(self, shape): self.remove(shape) else: self.grouped_shapes.append(shape) + shape.set_bb_border_visibility(True) print(self.grouped_shapes) def remove(self, shape): self.grouped_shapes.remove(shape) + shape.set_bb_border_visibility(False) print(self.grouped_shapes) def clear(self, shape): @@ -3134,8 +3136,14 @@ def _setup(self): else: raise IOError("Unknown shape type: {}.".format(self.shape_type)) + self.bb_border = Panel2D(size=(1, 1), has_border=True, border_width=3, opacity=0) + self.bb_border.background.on_left_mouse_button_dragged = lambda i_ren, _ob, _ele: self.left_button_dragged( + i_ren, _ob, self) + self.set_bb_border_visibility(False) + self.shape.on_left_mouse_button_pressed = self.left_button_pressed self.shape.on_left_mouse_button_dragged = self.left_button_dragged + # self.shape.on_left_mouse_button_released = self.left_button_released def _get_actors(self): """Get the actors composing this UI component.""" @@ -3151,6 +3159,7 @@ def _add_to_scene(self, scene): """ self._scene = scene self.shape.add_to_scene(scene) + self.bb_border.add_to_scene(scene) def _get_size(self): return self.shape.size @@ -3168,6 +3177,15 @@ def _set_position(self, coords): else: self.shape.position = coords + def update_bb_border(self): + self.cal_bounding_box(self.position) + self.bb_border.position = self._bounding_box_min + self.bb_border.resize(self._bounding_box_size) + + def set_bb_border_visibility(self, value): + self.update_bb_border() + self.bb_border.set_visibility(value) + def rotate(self, angle): """Rotate the vertices of the UI component using specific angle. @@ -3184,7 +3202,12 @@ def rotate(self, angle): set_polydata_vertices(self.shape._polygonPolyData, new_points_arr) update_actor(self.shape.actor) - self.cal_bounding_box(self.position) + self.update_bb_border() + + def remove(self): + self._scene.rm(self.shape.actor) + for actor in self.bb_border.actors: + self._scene.rm(actor) def cal_bounding_box(self, position): """Calculates the min and max position of the bounding box. @@ -3256,16 +3279,17 @@ def resize(self, size): def left_button_pressed(self, i_ren, _obj, shape): mode = self.drawpanel.current_mode if mode == "selection": + self.set_bb_border_visibility(True) if self.drawpanel.key_status["Control_L"]: self.drawpanel.shape_group.add(self) click_pos = np.array(i_ren.event.position) self._drag_offset = click_pos - self.position i_ren.event.abort() elif mode == "delete": - self._scene.rm(self.shape.actor) - i_ren.force_render() + self.remove() else: self.drawpanel.left_button_pressed(i_ren, _obj, self.drawpanel) + i_ren.force_render() def left_button_dragged(self, i_ren, _obj, shape): if self.drawpanel.current_mode == "selection": @@ -3275,10 +3299,15 @@ def left_button_dragged(self, i_ren, _obj, shape): self._drag_offset - self.drawpanel.position new_position = self.clamp_position(relative_canvas_position) self.drawpanel.canvas.update_element(self, new_position) + self.update_bb_border() i_ren.force_render() else: self.drawpanel.left_button_dragged(i_ren, _obj, self.drawpanel) + # def left_button_released(self, i_ren, _obj, shape): + # self.set_bb_border_visibility(False) + # i_ren.force_render() + class DrawPanel(UI): """The main Canvas(Panel2D) on which everything would be drawn. @@ -3491,8 +3520,11 @@ def clamp_mouse_position(self, mouse_position): self.canvas.position + self.canvas.size) def handle_mouse_click(self, position): - if self.is_draggable and self.current_mode == "selection": - self._drag_offset = position - self.position + if self.current_mode == "selection": + for shape in self.shape_list: + shape.set_bb_border_visibility(False) + if self.draggable: + self._drag_offset = position - self.position if self.current_mode in ["line", "quad", "circle"]: self.draw_shape(self.current_mode, position) From a02f5c54448bd6ba43f17549a2cc5eafe168d906 Mon Sep 17 00:00:00 2001 From: Praneeth Shetty Date: Tue, 19 Jul 2022 17:54:35 +0530 Subject: [PATCH 05/37] adding borders to the shape --- fury/ui/elements.py | 49 +++++++++++++++++++++++++++++++++++++++------ 1 file changed, 43 insertions(+), 6 deletions(-) diff --git a/fury/ui/elements.py b/fury/ui/elements.py index bb6f56511..ef370f270 100644 --- a/fury/ui/elements.py +++ b/fury/ui/elements.py @@ -3080,7 +3080,6 @@ def __init__(self, shape_type, drawpanel=None, position=(0, 0)): self.shape_type = shape_type.lower() self.drawpanel = drawpanel self.max_size = None - self.is_selected = True super(DrawShape, self).__init__(position) self.shape.color = np.random.random(3) @@ -3098,6 +3097,9 @@ def _setup(self): else: raise IOError("Unknown shape type: {}.".format(self.shape_type)) + self.bb_box = [Rectangle2D(size=(3, 3)) for i in range(4)] + self.set_bb_box_visibility(False) + self.shape.on_left_mouse_button_pressed = self.left_button_pressed self.shape.on_left_mouse_button_dragged = self.left_button_dragged self.shape.on_left_mouse_button_released = self.left_button_released @@ -3132,6 +3134,7 @@ def _add_to_scene(self, scene): """ self._scene = scene self.shape.add_to_scene(scene) + scene.add(*[border.actor for border in self.bb_box]) self.rotation_slider.add_to_scene(scene) def _get_size(self): @@ -3161,6 +3164,7 @@ def update_shape_position(self, center_position): new_center = self.clamp_position(center=center_position) self.drawpanel.canvas.update_element(self, new_center, "center") self.cal_bounding_box(update_value=True) + self.set_bb_box_visibility(True) @property def center(self): @@ -3193,8 +3197,30 @@ def is_selected(self, value): self.selection_change() def selection_change(self): - if not self.is_selected: + if self.is_selected: + self.show_rotation_slider() + self.set_bb_box_visibility(True) + else: self.rotation_slider.set_visibility(False) + self.set_bb_box_visibility(False) + + def set_bb_box_visibility(self, value): + if value: + border_width = 3 + points = [self._bounding_box_min-(0, border_width), + [self._bounding_box_max[0], self._bounding_box_min[1]], + self._bounding_box_min - border_width, + [self._bounding_box_min[0]-border_width, self._bounding_box_max[1]]] + size = [(self._bounding_box_size[0]+border_width, border_width), + (border_width, self._bounding_box_size[1]+border_width), + (border_width, self._bounding_box_size[1] + border_width), + (self._bounding_box_size[0]+border_width, border_width)] + for i in range(4): + self.bb_box[i].position = points[i] + self.bb_box[i].resize(size[i]) + + for border in self.bb_box: + border.set_visibility(value) def rotate(self, angle): """Rotate the vertices of the UI component using specific angle. @@ -3293,22 +3319,32 @@ def resize(self, size): self.cal_bounding_box(update_value=True) + def bring_to_top(self): + self.remove() + self._add_to_scene(self._scene) + self.drawpanel.shape_list.append(self) + def remove(self): """Removes the Shape and all related actors. """ + print(self.drawpanel.shape_list) + self.drawpanel.shape_list.remove(self) self._scene.rm(self.shape.actor) + self._scene.rm(*[border.actor for border in self.bb_box]) self._scene.rm(*self.rotation_slider.actors) def left_button_pressed(self, i_ren, _obj, shape): mode = self.drawpanel.current_mode if mode == "selection": + self.bring_to_top() + self.drawpanel.update_shape_selection(self) click_pos = np.array(i_ren.event.position) self._drag_offset = click_pos - self.center - self.show_rotation_slider() i_ren.event.abort() elif mode == "delete": + # print(self.drawpanel.shape_list) self.remove() else: self.drawpanel.left_button_pressed(i_ren, _obj, self.drawpanel) @@ -3329,7 +3365,7 @@ def left_button_dragged(self, i_ren, _obj, shape): def left_button_released(self, i_ren, _obj, shape): if self.drawpanel.current_mode == "selection": self.show_rotation_slider() - i_ren.force_render() + i_ren.force_render() class DrawPanel(UI): @@ -3493,7 +3529,7 @@ def draw_shape(self, shape_type, current_position, in_process=False): if shape_type == "circle": shape.max_size = self.cal_min_boundary_distance(current_position) self.shape_list.append(shape) - self.update_shape_selection(shape) + self.current_shape = shape self.current_scene.add(shape) self.canvas.add_element(shape, current_position - self.canvas.position) @@ -3540,10 +3576,11 @@ def clamp_mouse_position(self, mouse_position): self.canvas.position + self.canvas.size) def handle_mouse_click(self, position): + if self.current_shape: + self.current_shape.is_selected = False if self.current_mode == "selection": if self.is_draggable: self._drag_offset = position - self.position - self.current_shape.is_selected = False if self.current_mode in ["line", "quad", "circle"]: self.draw_shape(self.current_mode, position) From 53e9f1532165e3d104dd7836553b16e1276e2551 Mon Sep 17 00:00:00 2001 From: Praneeth Shetty Date: Tue, 19 Jul 2022 17:54:35 +0530 Subject: [PATCH 06/37] adding borders to the shape --- fury/ui/elements.py | 49 +++++++++++++++++++++++++++++++++++++++------ 1 file changed, 43 insertions(+), 6 deletions(-) diff --git a/fury/ui/elements.py b/fury/ui/elements.py index 5161186ce..5925d7b8f 100644 --- a/fury/ui/elements.py +++ b/fury/ui/elements.py @@ -3080,7 +3080,6 @@ def __init__(self, shape_type, drawpanel=None, position=(0, 0)): self.shape_type = shape_type.lower() self.drawpanel = drawpanel self.max_size = None - self.is_selected = True super(DrawShape, self).__init__(position) self.shape.color = np.random.random(3) @@ -3098,6 +3097,9 @@ def _setup(self): else: raise IOError("Unknown shape type: {}.".format(self.shape_type)) + self.bb_box = [Rectangle2D(size=(3, 3)) for i in range(4)] + self.set_bb_box_visibility(False) + self.shape.on_left_mouse_button_pressed = self.left_button_pressed self.shape.on_left_mouse_button_dragged = self.left_button_dragged self.shape.on_left_mouse_button_released = self.left_button_released @@ -3133,6 +3135,7 @@ def _add_to_scene(self, scene): """ self._scene = scene self.shape.add_to_scene(scene) + scene.add(*[border.actor for border in self.bb_box]) self.rotation_slider.add_to_scene(scene) def _get_size(self): @@ -3162,6 +3165,7 @@ def update_shape_position(self, center_position): new_center = self.clamp_position(center=center_position) self.drawpanel.canvas.update_element(self, new_center, "center") self.cal_bounding_box(update_value=True) + self.set_bb_box_visibility(True) @property def center(self): @@ -3194,8 +3198,30 @@ def is_selected(self, value): self.selection_change() def selection_change(self): - if not self.is_selected: + if self.is_selected: + self.show_rotation_slider() + self.set_bb_box_visibility(True) + else: self.rotation_slider.set_visibility(False) + self.set_bb_box_visibility(False) + + def set_bb_box_visibility(self, value): + if value: + border_width = 3 + points = [self._bounding_box_min-(0, border_width), + [self._bounding_box_max[0], self._bounding_box_min[1]], + self._bounding_box_min - border_width, + [self._bounding_box_min[0]-border_width, self._bounding_box_max[1]]] + size = [(self._bounding_box_size[0]+border_width, border_width), + (border_width, self._bounding_box_size[1]+border_width), + (border_width, self._bounding_box_size[1] + border_width), + (self._bounding_box_size[0]+border_width, border_width)] + for i in range(4): + self.bb_box[i].position = points[i] + self.bb_box[i].resize(size[i]) + + for border in self.bb_box: + border.set_visibility(value) def rotate(self, angle): """Rotate the vertices of the UI component using specific angle. @@ -3294,22 +3320,32 @@ def resize(self, size): self.cal_bounding_box(update_value=True) + def bring_to_top(self): + self.remove() + self._add_to_scene(self._scene) + self.drawpanel.shape_list.append(self) + def remove(self): """Removes the Shape and all related actors. """ + print(self.drawpanel.shape_list) + self.drawpanel.shape_list.remove(self) self._scene.rm(self.shape.actor) + self._scene.rm(*[border.actor for border in self.bb_box]) self._scene.rm(*self.rotation_slider.actors) def left_button_pressed(self, i_ren, _obj, shape): mode = self.drawpanel.current_mode if mode == "selection": + self.bring_to_top() + self.drawpanel.update_shape_selection(self) click_pos = np.array(i_ren.event.position) self._drag_offset = click_pos - self.center - self.show_rotation_slider() i_ren.event.abort() elif mode == "delete": + # print(self.drawpanel.shape_list) self.remove() else: self.drawpanel.left_button_pressed(i_ren, _obj, self.drawpanel) @@ -3330,7 +3366,7 @@ def left_button_dragged(self, i_ren, _obj, shape): def left_button_released(self, i_ren, _obj, shape): if self.drawpanel.current_mode == "selection": self.show_rotation_slider() - i_ren.force_render() + i_ren.force_render() class DrawPanel(UI): @@ -3494,7 +3530,7 @@ def draw_shape(self, shape_type, current_position, in_process=False): if shape_type == "circle": shape.max_size = self.cal_min_boundary_distance(current_position) self.shape_list.append(shape) - self.update_shape_selection(shape) + self.current_shape = shape self.current_scene.add(shape) self.canvas.add_element(shape, current_position - self.canvas.position) @@ -3541,10 +3577,11 @@ def clamp_mouse_position(self, mouse_position): self.canvas.position + self.canvas.size) def handle_mouse_click(self, position): + if self.current_shape: + self.current_shape.is_selected = False if self.current_mode == "selection": if self.is_draggable: self._drag_offset = position - self.position - self.current_shape.is_selected = False if self.current_mode in ["line", "quad", "circle"]: self.draw_shape(self.current_mode, position) From 23e07f28292d2ba2c7540696e533d3c25d2d1bd8 Mon Sep 17 00:00:00 2001 From: Praneeth Shetty Date: Wed, 27 Jul 2022 18:55:37 +0530 Subject: [PATCH 07/37] updating method name --- fury/ui/elements.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/fury/ui/elements.py b/fury/ui/elements.py index 77e9b9c18..10aead097 100644 --- a/fury/ui/elements.py +++ b/fury/ui/elements.py @@ -3070,12 +3070,12 @@ def add(self, shape): self.remove(shape) else: self.grouped_shapes.append(shape) - shape.set_bb_border_visibility(True) + shape.set_bb_box_visibility(True) print(self.grouped_shapes) def remove(self, shape): self.grouped_shapes.remove(shape) - shape.set_bb_border_visibility(False) + shape.set_bb_box_visibility(False) print(self.grouped_shapes) def clear(self, shape): @@ -3381,6 +3381,7 @@ def remove(self): def left_button_pressed(self, i_ren, _obj, shape): mode = self.drawpanel.current_mode if mode == "selection": + self.set_bb_box_visibility(True) if self.drawpanel.key_status["Control_L"]: self.drawpanel.shape_group.add(self) self.bring_to_top() From 222138893892b66c7d92aac18029a8353eb94f8c Mon Sep 17 00:00:00 2001 From: Praneeth Shetty Date: Mon, 1 Aug 2022 22:44:10 +0530 Subject: [PATCH 08/37] updating selection of shape --- fury/ui/elements.py | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/fury/ui/elements.py b/fury/ui/elements.py index 10aead097..28979bb9a 100644 --- a/fury/ui/elements.py +++ b/fury/ui/elements.py @@ -3070,12 +3070,12 @@ def add(self, shape): self.remove(shape) else: self.grouped_shapes.append(shape) - shape.set_bb_box_visibility(True) + shape.is_selected = True print(self.grouped_shapes) def remove(self, shape): self.grouped_shapes.remove(shape) - shape.set_bb_box_visibility(False) + shape.is_selected = False print(self.grouped_shapes) def clear(self, shape): @@ -3365,9 +3365,10 @@ def resize(self, size): self.cal_bounding_box(update_value=True) def bring_to_top(self): - self.remove() - self._add_to_scene(self._scene) - self.drawpanel.shape_list.append(self) + # self.remove() + # self._add_to_scene(self._scene) + # self.drawpanel.shape_list.append(self) + pass def remove(self): """Removes the Shape and all related actors. @@ -3384,9 +3385,10 @@ def left_button_pressed(self, i_ren, _obj, shape): self.set_bb_box_visibility(True) if self.drawpanel.key_status["Control_L"]: self.drawpanel.shape_group.add(self) - self.bring_to_top() + else: + self.bring_to_top() - self.drawpanel.update_shape_selection(self) + self.drawpanel.update_shape_selection(self) click_pos = np.array(i_ren.event.position) self._drag_offset = click_pos - self.center From 2e324cf537e959dccb61faa3c6e3b9577a8e6176 Mon Sep 17 00:00:00 2001 From: Praneeth Shetty Date: Mon, 1 Aug 2022 22:49:41 +0530 Subject: [PATCH 09/37] removing position property and bring_to_top --- fury/ui/elements.py | 20 -------------------- 1 file changed, 20 deletions(-) diff --git a/fury/ui/elements.py b/fury/ui/elements.py index 4e0c64a2f..f07adbd15 100644 --- a/fury/ui/elements.py +++ b/fury/ui/elements.py @@ -3086,18 +3086,6 @@ def is_empty(self): return bool(len(self.grouped_shapes)) print(self.grouped_shapes) - @property - def position(self): - return self._position - print(self.grouped_shapes) - - @property - def position(self, value): - offset = np.asarray(self._position) - value - for shape in self.grouped_shapes: - shape.position += offset - print(self.grouped_shapes) - class DrawShape(UI): """Create and Manage 2D Shapes. @@ -3365,12 +3353,6 @@ def resize(self, size): self.cal_bounding_box(update_value=True) - def bring_to_top(self): - # self.remove() - # self._add_to_scene(self._scene) - # self.drawpanel.shape_list.append(self) - pass - def remove(self): """Removes the Shape and all related actors. """ @@ -3387,8 +3369,6 @@ def left_button_pressed(self, i_ren, _obj, shape): if self.drawpanel.key_status["Control_L"]: self.drawpanel.shape_group.add(self) else: - self.bring_to_top() - self.drawpanel.update_shape_selection(self) click_pos = np.array(i_ren.event.position) From b7a4d7472742ca39543b6b6ccbfe8386db18432f Mon Sep 17 00:00:00 2001 From: Praneeth Shetty Date: Mon, 1 Aug 2022 23:17:44 +0530 Subject: [PATCH 10/37] updating position of all grouped shapes --- fury/ui/elements.py | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/fury/ui/elements.py b/fury/ui/elements.py index f07adbd15..ef3d8fc0c 100644 --- a/fury/ui/elements.py +++ b/fury/ui/elements.py @@ -3086,6 +3086,10 @@ def is_empty(self): return bool(len(self.grouped_shapes)) print(self.grouped_shapes) + def update_position(self, offset): + for shape in self.grouped_shapes: + shape.update_shape_position(shape.center + offset) + class DrawShape(UI): """Create and Manage 2D Shapes. @@ -3388,6 +3392,10 @@ def left_button_dragged(self, i_ren, _obj, shape): click_position = i_ren.event.position relative_center_position = click_position - \ self._drag_offset - self.drawpanel.position + + self.drawpanel.shape_group.update_position( + relative_center_position - self.center) + self.update_shape_position(relative_center_position) i_ren.force_render() else: From 41239856aa5f1e7421a5b0201c2a0adf6c8ebd2f Mon Sep 17 00:00:00 2001 From: Praneeth Shetty Date: Tue, 2 Aug 2022 06:40:44 +0530 Subject: [PATCH 11/37] adding group rotation --- fury/ui/elements.py | 42 +++++++++++++++++++++++++++++++++++------- 1 file changed, 35 insertions(+), 7 deletions(-) diff --git a/fury/ui/elements.py b/fury/ui/elements.py index ef3d8fc0c..b00c86ceb 100644 --- a/fury/ui/elements.py +++ b/fury/ui/elements.py @@ -3065,12 +3065,36 @@ def __init__(self): self.grouped_shapes = [] self._position = None + # Group rotation slider + self.group_rotation_slider = RingSlider2D(initial_value=0, + text_template="{angle:5.1f}°") + + self.group_rotation_slider.set_visibility(False) + + def update_rotation(slider): + print("update rotation") + angle = slider.value + previous_angle = slider.previous_value + rotation_angle = angle - previous_angle + + for shape in self.grouped_shapes: + current_center = shape.center + shape.rotate(np.deg2rad(rotation_angle)) + shape.update_shape_position(current_center - shape.drawpanel.position) + + self.group_rotation_slider.on_change = update_rotation + def add(self, shape): if shape in self.grouped_shapes: self.remove(shape) else: self.grouped_shapes.append(shape) shape.is_selected = True + shape.rotation_slider.set_visibility(False) + + self.group_rotation_slider.center = shape.rotation_slider.center + self.group_rotation_slider.set_visibility(True) + print(self.grouped_shapes) def remove(self, shape): @@ -3083,13 +3107,15 @@ def clear(self, shape): print(self.grouped_shapes) def is_empty(self): - return bool(len(self.grouped_shapes)) - print(self.grouped_shapes) + return not bool(len(self.grouped_shapes)) def update_position(self, offset): for shape in self.grouped_shapes: shape.update_shape_position(shape.center + offset) + def add_rotation_slider(self, scene): + scene.add(self.group_rotation_slider) + class DrawShape(UI): """Create and Manage 2D Shapes. @@ -3137,6 +3163,9 @@ def _setup(self): self.rotation_slider = RingSlider2D(initial_value=0, text_template="{angle:5.1f}°") + slider_position = self.drawpanel.position + \ + [self.drawpanel.size[0] - self.rotation_slider.size[0]/2, self.rotation_slider.size[1]/2] + self.rotation_slider.center = slider_position self.rotation_slider.set_visibility(False) def rotate_shape(slider): @@ -3282,9 +3311,6 @@ def show_rotation_slider(self): """ self._scene.rm(*self.rotation_slider.actors) self.rotation_slider.add_to_scene(self._scene) - slider_position = self.drawpanel.position + \ - [self.drawpanel.size[0] - self.rotation_slider.size[0]/2, self.rotation_slider.size[1]/2] - self.rotation_slider.center = slider_position self.rotation_slider.set_visibility(True) def cal_bounding_box(self, update_value=False, position=None): @@ -3393,7 +3419,8 @@ def left_button_dragged(self, i_ren, _obj, shape): relative_center_position = click_position - \ self._drag_offset - self.drawpanel.position - self.drawpanel.shape_group.update_position( + if not self.drawpanel.shape_group.is_empty(): + self.drawpanel.shape_group.update_position( relative_center_position - self.center) self.update_shape_position(relative_center_position) @@ -3402,7 +3429,7 @@ def left_button_dragged(self, i_ren, _obj, shape): self.drawpanel.left_button_dragged(i_ren, _obj, self.drawpanel) def left_button_released(self, i_ren, _obj, shape): - if self.drawpanel.current_mode == "selection": + if self.drawpanel.current_mode == "selection" and self.drawpanel.shape_group.is_empty(): self.show_rotation_slider() i_ren.force_render() @@ -3511,6 +3538,7 @@ def _add_to_scene(self, scene): iren = scene.GetRenderWindow().GetInteractor().GetInteractorStyle() iren.add_active_prop(self.canvas.actors[0]) self.canvas.add_to_scene(scene) + self.shape_group.add_rotation_slider(scene) def _get_size(self): return self.canvas.size From 6ba3587d9ae49432c2af0ce3ba42f3c1051ab9e6 Mon Sep 17 00:00:00 2001 From: Praneeth Shetty Date: Wed, 3 Aug 2022 18:57:33 +0530 Subject: [PATCH 12/37] remove print statement --- fury/ui/elements.py | 1 - 1 file changed, 1 deletion(-) diff --git a/fury/ui/elements.py b/fury/ui/elements.py index b00c86ceb..a1d874047 100644 --- a/fury/ui/elements.py +++ b/fury/ui/elements.py @@ -3072,7 +3072,6 @@ def __init__(self): self.group_rotation_slider.set_visibility(False) def update_rotation(slider): - print("update rotation") angle = slider.value previous_angle = slider.previous_value rotation_angle = angle - previous_angle From babb57cd3bcfd39672458457dc3e8fedc546fee8 Mon Sep 17 00:00:00 2001 From: Praneeth Shetty Date: Sat, 6 Aug 2022 17:59:38 +0530 Subject: [PATCH 13/37] adding support for shortcut keys --- fury/ui/elements.py | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/fury/ui/elements.py b/fury/ui/elements.py index a1d874047..0f15f456f 100644 --- a/fury/ui/elements.py +++ b/fury/ui/elements.py @@ -3679,8 +3679,21 @@ def left_button_dragged(self, i_ren, _obj, element): self.handle_mouse_drag(mouse_position) i_ren.force_render() + def handle_keys(self, key, key_char): + mode_from_key = { + "s": "selection", + "l": "line", + "q": "quad", + "c": "circle", + "d": "delete", + } + if key.lower() in mode_from_key.keys(): + self.current_mode = mode_from_key[key.lower()] + def key_press(self, i_ren, _obj, _drawpanel): + self.handle_keys(i_ren.event.key, i_ren.event.key_char) self.key_status[i_ren.event.key] = True + i_ren.force_render() def key_release(self, i_ren, _obj, _drawpanel): # key = i_ren.event.key From b41164be03d068a9abc644bbd47c8874db75e75e Mon Sep 17 00:00:00 2001 From: Praneeth Shetty Date: Sat, 6 Aug 2022 18:01:32 +0530 Subject: [PATCH 14/37] fixing pep --- fury/ui/elements.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/fury/ui/elements.py b/fury/ui/elements.py index e90f5d0c3..c6c27dd55 100644 --- a/fury/ui/elements.py +++ b/fury/ui/elements.py @@ -874,7 +874,6 @@ def _setup(self): self.handles[1].on_left_mouse_button_released = \ self.handle_release_callback - def _get_actors(self): """Get the actors composing this UI component.""" return (self.track.actors + self.handles[0].actors + @@ -2839,6 +2838,7 @@ def left_button_clicked(self, i_ren, _obj, _list_box_item): def resize(self, size): self.background.resize(size) + class FileMenu2D(UI): """A menu to select files in the current folder. @@ -3186,7 +3186,8 @@ def _setup(self): self.rotation_slider = RingSlider2D(initial_value=0, text_template="{angle:5.1f}°") slider_position = self.drawpanel.position + \ - [self.drawpanel.size[0] - self.rotation_slider.size[0]/2, self.rotation_slider.size[1]/2] + [self.drawpanel.size[0] - self.rotation_slider.size[0]/2, + self.rotation_slider.size[1]/2] self.rotation_slider.center = slider_position self.rotation_slider.set_visibility(False) From e14e573e19745edde9630398506056cbd76bb7c6 Mon Sep 17 00:00:00 2001 From: Praneeth Shetty Date: Sun, 7 Aug 2022 21:50:48 +0530 Subject: [PATCH 15/37] fixing selection issue --- fury/ui/elements.py | 24 +++++++++++++++++++----- 1 file changed, 19 insertions(+), 5 deletions(-) diff --git a/fury/ui/elements.py b/fury/ui/elements.py index c6c27dd55..587cd7631 100644 --- a/fury/ui/elements.py +++ b/fury/ui/elements.py @@ -3107,9 +3107,11 @@ def update_rotation(slider): self.group_rotation_slider.on_change = update_rotation def add(self, shape): - if shape in self.grouped_shapes: + if self.is_present(shape): self.remove(shape) else: + if self.is_empty(): + shape.drawpanel.update_shape_selection(shape) self.grouped_shapes.append(shape) shape.is_selected = True shape.rotation_slider.set_visibility(False) @@ -3124,10 +3126,18 @@ def remove(self, shape): shape.is_selected = False print(self.grouped_shapes) - def clear(self, shape): + def clear(self): + self.group_rotation_slider.set_visibility(False) + for shape in self.grouped_shapes: + shape.is_selected = False self.grouped_shapes = [] print(self.grouped_shapes) + def is_present(self, shape): + if shape in self.grouped_shapes: + return True + return False + def is_empty(self): return not bool(len(self.grouped_shapes)) @@ -3442,11 +3452,13 @@ def left_button_dragged(self, i_ren, _obj, shape): relative_center_position = click_position - \ self._drag_offset - self.drawpanel.position - if not self.drawpanel.shape_group.is_empty(): + if self.drawpanel.shape_group.is_present(self): self.drawpanel.shape_group.update_position( relative_center_position - self.center) - - self.update_shape_position(relative_center_position) + else: + if not self.drawpanel.shape_group.is_empty(): + self.drawpanel.shape_group.clear() + self.update_shape_position(relative_center_position) i_ren.force_render() else: self.drawpanel.left_button_dragged(i_ren, _obj, self.drawpanel) @@ -3680,6 +3692,8 @@ def clamp_mouse_position(self, mouse_position): def handle_mouse_click(self, position): if self.current_shape: self.current_shape.is_selected = False + if not self.shape_group.is_empty(): + self.shape_group.clear() if self.current_mode == "selection": if self.is_draggable: self._drag_offset = position - self.position From b3266e614e72b14f82dc77c951c12ea4be033b48 Mon Sep 17 00:00:00 2001 From: Praneeth Shetty Date: Sun, 7 Aug 2022 21:54:22 +0530 Subject: [PATCH 16/37] updating clear method --- fury/ui/elements.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/fury/ui/elements.py b/fury/ui/elements.py index 587cd7631..c85f26975 100644 --- a/fury/ui/elements.py +++ b/fury/ui/elements.py @@ -3127,6 +3127,8 @@ def remove(self, shape): print(self.grouped_shapes) def clear(self): + if self.is_empty(): + return self.group_rotation_slider.set_visibility(False) for shape in self.grouped_shapes: shape.is_selected = False @@ -3432,6 +3434,7 @@ def left_button_pressed(self, i_ren, _obj, shape): if self.drawpanel.key_status["Control_L"]: self.drawpanel.shape_group.add(self) else: + self.drawpanel.shape_group.clear() self.drawpanel.update_shape_selection(self) click_pos = np.array(i_ren.event.position) @@ -3456,8 +3459,7 @@ def left_button_dragged(self, i_ren, _obj, shape): self.drawpanel.shape_group.update_position( relative_center_position - self.center) else: - if not self.drawpanel.shape_group.is_empty(): - self.drawpanel.shape_group.clear() + self.drawpanel.shape_group.clear() self.update_shape_position(relative_center_position) i_ren.force_render() else: From b11045df64b70d9d3db9274d6246ca4c9b583d3e Mon Sep 17 00:00:00 2001 From: Praneeth Shetty Date: Sun, 7 Aug 2022 22:00:54 +0530 Subject: [PATCH 17/37] updating individual selection --- fury/ui/elements.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/fury/ui/elements.py b/fury/ui/elements.py index c85f26975..84943bde6 100644 --- a/fury/ui/elements.py +++ b/fury/ui/elements.py @@ -3433,8 +3433,7 @@ def left_button_pressed(self, i_ren, _obj, shape): self.set_bb_box_visibility(True) if self.drawpanel.key_status["Control_L"]: self.drawpanel.shape_group.add(self) - else: - self.drawpanel.shape_group.clear() + elif not self.drawpanel.shape_group.is_present(self): self.drawpanel.update_shape_selection(self) click_pos = np.array(i_ren.event.position) From 1abada77ff24ffdba9da1a43df7b69a78adad4f4 Mon Sep 17 00:00:00 2001 From: Praneeth Shetty Date: Sun, 7 Aug 2022 22:07:30 +0530 Subject: [PATCH 18/37] deleting extra remove function --- fury/ui/elements.py | 5 ----- 1 file changed, 5 deletions(-) diff --git a/fury/ui/elements.py b/fury/ui/elements.py index 84943bde6..a9db61445 100644 --- a/fury/ui/elements.py +++ b/fury/ui/elements.py @@ -3336,11 +3336,6 @@ def rotate(self, angle): self.cal_bounding_box(update_value=True) - def remove(self): - self._scene.rm(self.shape.actor) - for actor in self.bb_border.actors: - self._scene.rm(actor) - def show_rotation_slider(self): """Display the RingSlider2D to allow rotation of shape from the center. """ From 4b43a9710af66283ca5a2a2c76f43843b0f6d167 Mon Sep 17 00:00:00 2001 From: Praneeth Shetty Date: Sun, 7 Aug 2022 22:18:02 +0530 Subject: [PATCH 19/37] keeping rotation slider on the top --- fury/ui/elements.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/fury/ui/elements.py b/fury/ui/elements.py index a9db61445..c932d1c91 100644 --- a/fury/ui/elements.py +++ b/fury/ui/elements.py @@ -3112,12 +3112,13 @@ def add(self, shape): else: if self.is_empty(): shape.drawpanel.update_shape_selection(shape) + self.add_rotation_slider(self._scene) + self.group_rotation_slider.set_visibility(True) self.grouped_shapes.append(shape) shape.is_selected = True shape.rotation_slider.set_visibility(False) self.group_rotation_slider.center = shape.rotation_slider.center - self.group_rotation_slider.set_visibility(True) print(self.grouped_shapes) @@ -3129,7 +3130,7 @@ def remove(self, shape): def clear(self): if self.is_empty(): return - self.group_rotation_slider.set_visibility(False) + self._scene.rm(*self.group_rotation_slider.actors) for shape in self.grouped_shapes: shape.is_selected = False self.grouped_shapes = [] @@ -3148,6 +3149,7 @@ def update_position(self, offset): shape.update_shape_position(shape.center + offset) def add_rotation_slider(self, scene): + self._scene = scene scene.add(self.group_rotation_slider) From d0ac73cf94bdc20aee7adbdb199c0e3e9ba839b9 Mon Sep 17 00:00:00 2001 From: Praneeth Shetty Date: Wed, 10 Aug 2022 21:31:42 +0530 Subject: [PATCH 20/37] adding docs --- fury/ui/elements.py | 43 ++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 42 insertions(+), 1 deletion(-) diff --git a/fury/ui/elements.py b/fury/ui/elements.py index c932d1c91..6f8cdaf87 100644 --- a/fury/ui/elements.py +++ b/fury/ui/elements.py @@ -3086,7 +3086,6 @@ def directory_click_callback(self, i_ren, _obj, listboxitem): class DrawShapeGroup: def __init__(self): self.grouped_shapes = [] - self._position = None # Group rotation slider self.group_rotation_slider = RingSlider2D(initial_value=0, @@ -3107,6 +3106,13 @@ def update_rotation(slider): self.group_rotation_slider.on_change = update_rotation def add(self, shape): + """Add shape to the group. + + Parameters + ---------- + shape : DrawShape + + """ if self.is_present(shape): self.remove(shape) else: @@ -3123,11 +3129,21 @@ def add(self, shape): print(self.grouped_shapes) def remove(self, shape): + """Remove shape from the group. + + Parameters + ---------- + shape : DrawShape + + """ self.grouped_shapes.remove(shape) shape.is_selected = False print(self.grouped_shapes) def clear(self): + """Remove all the shapes from the group. + + """ if self.is_empty(): return self._scene.rm(*self.group_rotation_slider.actors) @@ -3137,18 +3153,43 @@ def clear(self): print(self.grouped_shapes) def is_present(self, shape): + """Check whether the shape is present in the group. + + Parameters + ---------- + shape : DrawShape + + """ if shape in self.grouped_shapes: return True return False def is_empty(self): + """Return whether the group is empty or not. + + """ return not bool(len(self.grouped_shapes)) def update_position(self, offset): + """Update the position of all the shapes in the group. + + Parameters + ---------- + offset : (float, float) + Distance by which each shape is to be translated. + + """ for shape in self.grouped_shapes: shape.update_shape_position(shape.center + offset) def add_rotation_slider(self, scene): + """Add rotation slider to the scene. + + Parameters + ---------- + scene : scene + + """ self._scene = scene scene.add(self.group_rotation_slider) From 8771333eb298c87b9a778fe8525580c8cf7f95ba Mon Sep 17 00:00:00 2001 From: Praneeth Shetty Date: Wed, 10 Aug 2022 21:32:33 +0530 Subject: [PATCH 21/37] removing print stmts --- fury/ui/elements.py | 4 ---- 1 file changed, 4 deletions(-) diff --git a/fury/ui/elements.py b/fury/ui/elements.py index 6f8cdaf87..7e21a0612 100644 --- a/fury/ui/elements.py +++ b/fury/ui/elements.py @@ -3126,8 +3126,6 @@ def add(self, shape): self.group_rotation_slider.center = shape.rotation_slider.center - print(self.grouped_shapes) - def remove(self, shape): """Remove shape from the group. @@ -3138,7 +3136,6 @@ def remove(self, shape): """ self.grouped_shapes.remove(shape) shape.is_selected = False - print(self.grouped_shapes) def clear(self): """Remove all the shapes from the group. @@ -3150,7 +3147,6 @@ def clear(self): for shape in self.grouped_shapes: shape.is_selected = False self.grouped_shapes = [] - print(self.grouped_shapes) def is_present(self, shape): """Check whether the shape is present in the group. From e4c6a6be66403bd6645a12ed8e55fa5d46e85b31 Mon Sep 17 00:00:00 2001 From: Praneeth Shetty Date: Sat, 13 Aug 2022 11:23:38 +0530 Subject: [PATCH 22/37] removing grouped shapes on mode change --- fury/ui/elements.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/fury/ui/elements.py b/fury/ui/elements.py index 7e21a0612..1926c1adb 100644 --- a/fury/ui/elements.py +++ b/fury/ui/elements.py @@ -3522,6 +3522,7 @@ def __init__(self, size=(400, 400), position=(0, 0), is_draggable=False): """ self.panel_size = size super(DrawPanel, self).__init__(position) + self.shape_group = DrawShapeGroup() self.is_draggable = is_draggable self.current_mode = None @@ -3529,7 +3530,6 @@ def __init__(self, size=(400, 400), position=(0, 0), is_draggable=False): self.current_mode = "selection" self.shape_list = [] - self.shape_group = DrawShapeGroup() self.key_status = { "Control_L": False, "Shift_L": False, @@ -3638,6 +3638,7 @@ def current_mode(self, mode): self._current_mode = mode if mode is not None: self.mode_text.message = f"Mode: {mode}" + self.shape_group.clear() def cal_min_boundary_distance(self, position): """Calculate the minimum distance between the current position and canvas boundary. From b0f06688bd2343fda3ef991374c131832835abaf Mon Sep 17 00:00:00 2001 From: Praneeth Shetty Date: Fri, 19 Aug 2022 20:59:49 +0530 Subject: [PATCH 23/37] removing extra comments --- fury/ui/elements.py | 7 ------- 1 file changed, 7 deletions(-) diff --git a/fury/ui/elements.py b/fury/ui/elements.py index 9b840aec5..c65d32267 100644 --- a/fury/ui/elements.py +++ b/fury/ui/elements.py @@ -3771,13 +3771,6 @@ def key_press(self, i_ren, _obj, _drawpanel): i_ren.force_render() def key_release(self, i_ren, _obj, _drawpanel): - # key = i_ren.event.key - # if key == "Shift_L": - # self.key_status[key] = False - # elif key == "Control_L": - # self.key_status[key] = False - # elif key == "Alt_L": - # self.key_status[key] = False self.key_status[i_ren.event.key] = False From c5960ba94faeac18e10f58b32a86855395b1f089 Mon Sep 17 00:00:00 2001 From: Praneeth Shetty Date: Fri, 19 Aug 2022 21:15:02 +0530 Subject: [PATCH 24/37] maintaining consistency in callback names --- fury/ui/containers.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/fury/ui/containers.py b/fury/ui/containers.py index aa285606a..bce56be4e 100644 --- a/fury/ui/containers.py +++ b/fury/ui/containers.py @@ -963,7 +963,7 @@ def mouse_move_callback2(istyle, obj, self): ANTICLOCKWISE_ROTATION_X = np.array([-10, 1, 0, 0]) CLOCKWISE_ROTATION_X = np.array([10, 1, 0, 0]) - def key_press_callback(self, istyle, obj, _what): + def on_key_press_callback(self, istyle, obj, _what): has_changed = False if istyle.event.key == "Left": has_changed = True @@ -1009,8 +1009,8 @@ def _setup(self): # TODO: this is currently not running self.add_callback(actor, "KeyPressEvent", - self.key_press_callback) - # self.on_key_press = self.key_press_callback2 + self.on_key_press_callback) + # self.on_key_press = self.on_key_press_callback2 def _get_actors(self): """Get the actors composing this UI component.""" From 66cf81028106446e05457dd139e9709aa72618b8 Mon Sep 17 00:00:00 2001 From: Praneeth Shetty Date: Sat, 20 Aug 2022 20:27:30 +0530 Subject: [PATCH 25/37] removing prints --- fury/ui/elements.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/fury/ui/elements.py b/fury/ui/elements.py index eed76c277..2022a7104 100644 --- a/fury/ui/elements.py +++ b/fury/ui/elements.py @@ -3453,7 +3453,6 @@ def resize(self, size): def remove(self): """Remove the Shape and all related actors. """ - print(self.drawpanel.shape_list) self.drawpanel.shape_list.remove(self) self._scene.rm(self.shape.actor) self._scene.rm(*[border.actor for border in self.bb_box]) @@ -3472,7 +3471,6 @@ def left_button_pressed(self, i_ren, _obj, shape): self._drag_offset = click_pos - self.center i_ren.event.abort() elif mode == "delete": - # print(self.drawpanel.shape_list) self.remove() else: self.drawpanel.left_button_pressed(i_ren, _obj, self.drawpanel) From 1ae116c8e97a05519d94ff8257c831579e1c9672 Mon Sep 17 00:00:00 2001 From: Praneeth Shetty Date: Sat, 20 Aug 2022 20:34:04 +0530 Subject: [PATCH 26/37] initializing `DrawShapeGroup`'s scene --- fury/ui/elements.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/fury/ui/elements.py b/fury/ui/elements.py index 2022a7104..0d599b7b8 100644 --- a/fury/ui/elements.py +++ b/fury/ui/elements.py @@ -3087,6 +3087,7 @@ def directory_click_callback(self, i_ren, _obj, listboxitem): class DrawShapeGroup: def __init__(self): self.grouped_shapes = [] + self._scene = None # Group rotation slider self.group_rotation_slider = RingSlider2D(initial_value=0, @@ -3187,7 +3188,6 @@ def add_rotation_slider(self, scene): scene : scene """ - self._scene = scene scene.add(self.group_rotation_slider) @@ -3604,7 +3604,7 @@ def _add_to_scene(self, scene): iren = scene.GetRenderWindow().GetInteractor().GetInteractorStyle() iren.add_active_prop(self.canvas.actors[0]) self.canvas.add_to_scene(scene) - self.shape_group.add_rotation_slider(scene) + self.shape_group._scene = scene def _get_size(self): return self.canvas.size From e57ac1ca8a2085977f64cda31baf2b2010b20db7 Mon Sep 17 00:00:00 2001 From: Praneeth Shetty Date: Tue, 23 Aug 2022 21:54:24 +0530 Subject: [PATCH 27/37] removing redundant position param --- fury/ui/elements.py | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/fury/ui/elements.py b/fury/ui/elements.py index 0d599b7b8..b114f3ca3 100644 --- a/fury/ui/elements.py +++ b/fury/ui/elements.py @@ -3383,7 +3383,7 @@ def show_rotation_slider(self): self.rotation_slider.add_to_scene(self._scene) self.rotation_slider.set_visibility(True) - def cal_bounding_box(self, position=None): + def cal_bounding_box(self): """Calculate the min, max position and the size of the bounding box. Parameters @@ -3391,8 +3391,7 @@ def cal_bounding_box(self, position=None): position : (float, float) (x, y) in pixels. """ - position = self.position if position is None else position - vertices = position + vertices_from_actor(self.shape.actor)[:, :-1] + vertices = self.position + vertices_from_actor(self.shape.actor)[:, :-1] min_x, min_y = vertices[0] max_x, max_y = vertices[0] @@ -3411,7 +3410,7 @@ def cal_bounding_box(self, position=None): self._bounding_box_max = np.asarray([max_x, max_y], dtype="int") self._bounding_box_size = np.asarray([max_x-min_x, max_y-min_y], dtype="int") - self._bounding_box_offset = position - self._bounding_box_min + self._bounding_box_offset = self.position - self._bounding_box_min def clamp_position(self, center=None): """Clamp the given center according to the DrawPanel canvas. From 36adf8201ec0c106b58cc66bcdbe6fa999cbaa89 Mon Sep 17 00:00:00 2001 From: Praneeth Shetty Date: Sun, 28 Aug 2022 10:23:28 +0530 Subject: [PATCH 28/37] fix overlapping of the shapes when translated near the borders --- fury/ui/elements.py | 37 ++++++++++++++++++++++++++++++++++--- 1 file changed, 34 insertions(+), 3 deletions(-) diff --git a/fury/ui/elements.py b/fury/ui/elements.py index b114f3ca3..e4e0acd7c 100644 --- a/fury/ui/elements.py +++ b/fury/ui/elements.py @@ -3085,9 +3085,10 @@ def directory_click_callback(self, i_ren, _obj, listboxitem): class DrawShapeGroup: - def __init__(self): + def __init__(self, drawpanel): self.grouped_shapes = [] self._scene = None + self.drawpanel = drawpanel # Group rotation slider self.group_rotation_slider = RingSlider2D(initial_value=0, @@ -3177,8 +3178,38 @@ def update_position(self, offset): Distance by which each shape is to be translated. """ + vertices = [] + for shape in self.grouped_shapes: + vertices.extend(shape.position + vertices_from_actor(shape.shape.actor)[:, :-1]) + + min_x, min_y = vertices[0] + max_x, max_y = vertices[0] + + for x, y in vertices: + if x < min_x: + min_x = x + if y < min_y: + min_y = y + if x > max_x: + max_x = x + if y > max_y: + max_y = y + + _bounding_box_min = np.asarray([min_x, min_y], dtype="int") + _bounding_box_max = np.asarray([max_x, max_y], dtype="int") + _bounding_box_size = np.asarray([max_x-min_x, max_y-min_y], dtype="int") + + group_center = _bounding_box_min + _bounding_box_size//2 + + shape_offset = [] for shape in self.grouped_shapes: - shape.update_shape_position(shape.center + offset) + shape_offset.append(shape.center - group_center) + + new_center = np.clip(group_center + offset, self.drawpanel.position + _bounding_box_size//2, + self.drawpanel.position + self.drawpanel.size - _bounding_box_size//2) + + for shape, soffset in zip(self.grouped_shapes, shape_offset): + shape.update_shape_position(new_center + soffset - self.drawpanel.position) def add_rotation_slider(self, scene): """Add rotation slider to the scene. @@ -3517,7 +3548,7 @@ def __init__(self, size=(400, 400), position=(0, 0), is_draggable=False): """ self.panel_size = size super(DrawPanel, self).__init__(position) - self.shape_group = DrawShapeGroup() + self.shape_group = DrawShapeGroup(self) self.is_draggable = is_draggable self.current_mode = None From 4fe5d3bc9860e5ef8db9a00edf853a9546502051 Mon Sep 17 00:00:00 2001 From: Praneeth Shetty Date: Fri, 9 Sep 2022 21:00:45 +0530 Subject: [PATCH 29/37] using cal_bounding_box from helper --- fury/ui/elements.py | 34 +++++++++------------------------- 1 file changed, 9 insertions(+), 25 deletions(-) diff --git a/fury/ui/elements.py b/fury/ui/elements.py index 3a079b3dc..6f520fb63 100644 --- a/fury/ui/elements.py +++ b/fury/ui/elements.py @@ -3183,31 +3183,17 @@ def update_position(self, offset): for shape in self.grouped_shapes: vertices.extend(shape.position + vertices_from_actor(shape.shape.actor)[:, :-1]) - min_x, min_y = vertices[0] - max_x, max_y = vertices[0] + bounding_box_min, bounding_box_max, \ + bounding_box_size = cal_bounding_box_2d(vertices) - for x, y in vertices: - if x < min_x: - min_x = x - if y < min_y: - min_y = y - if x > max_x: - max_x = x - if y > max_y: - max_y = y - - _bounding_box_min = np.asarray([min_x, min_y], dtype="int") - _bounding_box_max = np.asarray([max_x, max_y], dtype="int") - _bounding_box_size = np.asarray([max_x-min_x, max_y-min_y], dtype="int") - - group_center = _bounding_box_min + _bounding_box_size//2 + group_center = bounding_box_min + bounding_box_size//2 shape_offset = [] for shape in self.grouped_shapes: shape_offset.append(shape.center - group_center) - new_center = np.clip(group_center + offset, self.drawpanel.position + _bounding_box_size//2, - self.drawpanel.position + self.drawpanel.size - _bounding_box_size//2) + new_center = np.clip(group_center + offset, self.drawpanel.position + bounding_box_size//2, + self.drawpanel.position + self.drawpanel.size - bounding_box_size//2) for shape, soffset in zip(self.grouped_shapes, shape_offset): shape.update_shape_position(new_center + soffset - self.drawpanel.position) @@ -3260,6 +3246,8 @@ def _setup(self): else: raise IOError("Unknown shape type: {}.".format(self.shape_type)) + self.cal_bounding_box() + self.bb_box = [Rectangle2D(size=(3, 3)) for i in range(4)] self.set_bb_box_visibility(False) @@ -3410,10 +3398,6 @@ def show_rotation_slider(self): """ self._scene.rm(*self.rotation_slider.actors) self.rotation_slider.add_to_scene(self._scene) - slider_position = self.drawpanel.position + \ - [self.drawpanel.size[0] - self.rotation_slider.size[0]/2, - self.rotation_slider.size[1]/2] - self.rotation_slider.center = slider_position self.rotation_slider.set_visibility(True) def cal_bounding_box(self): @@ -3684,10 +3668,10 @@ def draw_shape(self, shape_type, current_position): position=current_position) if shape_type == "circle": shape.max_size = self.cal_min_boundary_distance(current_position) - self.shape_list.append(shape) - self.update_shape_selection(shape) self.current_scene.add(shape) self.canvas.add_element(shape, current_position - self.canvas.position) + self.shape_list.append(shape) + self.update_shape_selection(shape) def resize_shape(self, current_position): """Resize the shape. From bace0bb5c18c4dc2e60f544ac68d14f7a1a323db Mon Sep 17 00:00:00 2001 From: Praneeth Shetty Date: Mon, 12 Sep 2022 19:26:58 +0530 Subject: [PATCH 30/37] fixing integrating issues --- fury/ui/elements.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/fury/ui/elements.py b/fury/ui/elements.py index 9223c479f..3a0659284 100644 --- a/fury/ui/elements.py +++ b/fury/ui/elements.py @@ -3105,7 +3105,7 @@ def update_rotation(slider): for shape in self.grouped_shapes: current_center = shape.center shape.rotate(np.deg2rad(rotation_angle)) - shape.update_shape_position(current_center - shape.drawpanel.position) + shape.update_shape_position(current_center - shape.drawpanel.canvas.position) self.group_rotation_slider.on_change = update_rotation @@ -3184,7 +3184,7 @@ def update_position(self, offset): vertices.extend(shape.position + vertices_from_actor(shape.shape.actor)[:, :-1]) bounding_box_min, bounding_box_max, \ - bounding_box_size = cal_bounding_box_2d(vertices) + bounding_box_size = cal_bounding_box_2d(np.asarray(vertices)) group_center = bounding_box_min + bounding_box_size//2 From 674c5290d35d57827235400f17cd05ea3ded0465 Mon Sep 17 00:00:00 2001 From: Praneeth Shetty Date: Mon, 12 Sep 2022 20:39:15 +0530 Subject: [PATCH 31/37] adding debug param --- fury/ui/elements.py | 57 ++++++++++++++++++++++++--------------------- 1 file changed, 31 insertions(+), 26 deletions(-) diff --git a/fury/ui/elements.py b/fury/ui/elements.py index 3a0659284..b2eca88b8 100644 --- a/fury/ui/elements.py +++ b/fury/ui/elements.py @@ -3213,7 +3213,7 @@ class DrawShape(UI): """Create and Manage 2D Shapes. """ - def __init__(self, shape_type, drawpanel=None, position=(0, 0)): + def __init__(self, shape_type, drawpanel=None, position=(0, 0), debug=False): """Init this UI element. Parameters @@ -3224,11 +3224,14 @@ def __init__(self, shape_type, drawpanel=None, position=(0, 0)): Reference to the main canvas on which it is drawn. position : (float, float), optional (x, y) in pixels. + debug : bool, optional + Set visibility of the bounding box around the shapes. """ self.shape = None self.shape_type = shape_type.lower() self.drawpanel = drawpanel self.max_size = None + self.debug = debug super(DrawShape, self).__init__(position) self.shape.color = np.random.random(3) @@ -3248,8 +3251,8 @@ def _setup(self): self.cal_bounding_box() - self.bb_box = [Rectangle2D(size=(3, 3)) for i in range(4)] - self.set_bb_box_visibility(False) + if self.debug: + self.bb_box = [Rectangle2D(size=(3, 3)) for i in range(4)] self.shape.on_left_mouse_button_pressed = self.left_button_pressed self.shape.on_left_mouse_button_dragged = self.left_button_dragged @@ -3257,10 +3260,6 @@ def _setup(self): self.rotation_slider = RingSlider2D(initial_value=0, text_template="{angle:5.1f}°") - slider_position = self.drawpanel.position + \ - [self.drawpanel.size[0] - self.rotation_slider.size[0]/2, - self.rotation_slider.size[1]/2] - self.rotation_slider.center = slider_position self.rotation_slider.set_visibility(False) if self.drawpanel: @@ -3294,8 +3293,9 @@ def _add_to_scene(self, scene): """ self._scene = scene self.shape.add_to_scene(scene) - scene.add(*[border.actor for border in self.bb_box]) self.rotation_slider.add_to_scene(scene) + if self.debug: + scene.add(*[border.actor for border in self.bb_box]) def _get_size(self): return self.shape.size @@ -3365,22 +3365,23 @@ def selection_change(self): self.set_bb_box_visibility(False) def set_bb_box_visibility(self, value): - if value: - border_width = 3 - points = [self._bounding_box_min-(0, border_width), - [self._bounding_box_max[0], self._bounding_box_min[1]], - self._bounding_box_min - border_width, - [self._bounding_box_min[0]-border_width, self._bounding_box_max[1]]] - size = [(self._bounding_box_size[0]+border_width, border_width), - (border_width, self._bounding_box_size[1]+border_width), - (border_width, self._bounding_box_size[1] + border_width), - (self._bounding_box_size[0]+border_width, border_width)] - for i in range(4): - self.bb_box[i].position = points[i] - self.bb_box[i].resize(size[i]) - - for border in self.bb_box: - border.set_visibility(value) + if self.debug: + if value: + border_width = 3 + points = [self._bounding_box_min-(0, border_width), + [self._bounding_box_max[0], self._bounding_box_min[1]], + self._bounding_box_min - border_width, + [self._bounding_box_min[0]-border_width, self._bounding_box_max[1]]] + size = [(self._bounding_box_size[0]+border_width, border_width), + (border_width, self._bounding_box_size[1]+border_width), + (border_width, self._bounding_box_size[1] + border_width), + (self._bounding_box_size[0]+border_width, border_width)] + for i in range(4): + self.bb_box[i].position = points[i] + self.bb_box[i].resize(size[i]) + + for border in self.bb_box: + border.set_visibility(value) def rotate(self, angle): """Rotate the vertices of the UI component using specific angle. @@ -3452,6 +3453,7 @@ def resize(self, size): self.shape.outer_radius = hyp self.cal_bounding_box() + self.set_bb_box_visibility(True) def remove(self): """Remove the Shape and all related actors. @@ -3507,7 +3509,7 @@ class DrawPanel(UI): """The main Canvas(Panel2D) on which everything would be drawn. """ - def __init__(self, size=(400, 400), position=(0, 0), is_draggable=False): + def __init__(self, size=(400, 400), position=(0, 0), is_draggable=False, debug=False): """Init this UI element. Parameters @@ -3518,12 +3520,15 @@ def __init__(self, size=(400, 400), position=(0, 0), is_draggable=False): (x, y) in pixels. is_draggable : bool, optional Whether the background canvas will be draggble or not. + debug : bool, optional + Set visibility of the bounding box around the shapes. """ self.panel_size = size super(DrawPanel, self).__init__(position) self.shape_group = DrawShapeGroup(self) self.is_draggable = is_draggable self.current_mode = None + self.debug = debug if is_draggable: self.current_mode = "selection" @@ -3671,7 +3676,7 @@ def draw_shape(self, shape_type, current_position): Lower left corner position for the shape. """ shape = DrawShape(shape_type=shape_type, drawpanel=self, - position=current_position) + position=current_position, debug=self.debug) if shape_type == "circle": shape.max_size = self.cal_min_boundary_distance(current_position) self.current_scene.add(shape) From 924c730727c367ed247c5c5c0f3f6a2acd50dd6b Mon Sep 17 00:00:00 2001 From: Praneeth Shetty Date: Wed, 14 Sep 2022 22:01:39 +0530 Subject: [PATCH 32/37] updating tests --- fury/data/files/test_ui_draw_panel_basic.json | 2 +- .../files/test_ui_draw_panel_basic.log.gz | Bin 12221 -> 11303 bytes .../files/test_ui_draw_panel_rotation.json | 2 +- .../files/test_ui_draw_panel_rotation.log.gz | Bin 12733 -> 11845 bytes 4 files changed, 2 insertions(+), 2 deletions(-) diff --git a/fury/data/files/test_ui_draw_panel_basic.json b/fury/data/files/test_ui_draw_panel_basic.json index 4e1cd457a..c806a95b5 100644 --- a/fury/data/files/test_ui_draw_panel_basic.json +++ b/fury/data/files/test_ui_draw_panel_basic.json @@ -1 +1 @@ -{"CharEvent": 0, "MouseMoveEvent": 993, "KeyPressEvent": 0, "KeyReleaseEvent": 0, "LeftButtonPressEvent": 17, "LeftButtonReleaseEvent": 17, "RightButtonPressEvent": 0, "RightButtonReleaseEvent": 0, "MiddleButtonPressEvent": 0, "MiddleButtonReleaseEvent": 0} \ No newline at end of file +{"CharEvent": 0, "MouseMoveEvent": 2917, "KeyPressEvent": 0, "KeyReleaseEvent": 0, "LeftButtonPressEvent": 17, "LeftButtonReleaseEvent": 17, "RightButtonPressEvent": 0, "RightButtonReleaseEvent": 0, "MiddleButtonPressEvent": 0, "MiddleButtonReleaseEvent": 0} \ No newline at end of file diff --git a/fury/data/files/test_ui_draw_panel_basic.log.gz b/fury/data/files/test_ui_draw_panel_basic.log.gz index bcb63eef94d264c1679938d9de46d9ac0322494e..e5302cb4df071c1ac79121ae2ef772411203c386 100644 GIT binary patch literal 11303 zcmV+?EZEZ@iwFoP0U~1p|8!+@bYFF8Uu1G&cVBQ}Ze?s=VqtS>V=ioOX8_fmORHT; za)sypD-L+PO+F%DQ$r0Jy1{gV=b}r70$T+tb>pA!SRruhUY+>1>fVu&G|@Wyl{

B}OW`&i)^oTzTvrC$S&x3wYul=iK2Hi;d338O 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 d@=X}_Pai*I&`V=ioOX8@(0ON%8* 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 Date: Fri, 16 Sep 2022 08:43:28 +0530 Subject: [PATCH 33/37] updating rotation test --- .../files/test_ui_draw_panel_rotation.json | 2 +- .../files/test_ui_draw_panel_rotation.log.gz | Bin 11845 -> 10870 bytes 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/fury/data/files/test_ui_draw_panel_rotation.json b/fury/data/files/test_ui_draw_panel_rotation.json index ab4999e90..99bf9b9c4 100644 --- a/fury/data/files/test_ui_draw_panel_rotation.json +++ b/fury/data/files/test_ui_draw_panel_rotation.json @@ -1 +1 @@ -{"CharEvent": 0, "MouseMoveEvent": 3055, "KeyPressEvent": 0, "KeyReleaseEvent": 0, "LeftButtonPressEvent": 12, "LeftButtonReleaseEvent": 12, "RightButtonPressEvent": 0, "RightButtonReleaseEvent": 0, "MiddleButtonPressEvent": 0, "MiddleButtonReleaseEvent": 0} \ No newline at end of file +{"CharEvent": 0, "MouseMoveEvent": 2534, "KeyPressEvent": 0, "KeyReleaseEvent": 0, "LeftButtonPressEvent": 12, "LeftButtonReleaseEvent": 12, "RightButtonPressEvent": 0, "RightButtonReleaseEvent": 0, "MiddleButtonPressEvent": 0, "MiddleButtonReleaseEvent": 0} \ No newline at end of file diff --git a/fury/data/files/test_ui_draw_panel_rotation.log.gz b/fury/data/files/test_ui_draw_panel_rotation.log.gz index 8d3bf882ad297d4df68d9bf83f58ef00be568970..fe3ccb1445a3105759fd19445d1adcf7542ab9f2 100644 GIT binary patch literal 10870 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 M1DY|{IWkoN01k=L3jhEB literal 11845 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 Date: Fri, 16 Sep 2022 21:50:37 +0530 Subject: [PATCH 34/37] adding highlight_color param --- fury/ui/elements.py | 24 +++++++++++++++++++----- 1 file changed, 19 insertions(+), 5 deletions(-) diff --git a/fury/ui/elements.py b/fury/ui/elements.py index b2eca88b8..b4e6d90d0 100644 --- a/fury/ui/elements.py +++ b/fury/ui/elements.py @@ -3213,7 +3213,8 @@ class DrawShape(UI): """Create and Manage 2D Shapes. """ - def __init__(self, shape_type, drawpanel=None, position=(0, 0), debug=False): + def __init__(self, shape_type, drawpanel=None, position=(0, 0), color=None, + highlight_color=(.8, 0, 0), debug=False): """Init this UI element. Parameters @@ -3232,8 +3233,9 @@ def __init__(self, shape_type, drawpanel=None, position=(0, 0), debug=False): self.drawpanel = drawpanel self.max_size = None self.debug = debug + self.color = np.random.random(3) if color is None else color + self.highlight_color = highlight_color super(DrawShape, self).__init__(position) - self.shape.color = np.random.random(3) def _setup(self): """Setup this UI component. @@ -3249,6 +3251,8 @@ def _setup(self): else: raise IOError("Unknown shape type: {}.".format(self.shape_type)) + self.shape.color = self.color + self.cal_bounding_box() if self.debug: @@ -3358,12 +3362,17 @@ def is_selected(self, value): def selection_change(self): if self.is_selected: + self.highlight(True) self.show_rotation_slider() self.set_bb_box_visibility(True) else: + self.highlight(False) self.rotation_slider.set_visibility(False) self.set_bb_box_visibility(False) + def highlight(self, value): + self.shape.color = self.highlight_color if value else self.color + def set_bb_box_visibility(self, value): if self.debug: if value: @@ -3460,8 +3469,9 @@ def remove(self): """ self.drawpanel.shape_list.remove(self) self._scene.rm(self.shape.actor) - self._scene.rm(*[border.actor for border in self.bb_box]) self._scene.rm(*self.rotation_slider.actors) + if self.debug: + self._scene.rm(*[border.actor for border in self.bb_box]) def left_button_pressed(self, i_ren, _obj, shape): mode = self.drawpanel.current_mode @@ -3509,7 +3519,8 @@ class DrawPanel(UI): """The main Canvas(Panel2D) on which everything would be drawn. """ - def __init__(self, size=(400, 400), position=(0, 0), is_draggable=False, debug=False): + def __init__(self, size=(400, 400), position=(0, 0), is_draggable=False, + highlight_color=(1, .0, .0), debug=False): """Init this UI element. Parameters @@ -3529,6 +3540,7 @@ def __init__(self, size=(400, 400), position=(0, 0), is_draggable=False, debug=F self.is_draggable = is_draggable self.current_mode = None self.debug = debug + self.highlight_color = highlight_color if is_draggable: self.current_mode = "selection" @@ -3676,7 +3688,9 @@ def draw_shape(self, shape_type, current_position): Lower left corner position for the shape. """ shape = DrawShape(shape_type=shape_type, drawpanel=self, - position=current_position, debug=self.debug) + position=current_position, + highlight_color=self.highlight_color, + debug=self.debug) if shape_type == "circle": shape.max_size = self.cal_min_boundary_distance(current_position) self.current_scene.add(shape) From cc6d974e4677b45f122fabb573a288d832e5cac2 Mon Sep 17 00:00:00 2001 From: Praneeth Shetty Date: Fri, 16 Sep 2022 21:55:07 +0530 Subject: [PATCH 35/37] adding test for grouping feature --- .../files/test_ui_draw_panel_grouping.json | 1 + .../files/test_ui_draw_panel_grouping.log.gz | Bin 0 -> 13588 bytes fury/ui/tests/test_elements.py | 31 ++++++++++++++++++ 3 files changed, 32 insertions(+) create mode 100644 fury/data/files/test_ui_draw_panel_grouping.json create mode 100644 fury/data/files/test_ui_draw_panel_grouping.log.gz diff --git a/fury/data/files/test_ui_draw_panel_grouping.json b/fury/data/files/test_ui_draw_panel_grouping.json new file mode 100644 index 000000000..c6e18d663 --- /dev/null +++ b/fury/data/files/test_ui_draw_panel_grouping.json @@ -0,0 +1 @@ +{"CharEvent": 0, "MouseMoveEvent": 2920, "KeyPressEvent": 6, "KeyReleaseEvent": 6, "LeftButtonPressEvent": 7, "LeftButtonReleaseEvent": 7, "RightButtonPressEvent": 0, "RightButtonReleaseEvent": 0, "MiddleButtonPressEvent": 0, "MiddleButtonReleaseEvent": 0} \ No newline at end of file diff --git a/fury/data/files/test_ui_draw_panel_grouping.log.gz b/fury/data/files/test_ui_draw_panel_grouping.log.gz new file mode 100644 index 0000000000000000000000000000000000000000..e8f6dae387c0cd4004464bc34dd6566d09ef6dd8 GIT binary patch literal 13588 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 a#w}8Cg8b$G{`1dw#Qy`PbE{jd@BsjK)1vGE literal 0 HcmV?d00001 diff --git a/fury/ui/tests/test_elements.py b/fury/ui/tests/test_elements.py index ce34adc1e..84e56a939 100644 --- a/fury/ui/tests/test_elements.py +++ b/fury/ui/tests/test_elements.py @@ -1127,6 +1127,37 @@ def test_ui_draw_panel_rotation(interactive=False): event_counter.check_counts(expected) +def test_ui_draw_panel_grouping(interactive=False): + filename = "test_ui_draw_panel_grouping" + recording_filename = pjoin(DATA_DIR, filename + ".log.gz") + expected_events_counts_filename = pjoin(DATA_DIR, filename + ".json") + + drawpanel = ui.DrawPanel(size=(600, 600), position=(30, 10)) + + # Assign the counter callback to every possible event. + event_counter = EventCounter() + event_counter.monitor(drawpanel) + + current_size = (680, 680) + show_manager = window.ShowManager( + size=current_size, title="DrawPanel Grouping UI Example") + show_manager.scene.add(drawpanel) + + # Recorded events: + # 1. Grouping/Ungrouping Shapes + # 2. Translation/Rotation of Grouped Shapes + + 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) + + def test_playback_panel(interactive=False): global playing, paused, stopped, loop, ts From d0f6ac824eeb51304bf9ce1f94755e1eae86ec04 Mon Sep 17 00:00:00 2001 From: Praneeth Shetty Date: Fri, 30 Sep 2022 19:43:48 +0530 Subject: [PATCH 36/37] re-recording tests --- .../files/test_ui_draw_panel_basic.log.gz | Bin 11303 -> 10970 bytes .../files/test_ui_draw_panel_grouping.json | 2 +- .../files/test_ui_draw_panel_grouping.log.gz | Bin 13588 -> 11593 bytes .../files/test_ui_draw_panel_rotation.json | 2 +- .../files/test_ui_draw_panel_rotation.log.gz | Bin 10870 -> 8850 bytes 5 files changed, 2 insertions(+), 2 deletions(-) diff --git a/fury/data/files/test_ui_draw_panel_basic.log.gz b/fury/data/files/test_ui_draw_panel_basic.log.gz index e5302cb4df071c1ac79121ae2ef772411203c386..a430052cfc543ec52dfecc519f6203ba7b338307 100644 GIT binary patch literal 10970 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

}M)~7Ua12)n=LHkGt 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 IOFLfy09k+4H~;_u literal 11303 zcmV+?EZEZ@iwFoP0U~1p|8!+@bYFF8Uu1G&cVBQ}Ze?s=VqtS>V=ioOX8_fmORHT; za)sypD-L+PO+F%DQ$r0Jy1{gV=b}r70$T+tb>pA!SRruhUY+>1>fVu&G|@Wyl{

B}OW`&i)^oTzTvrC$S&x3wYul=iK2Hi;d338O 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

40dQZU`s>>!7nhPaB8w^Cw4h*EA z8!V$A?QB9ok%Gb4ypbwMgRvhS>}i8NZL(FE>_=x~Ft(<1ycNcleu8<+43>q{*-Wy@MUOW?H1w#S z;AE*Fae%yW(e1`5;i^~}BpRBD3=tR6h}9L<69B=bEV~hBhN@0ufJ#FxeVkE|t!5k) z{h{kaMStL;+?D7)YgndlM6EKd0Yyl_LaH<6a|TSUi+C~RTPIyJEszk#8c0f9McD=F zwVeqHI1m(J>YzU>X_u)+9iVIBCTy?D4+q?28?pZ{(xC6C=y5FQTsyIUL^@<#xk-w5 z&T)-nKzo4%a!mjzfKv@0C~ZC;NUGoBC!G!d1CXli@xvgJ{0Ec{^aCjIJ2L49kgswM z*bf=hClv(C9l@%e78m(6^a=8*#nYyAydQv$H^6dAudF2W4PwyqLFjEKsZdfKMr=zM zvm433Bn^@asHRiBP%J1ch>BXg0D)jW z#5h#a1z3z!x0XRqsX@BS$X7&q-HN@l780fbjfJ{c)5*1*QBNrq-+`73YVQP`@G4gX z{vxr>FHj^^2{XBfwE#)D!GJSaumWMI3lyL+Fj!+x8|>XCgDunwh{QO~3RK|BI*ONl55s3{avtX_xrnGs#63L zk`c_3>`@!#N*V}NOOpe>Qv~Y>W~E#JmJzJ6PpBD9NZx1_l)eWt!YpTCkOZhovegzj zGSb?>0aWT9sJl~uu>vJ9Blm%-Z-A(&Cb&R{l!-Gp3utU1CI`@Sp&NA_XfaR$g@KY! zNh^wCYzKhukGN+hx{RJMz;=+#5f9=BfSCFQyCpq;-&0@0;>gLEW^aZtX%O+#j<^9; z8xjy8(Zf=xVcs@~5uMXtV*jYj>H^M$F-^s$y!A(#Bo32fb*~I$5ES_aE2`Q6Za=BW zpo3P)s6nL4SmLY^*#dFESCxUJ_GbWRqk5wZP`s20x6(k|N<)bti0LSfUG#xilawb+ z9DpFS1yRK7V$4ts1?DRe1|}SxjlsZTEmAq4xMPV!Ak9)k zKooNjn^=`cpj@F@RYUx4M_C3Q|8}ekVErpB3VaF8yeE}}PXS+blMWRJdlY5`mC-7t z1OyvmUK%ms(N`{z6Uq&R2NlD<;#E(b7q^1*u^RMX$8` z08NP;)CCl^i-cmL>;odkM07iV;3=er%kIOD%J%`8yJ~$(Lrq#sV{S*_jFT9P6Gf^e z)`2c9!?fT~H)IW()nF0mtx~Lrqp%R>`eMCli`dyHQwXG|C_r5SW0=~N#CCDD##ftUu>cMnrOtF! z`>rGj88t~w#u`F8vldo@3-S?XCpCMj6dNQTv63Q2r3Ma?w%FeaLzTM9l|-;bYDC3% z11e6t70m+noI#3aMT-MUaFv@oNT%=kQovPlw51UnFe--}fRN>!g8?`f&H)^R$mUEh z=wq!qOhC<`7Qd4f-UBj)nynK%AhJQQYWygG?`FJEh5q{KZxQ4#|NozV^%4IGfNKS- H>ze@p)FmOR literal 13588 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 a#w}8Cg8b$G{`1dw#Qy`PbE{jd@BsjK)1vGE diff --git a/fury/data/files/test_ui_draw_panel_rotation.json b/fury/data/files/test_ui_draw_panel_rotation.json index 99bf9b9c4..8b8993253 100644 --- a/fury/data/files/test_ui_draw_panel_rotation.json +++ b/fury/data/files/test_ui_draw_panel_rotation.json @@ -1 +1 @@ -{"CharEvent": 0, "MouseMoveEvent": 2534, "KeyPressEvent": 0, "KeyReleaseEvent": 0, "LeftButtonPressEvent": 12, "LeftButtonReleaseEvent": 12, "RightButtonPressEvent": 0, "RightButtonReleaseEvent": 0, "MiddleButtonPressEvent": 0, "MiddleButtonReleaseEvent": 0} \ No newline at end of file +{"CharEvent": 0, "MouseMoveEvent": 1981, "KeyPressEvent": 0, "KeyReleaseEvent": 0, "LeftButtonPressEvent": 12, "LeftButtonReleaseEvent": 12, "RightButtonPressEvent": 0, "RightButtonReleaseEvent": 0, "MiddleButtonPressEvent": 0, "MiddleButtonReleaseEvent": 0} \ No newline at end of file diff --git a/fury/data/files/test_ui_draw_panel_rotation.log.gz b/fury/data/files/test_ui_draw_panel_rotation.log.gz index fe3ccb1445a3105759fd19445d1adcf7542ab9f2..831273633b6331f8733d6d5f2a26a48430955953 100644 GIT binary patch literal 8850 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 U)BpVS+hgQ^0gJl~R`wVH02qASCIA2c literal 10870 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 M1DY|{IWkoN01k=L3jhEB From 07c8ac3184e9e6b854d60e097b825daa0a41ce81 Mon Sep 17 00:00:00 2001 From: Praneeth Shetty Date: Wed, 5 Oct 2022 16:54:46 +0530 Subject: [PATCH 37/37] recording tests on linux --- fury/data/files/test_ui_draw_panel_basic.json | 2 +- .../files/test_ui_draw_panel_basic.log.gz | Bin 10970 -> 8622 bytes .../files/test_ui_draw_panel_grouping.json | 2 +- .../files/test_ui_draw_panel_grouping.log.gz | Bin 11593 -> 6038 bytes .../files/test_ui_draw_panel_rotation.json | 2 +- .../files/test_ui_draw_panel_rotation.log.gz | Bin 8850 -> 2851 bytes 6 files changed, 3 insertions(+), 3 deletions(-) diff --git a/fury/data/files/test_ui_draw_panel_basic.json b/fury/data/files/test_ui_draw_panel_basic.json index c806a95b5..63f594ad8 100644 --- a/fury/data/files/test_ui_draw_panel_basic.json +++ b/fury/data/files/test_ui_draw_panel_basic.json @@ -1 +1 @@ -{"CharEvent": 0, "MouseMoveEvent": 2917, "KeyPressEvent": 0, "KeyReleaseEvent": 0, "LeftButtonPressEvent": 17, "LeftButtonReleaseEvent": 17, "RightButtonPressEvent": 0, "RightButtonReleaseEvent": 0, "MiddleButtonPressEvent": 0, "MiddleButtonReleaseEvent": 0} \ No newline at end of file +{"CharEvent": 0, "MouseMoveEvent": 2103, "KeyPressEvent": 0, "KeyReleaseEvent": 0, "LeftButtonPressEvent": 13, "LeftButtonReleaseEvent": 13, "RightButtonPressEvent": 0, "RightButtonReleaseEvent": 0, "MiddleButtonPressEvent": 0, "MiddleButtonReleaseEvent": 0} \ No newline at end of file diff --git a/fury/data/files/test_ui_draw_panel_basic.log.gz b/fury/data/files/test_ui_draw_panel_basic.log.gz index a430052cfc543ec52dfecc519f6203ba7b338307..0fd1320405f15da7dc4e911d32c6f5ddf255434e 100644 GIT binary patch literal 8622 zcmV;fAyM8RiwFov2|Hr~|8!+@bYFF8Uu1G&cVBQ}Ze?s=VqtS>V=ioOX8@(0ON%T? za)tNvD-yI0;qS**&^rx?5oq6_5)4S)L*F~Y{CwH*l$gq@%M=qRAhvQhr5~i zv19*q`}gm^z5V<@|MB+Qw?F^-%Ps$N`NL0t|I4r6-hTSq+b`d5={Dw$|Nq~AfB4he zFaP=W+jHAbzkL6HQ?E6Q@;0+Jv8IdEZ(AK;7w9=K?@)w_4#IYWzf5@DruyTizQ0F;IEr*MPj|Ef=^#jwi?o z?jetQTktY-ueaI29`A9$o65D{=vC|P@d3)Z6}rEeY&27HyyHS6SlX>5wr9M*ddrLK ziS2RmJjou{r}0bi_w@W}#5Ks?Zt!?9J7MtmGFG_pn7L#fXia2|wE^xbCOZswe6D0I zH+YpR(MZO6n-iNen=6|en>(8anq-t#2oR6CDgna(Sa=Wd6tuV3*c<917bjkn{2&9!1lR@;i(=jMnDJfJ zO^+Fq_6vYXfEs{JfN^VyURLb#jXvHQZbHj=g>YDD6_%^n$Wy7|m$OGJSFF%DwD<}7 zvTDl#z$=t+z3C=f++?G1Xe|KE0lM38KEs|~rDOS~fdZ zrE!SaR4NU1%&3AJQ`}&w#R2dp<>Js5Ut=T-4OBd$+2Z3K3O$7)CR&ITwH9*YN_;eh zoZ%ev5d-5K&RV8Pn`3j%D;sZ$vKV>v^A8-hxXDHyU(Csjv1eN+KEvReQV_Ct^8@HH zj@TI=R??sUVVbvV@c3OAc*c@(VPqXI_@exYX5vK)us*n}qA%$Hv25{A#PDDE(TCH0 z)ymH1g&%$RE>|_1z*UU@a?vMSBYwNcr`8^GWwX~^8Mjjb=qX|WzG$<2A67i3BtM!y z{pG%q0~y{Wr4l1>raWQe$XiK9a@(4gvPrqng!!r73I?@3rZ}zlea6$n;Po9*1U&zc z2Lks$8Gs;|PgQeLuC!BF994fkpSj#)P&r{n;LqOaEeih*zcgnHNRAbquHBni6 zdKdce2i@d|J#&oY0Mh`b15j{$2P_A`aVYUG{SY9Ze*j45Dh5z#kj!HIwc79^9tHyu`&JmzYB?DrmWk9U- z42V~a0Oh|KP^SST15jwjfNq95H#3si4R!1#XkTU=hxz;NUbPwJn%y9~5i)lDJuQ!H zzVg`)U)!s(pRcVFpgO?dCE+?lln79c3kZP0>(*7)*>GVP+VMgGuwr?J_jI)xD=oCx>0-! znWlQY-CQvl5q5Hx%HjJEI|Jjrtf5WyM*ywf$feBjol*#rwJ%LRqbIjHi&9fKzfb9g zay}9AF8U3V`{Bz{8ZgGLJWodG%e@vKhGD{35iI8*d*_649i5Z4b!<-e);Z1^0f2Z4 zIz|#@@WNxoxeXu!0s|NZpp-K{#hyG4I_$paD66H)Y41Cr7ywPx8Y}%p9*Ecxc*1br zCIXa`&Uk|B0NDVF-e$(*)oK9U0pbxEkPSeq5+?6OE4s*sQN+MMp|ct!QtAi-Ps=pa zNcBvc&q+k#!UbdxK8ex0q)C647Yu^gUd`X@JyvwN`Tq6IUqlhPdgixut$iFA3M{nv z5TM|3&83+_OqokeIhrV!d>HiMM0&1xk3-xl1T0LQ-vRCl(*Y>Ucb+0+cqDHncrR=1fMPTECDtzL4V+Bfqmy#Tu6rTYv*zx{K$ zw=(-n^MZ~mM3KvD^Cy@&NG`|WgoR`uZWM;;xeku=Gv{~nsm;N{q@0XDOD9J;Rsl>! z#4>`FTk-v`X6)72Ggl@dIW5*fw&xosv(jxEcYk7KlTy26?>BM>lqbT8rrHa{&X+32HE5@a0u52!B&P-tAqAk(3vm^Vz20iSbA7M{^ z3agfxNXOqyyg#ODF_UWF<~C_<%zVU0fjp-ZbaQ#y>;^cF<%|0nD ziYNQshbdJUm5=Aktj<|mT+>l#-&CHvVAWOC8ke{Xr|iOII0cKU4xqcA7!EKUU~#n( zh9HVpF`8BtU`>YBT!~g8t$`2qrKyiTT z0B$6)z%Bmz5%9b;>=W$ib&3J-fH$tXI)F4CATa;~^aEJi0nB5TX{HSaq{Rg2%7c`d zxa<+LcKXH((MGjOU}EsBx4oOyvYVpC(oOLL?p#$nS2N5r1}H&FfEJr`p_rkm@{6K| zrUWShW-|c!01ch2eG2V>Vo=VB7;p^oNm9H9C}~82Vc(jx#EaJ{I3=!zl13DpkJu1! zi&xnMZt>&fqPHoWAb)Jse$Mj&Fiw#<@=9?L8!hqnI$Gv+a>Qi8y!ahJfm1UZ(@>Ed z294srV~xxK(ChAoe}4cps}F#vI|r~FfXGurl1cn7I#;0Ub+1 zeZ0w@@x$pyfC>OLBHrWx%>kwZ(0ov#0+u}$Q38_#(A!k016Cd#z%qdDuF%~TMsomn zh3Ou1x}TVxm*PHgF^?&Sr4HfUGazLK^tlb7IY2c(q3@CbvC=XimSF@)QGo%){Dk6n z1~doA<{rerW57%X5FQW%vbn-GFLRoK9>(6x?^iQM#f^X)LUVod=hHmBd3gSs>nWLi z{pcUoqjwC*D{K@5T#eWCOQmJVDUqgOX6kW6GDpcr_z(egBnF_{c>u_35ujxQz;O_b znNF?_V49ymBJ%-McMoMdfV+q6?jgI!%=RZ7S3NBzwB&^3pLN^Q*l|vGJY*E1ij$FtrW%YdthhXM;7`vl-7L(7O;pSoBO7~X`%I`Jt7=aiAKA09S7V=S z@8%wxKt?vMk)R#0`Q9mLkOT!cD z2!$FR9M5i4UL_ZWRg$sgH#|75PRv&IH`~z(wv#Po&0hUPVL@FZ3*3zI@X_o|M)mjM z`1>WR`Xlg}0x=6MuTvPxQq4>|Qr!X(m$p;IjvGW~(~)sSp+a#dDc08^dd9S%N`;U- zF4rZS$_G@$RJemIv~5VqOWG)8m!=Sxs0_n`LsGC3*ozA-QAJ)^`pT-MlmR?;tY2@) zQ#|%z?9JG#v77s=i=VF=RadOA923(j`Dn56;Q*Em9KVO`^X8;`*j|mj8GASO@o0a_ zumaS>()$Vbv3&(3E(t#IKqWe>Gn;er^>0@hH~2xStksHT8Zgr1DL*Yf2z z3fQ`y53$QKe=0c&dDIX*@*sg0usb zreh4m;^YO8zz^%#SG#6A19#!9ypc?(SQICgp)N2!B# zvsj5YdHXaCTE`DIXziv!YvTs1+~D;?eev_z@EY|v8wyt|OUa1uCYjMlJX?zSwu{L> zO7M2`+JJqNqz8p$7PYA?CPSI~a-El)dI#R*G7Y9q77Uj-C7v+Ps-y?1XY9-sv}y{0 zwWoSS^ydzsBnPMt&>WyUfP0GKo}#*^sO~9nLs5@A%H!PuCJ~7BH&QRF9reHqxAMCK ziUT0ks~+`Gv($ZtJ-ZI-E}hPziSwcr8~Q0C7p_V@$V~cH|-q5l6~NDi*i$ZMD`2qHIo!lqd9<0G*hiz5yI`=d$yAe&pL$y@=oBoAPl zo5bYkbi}FynB|B1a*bFe%oVup)&Xn-XzmK#j05-O5@5Nf*u~8_^Ap33!*FkNGJaWhmBgN%rPno@)rhk@#CC|D zc$K;&|Bfr+5!^T3#DvHWfgL69h|2d-PrqbBWcGFr0&^Q@Ot}S=-W=9PTuQ2ApP@6y z_)*l&0)Cj2?2<59}f8D=e>sjHXpk%Eq#q~ zZ#@BPlb(gL71!yK-b}gig|#)uj$(iJ83@6!0jzESsya7_?ygZz(2t1G4C3DKi4aXw zoDt{6V^6a4(kKw@rvncvK%J+>qPz3rQ41@#dz%X^47^ZiMvZ>D(XzRUk;{2iuqhi0 zCwV(7;0}}u7~*x{52Vao*S;FFQ=|)$=^j+@ifeyYaU_u!x{f<(pHrM$XjN8&YE+kN zdva>L9a=S|We-an6OW6vBbAvnfbIa*0gAcFBlg``(g+1E+fnqUdyw??XxwwSpif@S zQKU$Rg{#gscbq)Jjm5#Cct%Z82|jdeMYvf{TQqC*HgxKmxwBk3Ee?=!h_08ujcw?F({TB)7o{ZTP--jV z;Z;fL#@&80^SGAbN=PJNnpz-i5@M=HViF)TNRsf4d1%$}$k?7eGYOeB=K96lU*5^R*Q0BI$k&APwbi#TPO0S zV)x#LXoHlB;=+VeGlx~k-Kf8bM2`o1>i3n2!Y!u~T@bmYnF^JQ^K!}wb_zE~%M=CN z0m}f;gOIPb8y7X8=UI-wxJ~sTWzy~dSHFn$0s@eOEt&m-WTgY>hOC5bf(3AmxlNg7 zIra699rg+K`|iXsv)FUZZdR->%YkM^_(Y@7E^ky9N)>-ud(~05+v=Pe6=kMc{lWHnAE;imG@x8LKo> z@bZ`^>neF!t_KOocD`XptGAFf1^YY8`iH7?bOhzW``Q zjvhNXF78NdqWQ*f~e)uK!;Ziaj|e&h0WMRGA8W6p1t7-jA^gbiUzh3|29t)yX$yv8{YWpqV(NDyq>7%>Q8K=6-ubR(Jb+83 z?a2Tt<^K)Zkd#D8LkUAs&gk6Pp_!G9xhJ9J`NST-oNOD za7d7N4oQWEVrf=BWxeo}b*W7W>Ni}QT`p|2keg|faAylv7Oc5)V?`YVh~C10JExI* zha12&0QVHidm}(DI0K4#%z9c@U?FrqlIyHA?y79x=J&HJ;>Dwg zE{_Kvp>{rx?5Ccx7;YtQP217+bapj19~WR_US+Sat*$0|CEu|%(>z=<_t^9H3xL8s z=bLLvFEK?1i2Z~5nUd5%iB2h~Fu?Tw71{6+@RGK;+?AZht&TBpWmbk6wOu70O^4~y zw=JvkSsqSa?GD&HTa^4#2k%fNo8$P5tUP5;v-oEYyG(TVPD~Mo=4Q z4%SbbhL>kpP@<+5!&@wdw}={6gIlQ`dosW8?%!#sC!?XBjD~t*4Su$p`=8U;7mwdE zo$MAj2)e6R84dSlG~BxpzZyn$9lN`(FKNK9FKWOqukmiwII9t;YKcROhAk-?65dL@ zYHo^AIDOC(w`-CpD>u#132<#(9c}1pi#hjqCKytBI`0cQePy|(7{@~CO^Jx1ylsuk z7fM~%o({DLo9h%*a6isn=kN*-n$-q|-J(N1#a5P`W#R4si~&tE8Pz|au$EtA zFdP6MbDO3Cu}z>hisaZT=CMwXF}eqFTe{^G6YSB=`~-Y9Dh+)=_s}W|z+#|klnv{N zgeUiVz#2HwLNR?VdTc?G@9A2ROlMMV1V0Ts?(_a#c{udTw^5C1u^%l^&U0HI};W##Qeug)MtC_G;`-syneA+4|G8 zTT;`z#-Rw8NEs>Uu}nLqVM?ePmO7jgD-1=736+wyqj+*mF18!zw9l`&!hQOye4$g_ zC)~5qm^_*&ld9%oX11^}eK*4Qg@yNH-`JB^yUek`JXLk5^UCcBVl~cdbGU#dHt7Lt3V`Ld}qOHSHdj+lG;-uW}w*q)x_(z8h8B zqtc&Z0xWaUHl4Zu<1!u)r|)pTSyc67SCw>M)q)#NxnqRlPtz=Uycnk-jzvbtEmqbHoM|h|o6blNHlZvVmu#EFuVVF6|8b*Wt2`RmpN!yu&b>0Qe>N9DR_YOY;pM}H> zXbw=^&1P=?P{b%h;*tnswm%fc?V@|t#okeN4F_^DVRgnM04a>5&1Wch$fZfcjXJoj zP8HB|GLago+J#%6ik5_0l18~+X%G4~H}_alQlBVS9myD*n+WSfVg7zyiTy*;4;*k$ zmYo=^NHSPBLV086)}g8ahw_7UC5F+J;5god@g|DzeBRahIQB?H5orYv0o zTnG=CCiTAzOT}cOhB+fiPQK#+ssl6!=nk-aCh8;XNur4*BXTmMp-dD?vgB=id5JAx z2rJ(e4}{bmm9=Z8QNO89^sO0kRO3{VqHJs)6-yL`ui<0hDCa9 z>ABsQBY*@rqwS!U>PUOUs#%>0i=if-&fN`j|1v=3kQ>i1q--T7%3sZTjEXRUsc`{hsJ_;wpk6Z+5 zA^D-nE8k;#fx{$yID#lsa=H4q#*hSO}=xU{a5X zT#=zj7PU*3>1sa0#c8x1jWxKlx*C+Qri4^JM`LY|HXXpJgLJ1*(zCk)hPMacu7Khj zu`Bn70OCQRQ9D3=6}8yH6-}ZJsPl7m$-0vqf=W$M zP{D1(*BYnb6&nk6I%BycW4v%ArTfQ?tL>WhI29XB(oyOC5YCI(bD>AM-IKHU|z z`EKs5#js^p<|gsuw2bR4vWWUDYJ!duFcQ4HCW~^uY%8W}VvaLiw9P363{p?(=T#;$ z<8E|X=VBJo6mFh8Bsa?#d?a-M+vML+&tj-oNNTULMjwq&M!%v=sYo9fK6h2$HWpiL zn5l?&)R=d&jp%GRnvFPkqpHfLvW7E@&c>qM$Zc1ip(od#Zq$s~TRCn&(N1{0KlF z&ftpchKeLoo=<~)mAV(#71V7Mud1tTsHkaj0LcL67pkW|1D|wTsB>}|N5wh^9m&kh z9Um&zAL+~n`NHBZqMpGr#oeOnS8UIr-j3UF`3sW-M0(p?vs0>J!E+5%aV>cAIxX1^ zPZ&8o^M+lARV+rIhZrquG8YP~bGNCdQ?@X%9jjlrsb1Zkt5ap~#@>v*8oRr{%w)8> zjeYU^spkD+_3Jhb0%b48o{im9k7K>4?7n*SHR`cC^&{?g+-)_ayk;16xN?fQv3NZo zU%O<-%@RKhlLJQ#mzE^S>9%g_D@Jy;KUh7q4ChZGVpz!~vNhIMDB|PN9@EdGNWlqN zW|C+^8r$gzQn|lcoTHYl>aD%{7b zVV=ioOX8@(0&8j6! zlAY)M6dN?&!p+?LZ`x3^ZV)Zdyg(^vkgA~W?M9C;Uv^PRxZxHpr`oaEXO;o;#w z=4Q5*{g>B&|MhR*{``Ob$G5-z@~?mW%gg?&{lmX}`^*3Q_P0O%`?tUR`fC6A=O6y` zmtX(?f6ryFIsHGNfBx&g{qpUf|N8IWejhx}g`D!+x=)3pr=Qe4b>ZXry&n~Ipt?mFgZjY7k+t=bX*!nA0uV6p>6}=oKzU_8w`JH|4Y<&ffb)R3uv0n~Ni+2CjSKkrpaC5hp z?edej`OE4)_cmTOMg`khFRMR^-LYmqYxp+J>YJ~4S*x#}=XF+%#_L#(w%4xjJmzcn z8tt!o_Su~~t8P`C*Q#GQ)@wzLj#oWMEN-j3M(tI9WPQO|ztNrUbJyryFY5Qr)w4$L z5?Fr)ze{V~S3VHETSDEF-U!u_4rma1*PmH`qo&odLba;b;B9gF{qB-I%FlP_SPicE z8s(>5T8+z{?JlJ9g<;w9*>0lVp|USsb|*4x&7$v6a-op4_=%J;l48RdK4 zmyGf~?@LDcp7%ZKi_5``_RG z{L3GI$QNMU(?(#wwnYiXt2RmQ2Lx~dc!wK+<8JscIco5((g02XWrNfpHE1saskL_p zufe-2eFuIyqN<;K7*QX8gb(>cAobUw&v1f3>MyPFgwpplYlsG-^oh0O5sGbge6G)* zK-c5=DSz`}0DbxuKj-gI{GQi>sgDJAFYKM{stz{U?N=jP5Kt|aMiwfe6H$KdA#~bL zp#DAj^;oEW^KmSE{1rdv52EHy=mJ$6xVt{@5FA{@Ulq$HGK(AlmV{j;L)!@wtuq3O_dXBM$9FUvE)^u>U7@ z(xg7Z1%R(SKMLZjELxAXpT)*vjBodi?SPXs zUJl;hdt0Y}nv& zzgM67=3TA|aOaN;*U!G^{ir*&_kH0>v4Zd6FQ@0{AAP>ZodncC+3yg{kO99T)^Qh} z+MV0A&DTD(u2sK2TJ&6IAwo2AP*z@=J7&Cg(ZxMYxtAj@Zns$Nmyc^99(M%*pPY_VwL5R#?ylRcg{yXL-OprotM+(-TXVl^ zf109zwJWs|XaxGJewVwM)eX8csSaW(SXy_(ymQ!UPn{xMr$+Z(`D=Id{d5=`_WI7z zU{Fjg4|Px){hf1caIz{CUJuoI2V?Ddo_8myo!0Zt+j^s#cTEEH&b-=Ju6T9rW}kP8 z5E^&csL=uDN}_d7Dm+q${;#16v5Ivl%pnxq#|B}UdG~9`cGwiHn|Dp9t$}%`_O8F+ zoxTUqbxp&l4GnVkCDD=7;7R0dE-7u`)iI-LYXt~?n?!cRWEyn;@3kbmT z?!*Z9<_NnXT*rzMu48x!FTVK>gb&_4+Ctc{TcTdH6Yh;+zIiyq8)5F$nAmHvxaEs) zzPaU_TYmWJgI{bke6eB1@IlzI<)d@c0>Aed4D%No3y0#^{N9`2oBMpW&M@A5@*JD| zNv1o)d~^PwlPB=({Or!%!qb29V0wi4#b`wy&#*HbKLt4uG-*rNFAUFa zl(DG&8xlBIW@v(OFwzPv;oG#`$nu!53$~diR|(&npV~+~*I29lC$h&@1B0wx_>i5b z)`JPU;5>G1UxXcRJ{Q9sZ+=Zpqs(cQaB`|RCmyMCYC_W)hx3%xg) z5s5mXwa-S+tvv{dI-vvGTw7&AYlBdCu6>Y+VyhgVYlt@L$x#mtp>=NlZPl3c+)*32 zLOWh-)K_qFek(bdzCuj;z7aIq1HVE))aH((z2m6s9Z{#===CyrQQwHxfl{GCt@2Kz z&W(D*4vieEeKzlviDQ6{AhbSA3at<5LhC*DqK6t)2b3?ks7du9@Pa|F+UZ>!yRiN? z6M|0fQAfJo@p9OL-bP?2uF_unq&?Hq}R&3)X3~w?z&l zsf*T`E$51_rxS*g0Hbe@WGqA#t6W7Ie1T?TROsHBfJ^;PhR{ z-VlxNT5~pW)8CXOpq28FAMIW5@ru{K-6%BvhO7#$Jm9RlcG!E7>+|tUL8;^5MEGbUpajy|A{@*EQk50e#0cIGFFGs2#}bHpv>p(3j(oiKs^d z^?Tj1X#;NFuVq``{F>rcldM-LrKfiJ-zno9`Em~m7&yGxUCAIjPX2s{1dJ6F@Sk^? z>frJh-3aoa#1QjED_O5!Y$zWb__d-O)t-jYm1v4S-d>-*hmEDe&yDm4TXa z*)w{vaA&wb!?5H=5>XJIH9W{DN*L4|67CEygok0v>oZh#%MAP^3qI&cxthyzN@g9VQVbhw4BMORn}$a4SnK3rIbK+c(@IVCHTU}IQc3AarZQo}k~)Xo4mHEq@K zpcsU9UxM3Co>~bnh9|@016)uUKmY9EE`Jo}zE2p0%^~!M$@M9!wSc8i|(!M%_z#x#=JolVlgPU5r z>9&imWO@)CqTp0Ue6CQiDiXk}C_)$pS^PPKspqAXoN-iewukzeJE*1Wp16 zfk9v=&I@>atE$?pNl8%VqkG+yq+_WEd-7V&oSNdd{sQ)S|yHw}CgCQlx? z>JIt=B|QeN8|iw14>DcSpdeuA;7oWiT;E)wre)mniNXr>-bM*lJ*D6RH6QB8jC6{7 z9P)?t`V`XJ!tX7$ih6@m=%a_D6b79e2gNt!xrM|tc@YtADM?XIqD?Moc`!SvOHYOe zsXfSh`Uu<4z_9da@gVp?`h;PHAbtW~6b+NV8{t7g1j%*x+VLYFKf?9_{&Lg*{G*3^ zd=89 zwBgiYtB~46t&9?BpVm!FJxPFr;fI?ageN~cB^d$k40FpO*9Ik2 z(f3Z#M>rh~989^oImzt6K#q-bEEGA0&%d$*l%r?4MmRYi1}bi zr=cSYi1A1}1$2HSCIas*2L)uQ?UTb1#B+fAFPeCOc8A=HAyjV}pwW|XkaW-hg>b`iB?&`P@SWQOq<9jBv_m7h zO2V}(Qb~&-iSQe|5e9*pgfU@qENzzk$VaOFUBAbKseX-@27BEJ)= z#js8YxrWTFdD?@PStqa&_%=i%O|Y7XM(Cn_BiXdbhkihRhNnx6XV_6rSma*a+9gr{p%{%(yJ?Kq&Z=vg8J!V-gx0(fYZZei>O%rgRmN zyl*V32Y8P=hl)$p^Y3m%8w@q5t9N^FQlP#b$*N@rCri>Db&8x)h+poDM&$|S50xjl zLy)xGUQVH0&;*^Ji!7Pw@;#L>MRf!glo1G0;-~DKhBRBJgrYZAb$TzV%=A8#K=n2( z2J*H}7AKIqrN#>MZke-h+f><;;5${{hFbmrC;OM+gK#&5MQb*okUNnkT})J9%xAYa zMF|O3w_y3(_oPsHJqr8ivO(cQSBn-%Blc|+F=-SpX_(GlZ$T5lyR=%TmvGCb-VBxW5#lQBTDY&OUPQIBM~MG4)cX)n8_cB{yK0Cd8ZA*YIi^M4bX z`SL%CIw|~TdQOcF&?k|fm0VB_^3`OLB;=@Fe zgOpQ&0V)+ar?SjQFZ~S;hBv~CuipIZeGrD&iURQsl`e=jFBm3K*4n|A_u#7sKb!l! zuT9?@sOuU`P~YgcQXnY98&HHKGuYv*xiUWjgbqNfUaJGB%}d00z@ix|^8{ewqNwlv zm;*lOJwgwt`=K&I6BQgr9p#sRFv!U(z5oh_3K)UfyuuG-ciL(&IJ&dmPzkTxyg~YS z>_xjE!W@`YC><6LWf&ZYKt>idf|5p~rYXr38V78@mZgnK^LZ2Nf)zq(qY2WO=^NMYR^n1FiT}fNiMpis(eW z)Sps-#W>8wR*i+~v4Pj3rY-7elD6zl9dsgJYAyB#M&V!)5DKxQ zg_^dLa&6w7(tI5Ak0`B5DO*sf^U&6=nvodsh(S*NfP||^

}M)~7Ua12)n=LHkGt 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 IOFLfy09k+4H~;_u diff --git a/fury/data/files/test_ui_draw_panel_grouping.json b/fury/data/files/test_ui_draw_panel_grouping.json index 47a1c1c5b..00a520ef3 100644 --- a/fury/data/files/test_ui_draw_panel_grouping.json +++ b/fury/data/files/test_ui_draw_panel_grouping.json @@ -1 +1 @@ -{"CharEvent": 0, "MouseMoveEvent": 2455, "KeyPressEvent": 4, "KeyReleaseEvent": 4, "LeftButtonPressEvent": 8, "LeftButtonReleaseEvent": 8, "RightButtonPressEvent": 0, "RightButtonReleaseEvent": 0, "MiddleButtonPressEvent": 0, "MiddleButtonReleaseEvent": 0} \ No newline at end of file +{"CharEvent": 3, "MouseMoveEvent": 1340, "KeyPressEvent": 3, "KeyReleaseEvent": 3, "LeftButtonPressEvent": 10, "LeftButtonReleaseEvent": 10, "RightButtonPressEvent": 0, "RightButtonReleaseEvent": 0, "MiddleButtonPressEvent": 0, "MiddleButtonReleaseEvent": 0} \ No newline at end of file diff --git a/fury/data/files/test_ui_draw_panel_grouping.log.gz b/fury/data/files/test_ui_draw_panel_grouping.log.gz index 09dfb6797c0f0295d23f7e8524c40cfce3d06f2f..28af1783f0eb769334eea496aa90018fbbfa735d 100644 GIT binary patch literal 6038 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

40dQZU`s>>!7nhPaB8w^Cw4h*EA z8!V$A?QB9ok%Gb4ypbwMgRvhS>}i8NZL(FE>_=x~Ft(<1ycNcleu8<+43>q{*-Wy@MUOW?H1w#S z;AE*Fae%yW(e1`5;i^~}BpRBD3=tR6h}9L<69B=bEV~hBhN@0ufJ#FxeVkE|t!5k) z{h{kaMStL;+?D7)YgndlM6EKd0Yyl_LaH<6a|TSUi+C~RTPIyJEszk#8c0f9McD=F zwVeqHI1m(J>YzU>X_u)+9iVIBCTy?D4+q?28?pZ{(xC6C=y5FQTsyIUL^@<#xk-w5 z&T)-nKzo4%a!mjzfKv@0C~ZC;NUGoBC!G!d1CXli@xvgJ{0Ec{^aCjIJ2L49kgswM z*bf=hClv(C9l@%e78m(6^a=8*#nYyAydQv$H^6dAudF2W4PwyqLFjEKsZdfKMr=zM zvm433Bn^@asHRiBP%J1ch>BXg0D)jW z#5h#a1z3z!x0XRqsX@BS$X7&q-HN@l780fbjfJ{c)5*1*QBNrq-+`73YVQP`@G4gX z{vxr>FHj^^2{XBfwE#)D!GJSaumWMI3lyL+Fj!+x8|>XCgDunwh{QO~3RK|BI*ONl55s3{avtX_xrnGs#63L zk`c_3>`@!#N*V}NOOpe>Qv~Y>W~E#JmJzJ6PpBD9NZx1_l)eWt!YpTCkOZhovegzj zGSb?>0aWT9sJl~uu>vJ9Blm%-Z-A(&Cb&R{l!-Gp3utU1CI`@Sp&NA_XfaR$g@KY! zNh^wCYzKhukGN+hx{RJMz;=+#5f9=BfSCFQyCpq;-&0@0;>gLEW^aZtX%O+#j<^9; z8xjy8(Zf=xVcs@~5uMXtV*jYj>H^M$F-^s$y!A(#Bo32fb*~I$5ES_aE2`Q6Za=BW zpo3P)s6nL4SmLY^*#dFESCxUJ_GbWRqk5wZP`s20x6(k|N<)bti0LSfUG#xilawb+ z9DpFS1yRK7V$4ts1?DRe1|}SxjlsZTEmAq4xMPV!Ak9)k zKooNjn^=`cpj@F@RYUx4M_C3Q|8}ekVErpB3VaF8yeE}}PXS+blMWRJdlY5`mC-7t z1OyvmUK%ms(N`{z6Uq&R2NlD<;#E(b7q^1*u^RMX$8` z08NP;)CCl^i-cmL>;odkM07iV;3=er%kIOD%J%`8yJ~$(Lrq#sV{S*_jFT9P6Gf^e z)`2c9!?fT~H)IW()nF0mtx~Lrqp%R>`eMCli`dyHQwXG|C_r5SW0=~N#CCDD##ftUu>cMnrOtF! z`>rGj88t~w#u`F8vldo@3-S?XCpCMj6dNQTv63Q2r3Ma?w%FeaLzTM9l|-;bYDC3% z11e6t70m+noI#3aMT-MUaFv@oNT%=kQovPlw51UnFe--}fRN>!g8?`f&H)^R$mUEh z=wq!qOhC<`7Qd4f-UBj)nynK%AhJQQYWygG?`FJEh5q{KZxQ4#|NozV^%4IGfNKS- H>ze@p)FmOR diff --git a/fury/data/files/test_ui_draw_panel_rotation.json b/fury/data/files/test_ui_draw_panel_rotation.json index 8b8993253..e9373ea0e 100644 --- a/fury/data/files/test_ui_draw_panel_rotation.json +++ b/fury/data/files/test_ui_draw_panel_rotation.json @@ -1 +1 @@ -{"CharEvent": 0, "MouseMoveEvent": 1981, "KeyPressEvent": 0, "KeyReleaseEvent": 0, "LeftButtonPressEvent": 12, "LeftButtonReleaseEvent": 12, "RightButtonPressEvent": 0, "RightButtonReleaseEvent": 0, "MiddleButtonPressEvent": 0, "MiddleButtonReleaseEvent": 0} \ No newline at end of file +{"CharEvent": 0, "MouseMoveEvent": 632, "KeyPressEvent": 0, "KeyReleaseEvent": 0, "LeftButtonPressEvent": 8, "LeftButtonReleaseEvent": 8, "RightButtonPressEvent": 0, "RightButtonReleaseEvent": 0, "MiddleButtonPressEvent": 0, "MiddleButtonReleaseEvent": 0} \ No newline at end of file diff --git a/fury/data/files/test_ui_draw_panel_rotation.log.gz b/fury/data/files/test_ui_draw_panel_rotation.log.gz index 831273633b6331f8733d6d5f2a26a48430955953..392df3495aa9db75b4f2120fce83bfb85512fb8e 100644 GIT binary patch delta 2847 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 literal 8850 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 U)BpVS+hgQ^0gJl~R`wVH02qASCIA2c