From 5372263835a285c51bd0b58f0687475c8ebde4dd Mon Sep 17 00:00:00 2001
From: m-guberina <gubi.guberina@gmail.com>
Date: Tue, 7 Nov 2023 14:03:53 +0100
Subject: [PATCH] put example back, wrote note that it might be better to turn
 the path into a collection of bezier curves or something to make em nice and
 smooth

---
 drawing_gen/.draw_path.py.swp             | Bin 12288 -> 0 bytes
 drawing_gen/.example_draw.py.swp          | Bin 12288 -> 0 bytes
 drawing_gen/draw_path.py                  |   8 +-
 drawing_gen/lasso_selector_demo_sgskip.py | 113 ++++++++++++++++++++++
 4 files changed, 120 insertions(+), 1 deletion(-)
 delete mode 100644 drawing_gen/.draw_path.py.swp
 delete mode 100644 drawing_gen/.example_draw.py.swp
 create mode 100644 drawing_gen/lasso_selector_demo_sgskip.py

diff --git a/drawing_gen/.draw_path.py.swp b/drawing_gen/.draw_path.py.swp
deleted file mode 100644
index 26bbfd9be5319d2a72f37da9da24071c9bd03b1f..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 12288
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

diff --git a/drawing_gen/.example_draw.py.swp b/drawing_gen/.example_draw.py.swp
deleted file mode 100644
index 9b10bb278d92b8826460e0aae659d6cd2025bd69..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 12288
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
NXf)*)q054T5CB(5o}~Z)

diff --git a/drawing_gen/draw_path.py b/drawing_gen/draw_path.py
index 5e9e22c..c8e3aa5 100644
--- a/drawing_gen/draw_path.py
+++ b/drawing_gen/draw_path.py
@@ -23,7 +23,13 @@ class DrawPath:
 
 
 if __name__ == '__main__':
-
+    # normalize both x and y to 0-1 range
+    # we can multiply however we want later
+    # idk about the number of points, but it's large enough to draw
+    # a smooth curve on the screen, so it's enough for the robot to draw as well i assume
+    # NOTE: possible improvement: make it all bezier curves
+    # https://matplotlib.org/stable/users/explain/artists/paths.html
+    # look at the example for path handling if that's what you'll need
     subplot_kw = dict(xlim=(0, 1), ylim=(0, 1), autoscale_on=False)
     fig, ax = plt.subplots(subplot_kw=subplot_kw)
 
diff --git a/drawing_gen/lasso_selector_demo_sgskip.py b/drawing_gen/lasso_selector_demo_sgskip.py
new file mode 100644
index 0000000..f5a206f
--- /dev/null
+++ b/drawing_gen/lasso_selector_demo_sgskip.py
@@ -0,0 +1,113 @@
+"""
+==============
+Lasso Selector
+==============
+
+Interactively selecting data points with the lasso tool.
+
+This examples plots a scatter plot. You can then select a few points by drawing
+a lasso loop around the points on the graph. To draw, just click
+on the graph, hold, and drag it around the points you need to select.
+"""
+
+
+import numpy as np
+
+from matplotlib.path import Path
+from matplotlib.widgets import LassoSelector
+
+
+class SelectFromCollection:
+    """
+    Select indices from a matplotlib collection using `LassoSelector`.
+
+    Selected indices are saved in the `ind` attribute. This tool fades out the
+    points that are not part of the selection (i.e., reduces their alpha
+    values). If your collection has alpha < 1, this tool will permanently
+    alter the alpha values.
+
+    Note that this tool selects collection objects based on their *origins*
+    (i.e., `offsets`).
+
+    Parameters
+    ----------
+    ax : `~matplotlib.axes.Axes`
+        Axes to interact with.
+    collection : `matplotlib.collections.Collection` subclass
+        Collection you want to select from.
+    alpha_other : 0 <= float <= 1
+        To highlight a selection, this tool sets all selected points to an
+        alpha value of 1 and non-selected points to *alpha_other*.
+    """
+
+    def __init__(self, ax, collection, alpha_other=0.3):
+        self.canvas = ax.figure.canvas
+        self.collection = collection
+        self.alpha_other = alpha_other
+
+        self.xys = collection.get_offsets()
+        self.Npts = len(self.xys)
+
+        # Ensure that we have separate colors for each object
+        self.fc = collection.get_facecolors()
+        if len(self.fc) == 0:
+            raise ValueError('Collection must have a facecolor')
+        elif len(self.fc) == 1:
+            self.fc = np.tile(self.fc, (self.Npts, 1))
+
+        self.lasso = LassoSelector(ax, onselect=self.onselect)
+        self.ind = []
+
+    def onselect(self, verts):
+        path = Path(verts)
+        print(verts)
+        print(path)
+        self.ind = np.nonzero(path.contains_points(self.xys))[0]
+        self.fc[:, -1] = self.alpha_other
+        self.fc[self.ind, -1] = 1
+        self.collection.set_facecolors(self.fc)
+        #self.canvas.draw_idle()
+
+    def disconnect(self):
+        self.lasso.disconnect_events()
+        self.fc[:, -1] = 1
+        self.collection.set_facecolors(self.fc)
+        self.canvas.draw_idle()
+
+
+if __name__ == '__main__':
+    import matplotlib.pyplot as plt
+
+    # Fixing random state for reproducibility
+    np.random.seed(19680801)
+
+    data = np.random.rand(100, 2)
+
+    subplot_kw = dict(xlim=(0, 1), ylim=(0, 1), autoscale_on=False)
+    fig, ax = plt.subplots(subplot_kw=subplot_kw)
+
+    pts = ax.scatter(data[:, 0], data[:, 1], s=80)
+    selector = SelectFromCollection(ax, pts)
+
+    def accept(event):
+        if event.key == "enter":
+            print("Selected points:")
+            print(selector.xys[selector.ind])
+            selector.disconnect()
+            ax.set_title("")
+            fig.canvas.draw()
+
+    fig.canvas.mpl_connect("key_press_event", accept)
+    ax.set_title("Press enter to accept selected points.")
+
+    plt.show()
+
+# %%
+#
+# .. admonition:: References
+#
+#    The use of the following functions, methods, classes and modules is shown
+#    in this example:
+#
+#    - `matplotlib.widgets.LassoSelector`
+#    - `matplotlib.path.Path`
-- 
GitLab