meerk40t 0.9.7020__py2.py3-none-any.whl → 0.9.7030__py2.py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (39) hide show
  1. meerk40t/core/cutcode/cutcode.py +1 -1
  2. meerk40t/core/cutplan.py +70 -2
  3. meerk40t/core/elements/element_treeops.py +9 -7
  4. meerk40t/core/elements/grid.py +8 -1
  5. meerk40t/core/elements/offset_mk.py +2 -1
  6. meerk40t/core/elements/shapes.py +378 -259
  7. meerk40t/core/node/node.py +6 -3
  8. meerk40t/core/planner.py +23 -0
  9. meerk40t/core/undos.py +1 -1
  10. meerk40t/core/wordlist.py +1 -0
  11. meerk40t/dxf/dxf_io.py +6 -0
  12. meerk40t/extra/mk_potrace.py +1959 -0
  13. meerk40t/extra/param_functions.py +1 -1
  14. meerk40t/extra/potrace.py +14 -10
  15. meerk40t/grbl/interpreter.py +1 -1
  16. meerk40t/gui/about.py +3 -5
  17. meerk40t/gui/basicops.py +3 -3
  18. meerk40t/gui/choicepropertypanel.py +1 -4
  19. meerk40t/gui/gui_mixins.py +4 -1
  20. meerk40t/gui/spoolerpanel.py +6 -9
  21. meerk40t/gui/themes.py +7 -1
  22. meerk40t/gui/wxmeerk40t.py +26 -0
  23. meerk40t/gui/wxmscene.py +93 -0
  24. meerk40t/image/imagetools.py +1 -1
  25. meerk40t/kernel/kernel.py +10 -4
  26. meerk40t/kernel/settings.py +2 -0
  27. meerk40t/lihuiyu/device.py +9 -3
  28. meerk40t/main.py +22 -5
  29. meerk40t/ruida/gui/gui.py +6 -6
  30. meerk40t/ruida/gui/ruidaoperationproperties.py +1 -10
  31. meerk40t/ruida/rdjob.py +3 -3
  32. meerk40t/tools/geomstr.py +88 -0
  33. {meerk40t-0.9.7020.dist-info → meerk40t-0.9.7030.dist-info}/METADATA +1 -1
  34. {meerk40t-0.9.7020.dist-info → meerk40t-0.9.7030.dist-info}/RECORD +39 -38
  35. {meerk40t-0.9.7020.dist-info → meerk40t-0.9.7030.dist-info}/WHEEL +1 -1
  36. {meerk40t-0.9.7020.dist-info → meerk40t-0.9.7030.dist-info}/LICENSE +0 -0
  37. {meerk40t-0.9.7020.dist-info → meerk40t-0.9.7030.dist-info}/entry_points.txt +0 -0
  38. {meerk40t-0.9.7020.dist-info → meerk40t-0.9.7030.dist-info}/top_level.txt +0 -0
  39. {meerk40t-0.9.7020.dist-info → meerk40t-0.9.7030.dist-info}/zip-safe +0 -0
@@ -499,9 +499,12 @@ class Node:
499
499
  node_copy._parent = copied_parent
500
500
  copied_parent._children.append(node_copy)
501
501
  if node.type == "reference":
502
- original_referenced, copied_referenced = links[id(node.node)]
503
- node_copy.node = copied_referenced
504
- copied_referenced._references.append(node_copy)
502
+ try:
503
+ original_referenced, copied_referenced = links[id(node.node)]
504
+ node_copy.node = copied_referenced
505
+ copied_referenced._references.append(node_copy)
506
+ except KeyError:
507
+ pass
505
508
 
506
509
  def _validate_tree(self):
507
510
  for c in self._children:
meerk40t/core/planner.py CHANGED
@@ -181,6 +181,29 @@ def plugin(kernel, lifecycle=None):
181
181
  "section": "_20_Reducing Movements",
182
182
  "conditional": (context, "opt_reduce_travel"),
183
183
  },
184
+ {
185
+ "attr": "opt_stitching",
186
+ "object": context,
187
+ "default": False,
188
+ "type": bool,
189
+ "label": _("Combine path segments"),
190
+ "tip":
191
+ _("Stitch segments together that are very close (ideally having joint start/end points).") + "\n" +
192
+ _("Only inside a single cut/engrave operation."),
193
+ "page": "Optimisations",
194
+ "section": "_05_Stitching",
195
+ },
196
+ {
197
+ "attr": "opt_stitch_tolerance",
198
+ "object": context,
199
+ "default": "0",
200
+ "type": Length,
201
+ "label": _("Tolerance"),
202
+ "tip": _("Tolerance to decide whether two path segments should be joined."),
203
+ "page": "Optimisations",
204
+ "section": "_05_Stitching",
205
+ "conditional": (context, "opt_stitching"),
206
+ },
184
207
  {
185
208
  "attr": "opt_inner_first",
186
209
  "object": context,
meerk40t/core/undos.py CHANGED
@@ -81,7 +81,7 @@ class Undo:
81
81
  elif self._undo_index < len(self._undo_stack) and self._undo_stack[self._undo_index].hold:
82
82
  # Just add another one on top of it
83
83
  self._undo_index += 1
84
- elif self._undo_stack[self._undo_index].message == self.LAST_STATE:
84
+ elif self._undo_index < len(self._undo_stack) and self._undo_stack[self._undo_index].message == self.LAST_STATE:
85
85
  # Will be overwritten
86
86
  pass
87
87
  elif self._undo_index < len(self._undo_stack) - 1 and self._undo_stack[self._undo_index + 1].message != self.LAST_STATE:
meerk40t/core/wordlist.py CHANGED
@@ -394,6 +394,7 @@ class Wordlist:
394
394
 
395
395
  def load_csv_file(self, filename, force_header=None):
396
396
  self.empty_csv()
397
+ ct = 0
397
398
  headers = []
398
399
  decoder = EncodingDetectFile()
399
400
  result = decoder.load(filename)
meerk40t/dxf/dxf_io.py CHANGED
@@ -251,6 +251,8 @@ class DXFProcessor:
251
251
  elif dxftype == "ELLIPSE":
252
252
  center = (entity.dxf.center) # Center point of the ellipse (3D, but we'll use x,y)
253
253
  major_axis = entity.dxf.major_axis # Vector representing the major axis
254
+ minor_axis = entity.minor_axis # Vector representing the minor axis
255
+ # They should have the same sign, if they are different then they are mirrored?!
254
256
  ratio = entity.dxf.ratio # Ratio of minor to major axis
255
257
  start_angle, end_angle = get_angles(entity)
256
258
 
@@ -262,6 +264,10 @@ class DXFProcessor:
262
264
  major_axis[0] ** 2 + major_axis[1] ** 2
263
265
  ) # Length of the major axis (in XY plane)
264
266
  b = a * ratio # Length of the minor axis
267
+ # Different signs? Inverse
268
+ if major_axis[0] * minor_axis[1] < 0:
269
+ b *= -1
270
+
265
271
  # geom = Geomstr.ellipse(
266
272
  # start_t=start_angle,
267
273
  # end_t=end_angle,