From 48bd0e1a2b595150821658a70863207a05aba581 Mon Sep 17 00:00:00 2001 From: tatarize Date: Wed, 11 Nov 2020 04:02:10 -0800 Subject: [PATCH 1/9] Alternative Black/Gray Changed code to work with Python 3. Changed code to alternative black/grey lines with center-line Added version number. --- MaKe-stitch.py | 36 ++++++++++++++++++++++++++++-------- 1 file changed, 28 insertions(+), 8 deletions(-) diff --git a/MaKe-stitch.py b/MaKe-stitch.py index 2af0a5c..a24e7ce 100644 --- a/MaKe-stitch.py +++ b/MaKe-stitch.py @@ -14,6 +14,8 @@ # begin wxGlade: extracode # end wxGlade +MaKeStitchVersion = "0.1.0" + class StitchPanel(wx.Panel): def __init__(self, *args, **kwds): @@ -260,7 +262,7 @@ def get_nearest_point(self, position): click_point = (scene_x, scene_y) best_point = None best_index = None - best_distance = sys.maxint + best_distance = float('-inf') for i, stitch in enumerate(self.emb_pattern.stitches): distance = self.distance_sq(click_point, stitch) if best_point is None or distance < best_distance or ( @@ -284,15 +286,20 @@ def __do_layout(self): def perform_draw_grid(self, dc): if self.grid is None: self.build_grid() - dc.SetPen(wx.Pen(self.grid[0])) - dc.DrawLineList(self.grid[1]) + for g in self.grid: + dc.SetPen(wx.Pen(g[0])) + dc.DrawLineList(g[1]) def build_grid(self): scale = self.scale tran_x = self.translate_x tran_y = self.translate_y - lines = [] + black_lines = [] + grey_lines = [] + red_lines = [] + black = False for j in range(-14, 14 + 1): + black = not black x0 = 0 * 2.5 y0 = j * 2.5 x1 = 100 * 2.5 @@ -307,8 +314,16 @@ def build_grid(self): y0 *= scale x1 *= scale y1 *= scale - lines.append([x0, y0, x1, y1]) + if j == 0: + red_lines.append([x0, y0, x1, y1]) + else: + if black: + black_lines.append([x0, y0, x1, y1]) + else: + grey_lines.append([x0, y0, x1, y1]) + black = False for k in range(0, 100): + black = not black x0 = k * 2.5 y0 = -14 * 2.5 x1 = k * 2.5 @@ -323,8 +338,13 @@ def build_grid(self): y0 *= scale x1 *= scale y1 *= scale - lines.append([x0, y0, x1, y1]) - self.grid = ((0xFF, 0, 0), lines) + if black: + black_lines.append([x0, y0, x1, y1]) + else: + grey_lines.append([x0, y0, x1, y1]) + self.grid = [((0xFF, 0, 0), red_lines), + ((0x80, 0x80, 0x80), grey_lines), + ((0, 0, 0), black_lines)] def perform_draw(self, dc): dc.SetBackground(wx.Brush("White")) @@ -458,7 +478,7 @@ def __init__(self, *args, **kwds): def __set_properties(self): # begin wxGlade: Stitcher.__set_properties - self.SetTitle("MK Stitch") + self.SetTitle("MK Stitch v%s" % MaKeStitchVersion) # end wxGlade def __do_layout(self): From aed1f88a19ca0c2d1bffe42e2d2a8a69c70223db Mon Sep 17 00:00:00 2001 From: tatarize Date: Wed, 11 Nov 2020 06:09:45 -0800 Subject: [PATCH 2/9] Add in coordinates. Adds coordinates. --- MaKe-stitch.py | 27 +++++++++++++++++++++++++-- 1 file changed, 25 insertions(+), 2 deletions(-) diff --git a/MaKe-stitch.py b/MaKe-stitch.py index a24e7ce..f476244 100644 --- a/MaKe-stitch.py +++ b/MaKe-stitch.py @@ -34,6 +34,7 @@ def __init__(self, *args, **kwds): self.translate_y = 0 self.buffer = 0.1 self.grid = None + self.text_grid = None self.clicked_position = None self.drag_point = None @@ -232,6 +233,7 @@ def update_affine(self, width, height): self.translate_x = -min_x + (width * self.buffer) / 2 self.translate_y = -min_y + (height * self.buffer) / 2 self.grid = None + self.text_grid = None def get_pattern_point(self, position): px = position[0] @@ -289,17 +291,29 @@ def perform_draw_grid(self, dc): for g in self.grid: dc.SetPen(wx.Pen(g[0])) dc.DrawLineList(g[1]) + for t in self.text_grid: + font = wx.Font(6, wx.SWISS, wx.NORMAL, wx.BOLD) + dc.SetFont(font) + w, h = dc.GetTextExtent(t[0]) + if t[3] == 0: + dc.DrawText(t[0], wx.Point(t[1] -w, t[2]-h/2)) + elif t[3] == 1: + dc.DrawText(t[0], wx.Point(t[1] - w / 2, t[2]-h)) + else: + dc.DrawText(t[0], wx.Point(t[1] - w / 2, t[2])) def build_grid(self): scale = self.scale tran_x = self.translate_x tran_y = self.translate_y + text = [] black_lines = [] grey_lines = [] red_lines = [] black = False for j in range(-14, 14 + 1): black = not black + x0 = 0 * 2.5 y0 = j * 2.5 x1 = 100 * 2.5 @@ -314,6 +328,7 @@ def build_grid(self): y0 *= scale x1 *= scale y1 *= scale + text.append((str(j), x0, y0, 0)) if j == 0: red_lines.append([x0, y0, x1, y1]) else: @@ -338,6 +353,8 @@ def build_grid(self): y0 *= scale x1 *= scale y1 *= scale + text.append((str(k), x0, y0, 1)) + text.append((str(k), x1, y1, -1)) if black: black_lines.append([x0, y0, x1, y1]) else: @@ -345,6 +362,7 @@ def build_grid(self): self.grid = [((0xFF, 0, 0), red_lines), ((0x80, 0x80, 0x80), grey_lines), ((0, 0, 0), black_lines)] + self.text_grid = text def perform_draw(self, dc): dc.SetBackground(wx.Brush("White")) @@ -403,14 +421,19 @@ def perform_draw(self, dc): dc.DrawCircle((tran_x + stitch[0]) * scale, (tran_y + stitch[1]) * scale, scale * 3) if self.selected_point is not None: + font = wx.Font(14, wx.SWISS, wx.NORMAL, wx.BOLD) + dc.SetFont(font) mod_stitch = self.emb_pattern.stitches[self.selected_point] - name = self.name_dict[mod_stitch[2]] + " " + str(self.selected_point) + name = "%s %d (%g, %g)" % (self.name_dict[mod_stitch[2]], + int(self.selected_point), + float(mod_stitch[0] / 2.5), + float(mod_stitch[1] / 2.5)) dc.DrawText(name, 25, 25) dc.SetBrush(wx.Brush("Green")) dc.DrawCircle((tran_x + mod_stitch[0]) * scale, (tran_y + mod_stitch[1]) * scale, scale * 3) def on_paint(self, event): - dc = wx.BufferedPaintDC(self, self._Buffer) + wx.BufferedPaintDC(self, self._Buffer) def on_size(self, event): # The Buffer init is done here, to make sure the buffer is always From 61205ac66d4007f3b2e3fc5dddf2b31afdaae45c Mon Sep 17 00:00:00 2001 From: tatarize Date: Wed, 11 Nov 2020 08:52:56 -0800 Subject: [PATCH 3/9] Every 5 Horizontal --- MaKe-stitch.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/MaKe-stitch.py b/MaKe-stitch.py index f476244..b8ca007 100644 --- a/MaKe-stitch.py +++ b/MaKe-stitch.py @@ -353,8 +353,9 @@ def build_grid(self): y0 *= scale x1 *= scale y1 *= scale - text.append((str(k), x0, y0, 1)) - text.append((str(k), x1, y1, -1)) + if k % 5 == 0: + text.append((str(k), x0, y0, 1)) + text.append((str(k), x1, y1, -1)) if black: black_lines.append([x0, y0, x1, y1]) else: From e51479be4197a7b1446f3832a1fd3c41e4285b26 Mon Sep 17 00:00:00 2001 From: tatarize Date: Thu, 12 Nov 2020 09:01:43 -0800 Subject: [PATCH 4/9] 0.2.0 Made the grid shear pincushion. Corrections to some UI issues. --- MaKe-stitch.py | 150 +++++++++++++++++++++---------------------------- 1 file changed, 64 insertions(+), 86 deletions(-) diff --git a/MaKe-stitch.py b/MaKe-stitch.py index b8ca007..338e2f9 100644 --- a/MaKe-stitch.py +++ b/MaKe-stitch.py @@ -5,7 +5,6 @@ # import wx -import sys import pyembroidery # begin wxGlade: dependencies @@ -14,7 +13,10 @@ # begin wxGlade: extracode # end wxGlade -MaKeStitchVersion = "0.1.0" +MaKeStitchVersion = "0.2.0" +PMV_SCALE = 2.5 +PMV_CURVE = 75 + class StitchPanel(wx.Panel): def __init__(self, *args, **kwds): @@ -65,9 +67,9 @@ def on_mouse_move(self, event): if self.drag_point is None: return mod_stitch = self.emb_pattern.stitches[self.drag_point] - position = self.get_pattern_point(event.GetPosition()) - mod_stitch[0] = position[0] - mod_stitch[1] = position[1] + position = self.scene_location_to_grid_position(event.GetPosition()) + mod_stitch[0] = position[0] * PMV_SCALE + mod_stitch[1] = position[1] * PMV_SCALE self.update_drawing() def on_mouse_down(self, event): @@ -76,7 +78,7 @@ def on_mouse_down(self, event): return position = event.GetPosition() nearest = self.get_nearest_point(position) - if nearest[1] > 25: + if nearest[1] > 100: event.Skip() self.drag_point = None return @@ -97,11 +99,11 @@ def on_right_double_click(self, event): new_stitch = stitch[:] new_stitch2 = stitch[:] new_stitch3 = stitch[:] - position = self.get_pattern_point(self.clicked_position) - new_stitch[0] = position[0] - new_stitch[1] = position[1] - new_stitch3[0] = position[0] - new_stitch3[1] = position[1] + position = self.scene_location_to_grid_position(self.clicked_position) + new_stitch[0] = position[0] * PMV_SCALE + new_stitch[1] = position[1] * PMV_SCALE + new_stitch3[0] = position[0] * PMV_SCALE + new_stitch3[1] = position[1] * PMV_SCALE stitches.insert(self.selected_point + 1, new_stitch) stitches.insert(self.selected_point + 2, new_stitch2) stitches.insert(self.selected_point + 3, new_stitch3) @@ -113,9 +115,9 @@ def on_left_double_click(self, event): self.clicked_position = event.GetPosition() nearest = self.get_nearest_point(self.clicked_position) if nearest[0] is None: # No nearest node. Must have no nodes. - position = self.get_pattern_point(self.clicked_position) + position = self.scene_location_to_grid_position(self.clicked_position) stitches = self.emb_pattern.stitches - stitches.append([position[0], position[1], pyembroidery.STITCH]) + stitches.append([position[0]*PMV_SCALE, position[1]*PMV_SCALE, pyembroidery.STITCH]) self.selected_point = 0 self.update_affines() self.update_drawing() @@ -126,9 +128,9 @@ def on_left_double_click(self, event): stitches = self.emb_pattern.stitches stitch = stitches[self.selected_point] new_stitch = stitch[:] - position = self.get_pattern_point(self.clicked_position) - new_stitch[0] = position[0] - new_stitch[1] = position[1] + position = self.scene_location_to_grid_position(self.clicked_position) + new_stitch[0] = position[0]*PMV_SCALE + new_stitch[1] = position[1]*PMV_SCALE stitches.insert(self.selected_point + 1, new_stitch) self.selected_point += 1 self.update_affines() @@ -225,27 +227,38 @@ def update_affine(self, width, height): max_x = max(extends[2], 100) max_y = max(extends[3], 35) - embroidery_width = (max_x - min_x) + (width * self.buffer) - embroidery_height = (max_y - min_y) + (height * self.buffer) + embroidery_width = (max_x - min_x) #+ (width * self.buffer) + embroidery_height = (max_y - min_y) #+ (height * self.buffer) scale_x = float(width) / embroidery_width scale_y = float(height) / embroidery_height - self.scale = min(scale_x, scale_y) - self.translate_x = -min_x + (width * self.buffer) / 2 - self.translate_y = -min_y + (height * self.buffer) / 2 + self.scale = min(scale_x, scale_y) * 2 + self.translate_x = -min_x + self.translate_y = -(min_y/2) self.grid = None self.text_grid = None - def get_pattern_point(self, position): + def scene_location_to_grid_position(self, position): px = position[0] py = position[1] px /= self.scale py /= self.scale px -= self.translate_x py -= self.translate_y - px = round(px / 2.5) * 2.5 - py = round(py / 2.5) * 2.5 + px -= py * py / PMV_CURVE + px = round(px) + py = round(py) return px, py + def grid_position_to_scene_location(self, grid_x, grid_y): + x = grid_x + y = grid_y + x += grid_y * grid_y / PMV_CURVE + x += self.translate_x + y += self.translate_y + x *= self.scale + y *= self.scale + return x, y + @staticmethod def distance_sq(p0, p1): dx = p0[0] - p1[0] @@ -255,18 +268,12 @@ def distance_sq(p0, p1): return dx + dy def get_nearest_point(self, position): - scene_x = position[0] - scene_y = position[1] - scene_x /= self.scale - scene_y /= self.scale - scene_x -= self.translate_x - scene_y -= self.translate_y - click_point = (scene_x, scene_y) best_point = None best_index = None best_distance = float('-inf') for i, stitch in enumerate(self.emb_pattern.stitches): - distance = self.distance_sq(click_point, stitch) + s_x, s_y = self.grid_position_to_scene_location(stitch[0]/PMV_SCALE, stitch[1]/PMV_SCALE) + distance = self.distance_sq(position, (s_x, s_y)) if best_point is None or distance < best_distance or ( distance == best_distance and self.selected_point == i): best_point = stitch @@ -296,16 +303,13 @@ def perform_draw_grid(self, dc): dc.SetFont(font) w, h = dc.GetTextExtent(t[0]) if t[3] == 0: - dc.DrawText(t[0], wx.Point(t[1] -w, t[2]-h/2)) + dc.DrawText(t[0], wx.Point(t[1] - w, t[2]-h/2)) elif t[3] == 1: dc.DrawText(t[0], wx.Point(t[1] - w / 2, t[2]-h)) else: dc.DrawText(t[0], wx.Point(t[1] - w / 2, t[2])) def build_grid(self): - scale = self.scale - tran_x = self.translate_x - tran_y = self.translate_y text = [] black_lines = [] grey_lines = [] @@ -313,21 +317,8 @@ def build_grid(self): black = False for j in range(-14, 14 + 1): black = not black - - x0 = 0 * 2.5 - y0 = j * 2.5 - x1 = 100 * 2.5 - y1 = j * 2.5 - - x0 += tran_x - y0 += tran_y - x1 += tran_x - y1 += tran_y - - x0 *= scale - y0 *= scale - x1 *= scale - y1 *= scale + x0, y0 = self.grid_position_to_scene_location(0, j) + x1, y1 = self.grid_position_to_scene_location(100,j) text.append((str(j), x0, y0, 0)) if j == 0: red_lines.append([x0, y0, x1, y1]) @@ -337,29 +328,19 @@ def build_grid(self): else: grey_lines.append([x0, y0, x1, y1]) black = False - for k in range(0, 100): - black = not black - x0 = k * 2.5 - y0 = -14 * 2.5 - x1 = k * 2.5 - y1 = +14 * 2.5 - - x0 += tran_x - y0 += tran_y - x1 += tran_x - y1 += tran_y - - x0 *= scale - y0 *= scale - x1 *= scale - y1 *= scale - if k % 5 == 0: - text.append((str(k), x0, y0, 1)) - text.append((str(k), x1, y1, -1)) - if black: - black_lines.append([x0, y0, x1, y1]) - else: - grey_lines.append([x0, y0, x1, y1]) + for j in range(-14, 14): + for k in range(0, 100): + black = not black + x0, y0 = self.grid_position_to_scene_location(k, j) + x1, y1 = self.grid_position_to_scene_location(k, j+1) + if k % 5 == 0 and j == -14: + text.append((str(k), x0, y0, 1)) + if k % 5 == 0 and j == 13: + text.append((str(k), x1, y1, -1)) + if black: + black_lines.append([x0, y0, x1, y1]) + else: + grey_lines.append([x0, y0, x1, y1]) self.grid = [((0xFF, 0, 0), red_lines), ((0x80, 0x80, 0x80), grey_lines), ((0, 0, 0), black_lines)] @@ -372,22 +353,17 @@ def perform_draw(self, dc): if self.emb_pattern is None: return - scale = self.scale - tran_x = self.translate_x - tran_y = self.translate_y draw_data = [] for color in self.emb_pattern.get_as_colorblocks(): lines = [] last_x = None last_y = None for i, stitch in enumerate(color[0]): - current_x = stitch[0] + tran_x - current_y = stitch[1] + tran_y + current_x, current_y = self.grid_position_to_scene_location(stitch[0]/PMV_SCALE, stitch[1]/PMV_SCALE) if last_x is not None: - lines.append([last_x * scale, last_y * scale, current_x * scale, current_y * scale]) + lines.append([last_x, last_y, current_x, current_y]) last_x = current_x last_y = current_y - thread = color[1] draw_data.append(((0, 0, 0), lines)) current_stitch = self.current_stitch @@ -419,7 +395,8 @@ def perform_draw(self, dc): dc.SetBrush(wx.Brush("Blue")) dc.GetPen().SetWidth(1) for stitch in self.emb_pattern.stitches: - dc.DrawCircle((tran_x + stitch[0]) * scale, (tran_y + stitch[1]) * scale, scale * 3) + current_x, current_y = self.grid_position_to_scene_location(stitch[0]/PMV_SCALE, stitch[1]/PMV_SCALE) + dc.DrawCircle(current_x, current_y, 10) if self.selected_point is not None: font = wx.Font(14, wx.SWISS, wx.NORMAL, wx.BOLD) @@ -427,11 +404,12 @@ def perform_draw(self, dc): mod_stitch = self.emb_pattern.stitches[self.selected_point] name = "%s %d (%g, %g)" % (self.name_dict[mod_stitch[2]], int(self.selected_point), - float(mod_stitch[0] / 2.5), - float(mod_stitch[1] / 2.5)) - dc.DrawText(name, 25, 25) + float(mod_stitch[0]) / PMV_SCALE, + float(mod_stitch[1]) / PMV_SCALE) + dc.DrawText(name, 0, 0) dc.SetBrush(wx.Brush("Green")) - dc.DrawCircle((tran_x + mod_stitch[0]) * scale, (tran_y + mod_stitch[1]) * scale, scale * 3) + m_x, m_y = self.grid_position_to_scene_location(mod_stitch[0]/PMV_SCALE, mod_stitch[1]/PMV_SCALE) + dc.DrawCircle(m_x, m_y, 10) def on_paint(self, event): wx.BufferedPaintDC(self, self._Buffer) From 1545c57dfb4be193a389ce5638a8215d482c242e Mon Sep 17 00:00:00 2001 From: tatarize Date: Thu, 12 Nov 2020 09:09:22 -0800 Subject: [PATCH 5/9] Minor syntax issue. --- MaKe-stitch.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/MaKe-stitch.py b/MaKe-stitch.py index 338e2f9..d690581 100644 --- a/MaKe-stitch.py +++ b/MaKe-stitch.py @@ -495,7 +495,7 @@ def on_menu_import(self, event): files = "" for format in pyembroidery.supported_formats(): try: - if format["reader"] is not None and format["category"] is "stitch": + if format["reader"] is not None and format["category"] == "stitch": files += "*." + format["extension"] + ";" except KeyError: pass @@ -511,7 +511,7 @@ def on_menu_export(self, event): files = "" for format in pyembroidery.supported_formats(): try: - if format["writer"] is not None and format["category"] is "stitch": + if format["writer"] is not None and format["category"] == "stitch": files += format["description"] + "(*." + format["extension"] + ")|*." + format[ "extension"] + "|" except KeyError: From 41c8e13f15d684fc12be6c78a462cc91f51e8ea9 Mon Sep 17 00:00:00 2001 From: tatarize Date: Fri, 13 Nov 2020 11:55:12 -0800 Subject: [PATCH 6/9] Tweaks Buffer Edge increased. Font increased. Central line color changed. --- MaKe-stitch.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/MaKe-stitch.py b/MaKe-stitch.py index d690581..6912f78 100644 --- a/MaKe-stitch.py +++ b/MaKe-stitch.py @@ -232,7 +232,7 @@ def update_affine(self, width, height): scale_x = float(width) / embroidery_width scale_y = float(height) / embroidery_height self.scale = min(scale_x, scale_y) * 2 - self.translate_x = -min_x + self.translate_x = -min_x + 3 self.translate_y = -(min_y/2) self.grid = None self.text_grid = None @@ -299,7 +299,7 @@ def perform_draw_grid(self, dc): dc.SetPen(wx.Pen(g[0])) dc.DrawLineList(g[1]) for t in self.text_grid: - font = wx.Font(6, wx.SWISS, wx.NORMAL, wx.BOLD) + font = wx.Font(10, wx.SWISS, wx.NORMAL, wx.BOLD) dc.SetFont(font) w, h = dc.GetTextExtent(t[0]) if t[3] == 0: @@ -313,7 +313,7 @@ def build_grid(self): text = [] black_lines = [] grey_lines = [] - red_lines = [] + magenta_lines = [] black = False for j in range(-14, 14 + 1): black = not black @@ -321,7 +321,7 @@ def build_grid(self): x1, y1 = self.grid_position_to_scene_location(100,j) text.append((str(j), x0, y0, 0)) if j == 0: - red_lines.append([x0, y0, x1, y1]) + magenta_lines.append([x0, y0, x1, y1]) else: if black: black_lines.append([x0, y0, x1, y1]) @@ -341,7 +341,7 @@ def build_grid(self): black_lines.append([x0, y0, x1, y1]) else: grey_lines.append([x0, y0, x1, y1]) - self.grid = [((0xFF, 0, 0), red_lines), + self.grid = [((0xFF, 0, 0xFF), magenta_lines), ((0x80, 0x80, 0x80), grey_lines), ((0, 0, 0), black_lines)] self.text_grid = text From 561e826309d70fc1b025082cc8f11beded57f5f7 Mon Sep 17 00:00:00 2001 From: tatarize Date: Fri, 13 Nov 2020 12:25:49 -0800 Subject: [PATCH 7/9] Add Icon --- MaKe-stitch.py | 32 +++++++++++++++++++++++++++++++- 1 file changed, 31 insertions(+), 1 deletion(-) diff --git a/MaKe-stitch.py b/MaKe-stitch.py index 6912f78..0fd344a 100644 --- a/MaKe-stitch.py +++ b/MaKe-stitch.py @@ -6,7 +6,34 @@ import wx import pyembroidery - +from wx.lib.embeddedimage import PyEmbeddedImage + +makestitch_icon = PyEmbeddedImage( + b'iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAAAAXNSR0IArs4c6QAAAARnQU1B' + b'AACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAASwSURBVGhD1ZlLKLxfGMcf5J5bbNDE' + b'ROR+CVkgkVuSXMJOZGGjJBY2VoqSjYWikJBQLsl9IcREpsYlC5cyKMJC4xaG83+fx/n9/uln' + b'hmHM+/rU5JznnGne73ue5znPOYBJkOHhYQYAzNramnl6elIbPwEBAay5uZnPeovkhGg0Gnpo' + b'tVrNLa88Pz+z9vZ2JpfLabyuro6PvCI5IZ2dnUwmk/He++zv75OYqKgobmHMXDBICicnJzg7' + b'O+O99/Hx8cEFgPX1dSgqKiKbGaqhloQwMzODl5cX+vsROOfi4kKaQuLi4sDW1hbm5ua4RTel' + b'paUgxI/gaBJFeEamUCh4Tzc4x97eXnrB/oe+vj4S8xFarZbmSdK1DAFjycLCAkTPWl1dXSCk' + b'UQpa/Li6ukJhYSEsLS3xGfpZW1sDKysr8WJkdHSUXAI/NTU1bHFxkSmVStbb28syMjL+jtXX' + b'1/NvvE9xcTETUrA4MdLY2EgPiaWIPoaGhpidnR3Nrays5Nb/ubu7o7GTkxPTC7m/v6cfv76+' + b'5paPUalUzNvbm76XmprK5ufnqQLAflVVFc0xuZDa2loWExPDe4Zxfn7OCgoKmBBLzN3dnY2P' + b'j/MRZvqslZycDJGRkdDU1MQtxsHkWQvf20+8O5MLCQoKgt3dXd4zIuhapmRsbIyC1NiIsrPj' + b'xvf4+AiWlpbc8n1E2dnxPNHQ0MB7RoLWxcRg2jT2T4siBEEhAwMDvPd9RBPS2tpq1FURtYzH' + b'oBdKDSgpKeGWV46Pj2FnZwdOT09BKGWgoqKCj+hGVCEzMzOQnp6Oy0J9fPCFhQUSmJKSQpcL' + b'Dw8PkJWVReN6QSFigjVTTk4OW15eZh0dHezw8JDsgiDW09ND7c8g+glxdXUVtra2wNPTE4Rz' + b'CNmE8h6enp7ogPVZRD0hCuU4uZNCoYC8vDyydXd3g7W1tUEiCFoXEcBDE5Yrf8BHwZMhHpK+' + b'giiu1d/fD3K5HGJjY8mtNjY26B4rPz8fjo6OQCaT8Zmfx6RChKMpTE1Nkev4+vpSfNjY2EB8' + b'fDx4eHhAW1sblJeX/81ihmAyIfjWt7e3wcHBAW5ubsDZ2RlCQkL+efsY8NPT0waL+XEhmH0m' + b'Jibo/gnBO6i0tDRaCV2Eh4eTcEMe7UezFvq/ENTUxo3N398fsrOz9YpAVCoVlJWV0cbY0tLC' + b'rfr5kRXBVRAqXHoQbLu4uNBObSibm5sQFhZGbXQ3XEldGF3I3t4elRaYhW5vb+lm3cvLi49+' + b'jebmZqiurgZzc/PXm/d3MKqQyclJyky4CkLpAYmJiXzEOGCyCA4O5r23GEWIUB/R7oxpFUXg' + b'lY+bmxsfNQ3fFjI7OwtXV1ckwM/PD6Kjo/mIafmyEPw/H9ZKeIGAvpuZmUkrIhZfEiKU3KBW' + b'q6mNPhsaGkptMTFIiEajoTSo1WoppaamptIGJwU+LUSpVNLxE10pISGBaiMp8aEQDGKh3KY9' + b'ITAwULRg/gi9Qg4ODuhfYI6OjpCUlESFnlTRKQRjAU9veGYICAjgVunyj5DLy0sYGRmha01c' + b'hd/CGyErKyt05Z+bm0vu9JsgIahlcHCQduaIiAg+9LswE3ZohquAx83fC8B/QI+w8nkB9vAA' + b'AAAASUVORK5CYII=') # begin wxGlade: dependencies # end wxGlade @@ -481,6 +508,9 @@ def __init__(self, *args, **kwds): def __set_properties(self): # begin wxGlade: Stitcher.__set_properties self.SetTitle("MK Stitch v%s" % MaKeStitchVersion) + _icon = wx.NullIcon + _icon.CopyFromBitmap(makestitch_icon.GetBitmap()) + self.SetIcon(_icon) # end wxGlade def __do_layout(self): From d87321b6643806ff5a4fcef3c6e4f14d190a1107 Mon Sep 17 00:00:00 2001 From: tatarize Date: Sat, 14 Nov 2020 08:23:52 -0800 Subject: [PATCH 8/9] Icon hardcopies. --- makestitch.ico | Bin 0 -> 21622 bytes makestitch.png | Bin 0 -> 1307 bytes 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 makestitch.ico create mode 100644 makestitch.png diff --git a/makestitch.ico b/makestitch.ico new file mode 100644 index 0000000000000000000000000000000000000000..14e23ed161a3e35bdbd9fe8c56fffee8ad270161 GIT binary patch literal 21622 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 literal 0 HcmV?d00001 diff --git a/makestitch.png b/makestitch.png new file mode 100644 index 0000000000000000000000000000000000000000..04396699f6a0bc6c8a13d9b77c2e8ecaa2bf3a90 GIT binary patch literal 1307 zcmV+$1?2jPP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!~g&e!~vBn4jTXf1h7d&K~!i%)tO5u zyk8i{ALO1}Y|z9+=T*6LdVWT7#Hdcy~jfJ9+kWenkeIdj|rp6@;mog~A zLgN;O^M9Ym`ThRsXNF6P_V#urm&<9quC9)cydpUvot>RbCX?~r`|R)U zlbEQeC~jfQTrfxqCnqO3J3HgO_wn)Z!3BWz^>rvJDk7U1s-c#IFf%iQmzNj%`w=+j z;^IP@LgM1$z}D6l=H}+OMK`6Tr69zQ;Aj#>ct)mBD0ojdILF@JUV6d)hrYf(67vyS zt(N9V(zOf$W68q80z}VRU0q!uq)`f5{J6ThLSbPcEG;eZ8TwgUTLUXAEAe7vbaa$l z0zWl1HEeNlktvl**4x|5GBPs$j@8%K^KZOQad9ydQm{BN(%9HY4~eCSK8A*dn4O&+ z&8@7gFM%RTa%K zxscl0S{4%%!+VBtetymh3JRDIOU&KfosEx=^ATqHtd*Rc43UwM(A3n#Eyls*SqtCW zPrN&m3keDeg5BL+-ZLWTTBc-dY>a}`*od;T81<9b0MVuCeOPEHP6 zUS4J$9UbiO@R00+AlB2-hTmQheCh*g$-IJa~9`KwDcIl$V$P z&0>aNG9mcZx3{;!!NCD;Zf?NY*%?AYLjHOC81U26(*}$AaUqy}CMG86{t3Z5sI;^+ zS_xf*hli7JLmur%vljZl5Y*Jhjm_WRAF{Kv^@>1LDixHKmC?r7($d1M`uUL+!Br3{ zTzU{}ySTW}PHiZgo0||87DjD!H(W_w7+uKT-X4_}n1ya{Z|P>;%gc+8evRhlW~i>N z26J=s*PHiuFshKr$w|sgxC%n)0f~u;e8f0lvIq_i=DoKVMTk%z(e8|C6-D5ckDHqt zA2ki%7BV|K3s+ZHB*4$l52B-^`G{%xvJm_~AJ$5Efq=f7nVCr|A{Ji~B9z>qR;#Iv zJ{uYuN^LPQNQg$Gp){z~YAL0rrl!&cCj~w&M5$EL@e^GsAt8ZkBPsEr5Da3W+@?Jt zFfdTGVEzcbLJkfN=wD!tj*gI<hJ|RM9B}V*yWZcxDI)2;f%f@{f?q%S#v;8KG-U zT!r7l8zCzzD|F?bo107S^qU|dsAX_)kap&XhzLIPyD$@WXojnR$Iaghz<)rGu=05U R_V54z002ovPDHLkV1l?KYo-7I literal 0 HcmV?d00001 From 2df23bde0fa92bb846a08585513913b9260ac9c7 Mon Sep 17 00:00:00 2001 From: tatarize Date: Sat, 14 Nov 2020 11:39:25 -0800 Subject: [PATCH 9/9] Update README.md --- README.md | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 23f66ca..1eb15e4 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,16 @@ # MaKe-stitch + +MaKe stitch is an open source stitch creator software that creates, reopens, edits and saves .pmv stitch files. These are common used in a series of brother sewing machines with customizable stitches. Other formats are currently unknown. + wxWidget stitch creator making pmv stitch files from scratch. +You can download a compiled copy of MaKe-stitch for windows in Releases. + +https://github.com/EmbroidePy/MaKe-stitch/releases + +Python +--- + Requires pyembroidery `pip install pyembroidery` @@ -9,10 +19,10 @@ Requires wxPython: `pip install wxPython` +Instructions --- - * MaKe-stitch.py GUI - for making .pmv stitch files (or other ones, but there aren't any other ones). - * ![make-stitch](https://user-images.githubusercontent.com/3302478/44017845-9e4cb12e-9e8e-11e8-9849-f9b9ba75d516.png) + * ![mkstitch](https://user-images.githubusercontent.com/3302478/99155566-e4644780-266d-11eb-9234-244d25132cee.png) * See tutorial video: https://youtu.be/HCiFgb9-JHQ * Left Double-Click inserts a stitch. * Middle Double-Click inserts a stitch. Note: Since Left Click selects a node, double clicking a node selects then inserts at that exact location which duplicates the node. Using middle click means it will allow double-backing on nodes without selecting them. @@ -25,3 +35,9 @@ Requires wxPython: * Delete button deletes selected node. * Right Arrow or 'd' moves to the next node in the list. * Left Arrow or 'a' moves to the next node in the list. ('a' & 'd' are WASD keys). + +Thanks +--- + +* Mark Kressin. +* PlantLily.