Esempio n. 1
0
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
Esempio n. 2
0
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
Esempio n. 3
0
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)
Esempio n. 4
0
 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)
Esempio n. 5
0
 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
Esempio n. 6
0
    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()
Esempio n. 7
0
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]