def test_polygon_selector_set_props_handle_props(): ax = get_ax() ax._selections_count = 0 def onselect(vertices): ax._selections_count += 1 ax._current_result = vertices tool = widgets.PolygonSelector(ax, onselect, props=dict(color='b', alpha=0.2), handle_props=dict(alpha=0.5)) event_sequence = (polygon_place_vertex(50, 50) + polygon_place_vertex(150, 50) + polygon_place_vertex(50, 150) + polygon_place_vertex(50, 50)) for (etype, event_args) in event_sequence: do_event(tool, etype, **event_args) artist = tool._selection_artist assert artist.get_color() == 'b' assert artist.get_alpha() == 0.2 tool.set_props(color='r', alpha=0.3) assert artist.get_color() == 'r' assert artist.get_alpha() == 0.3 for artist in tool._handles_artists: assert artist.get_color() == 'b' assert artist.get_alpha() == 0.5 tool.set_handle_props(color='r', alpha=0.3) for artist in tool._handles_artists: assert artist.get_color() == 'r' assert artist.get_alpha() == 0.3
def check_polygon_selector(event_sequence, expected_result, selections_count): """ Helper function to test Polygon Selector. Parameters ---------- event_sequence : list of tuples (etype, dict()) A sequence of events to perform. The sequence is a list of tuples where the first element of the tuple is an etype (e.g., 'onmove', 'press', etc.), and the second element of the tuple is a dictionary of the arguments for the event (e.g., xdata=5, key='shift', etc.). expected_result : list of vertices (xdata, ydata) The list of vertices that are expected to result from the event sequence. selections_count : int Wait for the tool to call its `onselect` function `selections_count` times, before comparing the result to the `expected_result` """ ax = get_ax() ax._selections_count = 0 def onselect(vertices): ax._selections_count += 1 ax._current_result = vertices tool = widgets.PolygonSelector(ax, onselect) for (etype, event_args) in event_sequence: do_event(tool, etype, **event_args) assert ax._selections_count == selections_count assert ax._current_result == expected_result
def test_polygon_selector_verts_setter(fig_test, fig_ref): verts = [(0.1, 0.4), (0.5, 0.9), (0.3, 0.2)] ax_test = fig_test.add_subplot() def onselect(vertices): pass tool_test = widgets.PolygonSelector(ax_test, onselect) tool_test.verts = verts assert tool_test.verts == verts ax_ref = fig_ref.add_subplot() tool_ref = widgets.PolygonSelector(ax_ref, onselect) event_sequence = (polygon_place_vertex(*verts[0]) + polygon_place_vertex(*verts[1]) + polygon_place_vertex(*verts[2]) + polygon_place_vertex(*verts[0])) for (etype, event_args) in event_sequence: do_event(tool_ref, etype, **event_args)
def __init__(self, ax, bg_img, label_id=128): self.canvas = ax.figure.canvas # Ensure that we have separate colors for each object self.poly = mpl_widgets.PolygonSelector(ax, self.onselect, lineprops=dict(color='g', alpha=1), markerprops=dict(mec='g', mfc='g', alpha=1)) self.label_id = label_id self.bg_img = bg_img self.mask_img = np.zeros_like(self.bg_img)
def __init__(self, ax, label_id=128): self.canvas = ax.figure.canvas self.ax = ax # Ensure that we have separate colors for each object self.poly = mpl_widgets.PolygonSelector(ax, self.onselect, lineprops=dict(color='g', alpha=1), markerprops=dict(mec='g', mfc='g', alpha=1)) self._label_id = label_id self.text_label = None self.connect() self.path = None
def initialize(self): self.combobox_browse_callback(self.layout1_widgets[1]) self.layout3_widgets[0].setText('untitled.py') time = np.arange(0, 2 * 3.14, 0.1) # self.ax.plot(time, np.sin(time)) blank_img = np.zeros((720, 360), dtype=np.uint8) self.ax.imshow(blank_img) # self.circle = mpl_patches.Circle([100, 100], radius = 50, color = 'b', fill = False) # #use add_patch instead, it's more clear what you are doing # self.ax.add_patch(self.circle) self.ax.set_aspect('equal') # circles = [mpl.patches.Circle((100, 100), 50, fc='r', alpha=0.5, picker = 5), # mpl.patches.Circle((50, 50), 50, fc='b', alpha=0.5, picker = 5)] # for circ in circles: # self.ax.add_patch(circ) self.ax.add_patch( mpl.patches.Circle((100, 100), 50, fc='r', alpha=0.5, picker=5)) self.ax.add_patch( mpl.patches.Rectangle((50, 50), 100, 50, fc='b', alpha=0.3, picker=5)) self.fig.canvas.mpl_connect('button_press_event', self.on_press) self.fig.canvas.mpl_connect('button_release_event', self.on_release) self.fig.canvas.mpl_connect('pick_event', self.on_pick) self.fig.canvas.mpl_connect('motion_notify_event', self.on_motion) self.poly = mpl_widgets.PolygonSelector(self.ax, self.onselect, lineprops=dict(color='g', alpha=1), markerprops=dict(mec='g', mfc='g', alpha=1)) print(self.ax) self.path = None self.polypatches = None # self.polypatches = mpl.patches.Polygon(np.array([[100, 300],[150, 350],[50, 400],[100, 300]]), fc = 'g', alpha = 0.3, picker = 5) # self.ax.add_patch(mpl.patches.Polygon(np.array([[100, 300],[150, 350],[50, 400],[100, 300]]), fc = 'g', alpha = 0.3, picker = 5)) self.current_artist = None self.currently_dragging = False plt.show()
def test_polygon_selector_redraw(): verts = [(50, 50), (150, 50), (50, 150)] event_sequence = ( polygon_place_vertex(*verts[0]) + polygon_place_vertex(*verts[1]) + polygon_place_vertex(*verts[2]) + polygon_place_vertex(*verts[0]) + # Polygon completed, now remove first two verts polygon_remove_vertex(*verts[1]) + polygon_remove_vertex(*verts[2]) + # At this point the tool should be reset so we can add # more vertices polygon_place_vertex(*verts[1])) ax = get_ax() def onselect(vertices): pass tool = widgets.PolygonSelector(ax, onselect) for (etype, event_args) in event_sequence: do_event(tool, etype, **event_args) # After removing two verts, only one remains, and the # selector should be automatically resete assert tool.verts == verts[0:2]