meerk40t 0.9.7910__py2.py3-none-any.whl → 0.9.7940__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 (40) hide show
  1. meerk40t/balormk/controller.py +46 -13
  2. meerk40t/balormk/livelightjob.py +34 -7
  3. meerk40t/core/bindalias.py +12 -4
  4. meerk40t/core/cutcode/plotcut.py +2 -1
  5. meerk40t/core/elements/branches.py +35 -14
  6. meerk40t/core/elements/clipboard.py +10 -12
  7. meerk40t/core/elements/elements.py +23 -0
  8. meerk40t/core/elements/files.py +1 -1
  9. meerk40t/core/elements/geometry.py +48 -14
  10. meerk40t/core/elements/grid.py +56 -24
  11. meerk40t/core/elements/offset_clpr.py +2 -4
  12. meerk40t/core/elements/placements.py +17 -22
  13. meerk40t/core/elements/render.py +30 -11
  14. meerk40t/core/elements/shapes.py +206 -126
  15. meerk40t/core/node/effect_hatch.py +8 -7
  16. meerk40t/core/node/effect_warp.py +7 -2
  17. meerk40t/core/node/effect_wobble.py +8 -2
  18. meerk40t/core/node/op_image.py +79 -25
  19. meerk40t/core/spoolers.py +1 -1
  20. meerk40t/core/units.py +4 -0
  21. meerk40t/grbl/emulator.py +10 -8
  22. meerk40t/grbl/gcodejob.py +11 -3
  23. meerk40t/grbl/plugin.py +10 -1
  24. meerk40t/gui/help_assets/help_assets.py +402 -43
  25. meerk40t/gui/plugin.py +12 -0
  26. meerk40t/gui/tips.py +78 -41
  27. meerk40t/gui/wxmmain.py +99 -4
  28. meerk40t/lihuiyu/driver.py +46 -9
  29. meerk40t/main.py +1 -1
  30. meerk40t/ruida/emulator.py +13 -10
  31. meerk40t/ruida/plugin.py +5 -0
  32. meerk40t/ruida/rdjob.py +5 -5
  33. meerk40t/tools/geomstr.py +15 -0
  34. {meerk40t-0.9.7910.dist-info → meerk40t-0.9.7940.dist-info}/METADATA +1 -1
  35. {meerk40t-0.9.7910.dist-info → meerk40t-0.9.7940.dist-info}/RECORD +40 -40
  36. {meerk40t-0.9.7910.dist-info → meerk40t-0.9.7940.dist-info}/LICENSE +0 -0
  37. {meerk40t-0.9.7910.dist-info → meerk40t-0.9.7940.dist-info}/WHEEL +0 -0
  38. {meerk40t-0.9.7910.dist-info → meerk40t-0.9.7940.dist-info}/entry_points.txt +0 -0
  39. {meerk40t-0.9.7910.dist-info → meerk40t-0.9.7940.dist-info}/top_level.txt +0 -0
  40. {meerk40t-0.9.7910.dist-info → meerk40t-0.9.7940.dist-info}/zip-safe +0 -0
meerk40t/gui/wxmmain.py CHANGED
@@ -449,11 +449,94 @@ class MeerK40t(MWindow):
449
449
  self.autosave = Autosaver(self.context)
450
450
  self.handover = GUIThread(self.context)
451
451
  kernel = self.context.kernel
452
- if hasattr(kernel.args, "maximized") and kernel.args.maximized:
452
+
453
+ maxit = hasattr(kernel.args, "maximized") and kernel.args.maximized
454
+ minit = hasattr(kernel.args, "minimized") and kernel.args.minimized
455
+ remember = self.context.setting(bool, "remember_main_pos", True)
456
+ if remember:
457
+ self.RestoreWindowState(force_maximized=maxit, force_minimized=minit)
458
+ else:
459
+ self.CenterOnScreen()
460
+ if maxit:
461
+ self.Maximize()
462
+ elif minit:
463
+ self.Iconize()
464
+ self.Bind(wx.EVT_ACTIVATE, self.on_active)
465
+
466
+
467
+ def SaveWindowState(self):
468
+ # Save window position, size, and state
469
+ pos = self.GetPosition()
470
+ size = self.GetSize()
471
+ maximized = self.IsMaximized()
472
+ minimized = self.IsIconized()
473
+ # Store in settings (replace with your config system)
474
+ self.context.mainwin_pos = (pos.x, pos.y)
475
+ self.context.mainwin_size = (size.x, size.y)
476
+ self.context.mainwin_maximized = maximized
477
+ self.context.mainwin_minimized = minimized
478
+
479
+ def RestoreWindowState(self, default_pos=None, default_size=None, force_minimized=False, force_maximized=False):
480
+ # Restore window position, size, and state
481
+ pos = self.context.mainwin_pos
482
+ size = self.context.mainwin_size
483
+ maximized = self.context.mainwin_maximized or force_maximized
484
+ minimized = self.context.mainwin_minimized or force_minimized
485
+ # Get all screens
486
+ display_count = wx.Display.GetCount()
487
+ screens = [wx.Display(i).GetGeometry() for i in range(display_count)]
488
+ def in_any_screen(x, y):
489
+ for rect in screens:
490
+ if rect.Contains(wx.Point(x, y)):
491
+ return True
492
+ return False
493
+ # Default position and size: use first screen's geometry
494
+ if screens:
495
+ first_screen = screens[0]
496
+ if default_pos is None:
497
+ default_pos = wx.Point(first_screen.x, first_screen.y)
498
+ if default_size is None:
499
+ default_size = wx.Size(first_screen.width, first_screen.height)
500
+ else:
501
+ if default_pos is None:
502
+ default_pos = wx.Point(0, 0)
503
+ if default_size is None:
504
+ default_size = wx.Size(1024, 768)
505
+ # Validate position and size to ensure the window is mostly visible on a screen
506
+ def rect_mostly_in_screen(x, y, w, h, threshold=0.5):
507
+ # Returns True if at least `threshold` fraction of the window area is on any screen
508
+ window_rect = wx.Rect(x, y, w, h)
509
+ for screen in wx.Display.GetCount() and [wx.Display(i).GetGeometry() for i in range(wx.Display.GetCount())] or []:
510
+ intersection = window_rect.Intersect(screen)
511
+ if intersection.IsEmpty():
512
+ continue
513
+ visible_area = intersection.GetWidth() * intersection.GetHeight()
514
+ total_area = w * h
515
+ if total_area == 0:
516
+ continue
517
+ if visible_area / total_area >= threshold:
518
+ return True
519
+ return False
520
+
521
+ # Determine intended position and size
522
+ intended_pos = pos if pos else (default_pos.x, default_pos.y)
523
+ intended_size = size if size else (default_size.GetWidth(), default_size.GetHeight())
524
+
525
+ if rect_mostly_in_screen(intended_pos[0], intended_pos[1], intended_size[0], intended_size[1]):
526
+ self.SetPosition(wx.Point(intended_pos[0], intended_pos[1]))
527
+ else:
528
+ self.SetPosition(default_pos)
529
+
530
+ # Validate size
531
+ if size:
532
+ self.SetSize(wx.Size(size[0], size[1]))
533
+ else:
534
+ self.SetSize(default_size)
535
+ # Restore state
536
+ if maximized:
453
537
  self.Maximize()
454
- if hasattr(kernel.args, "minimized") and kernel.args.minimized:
538
+ elif minimized:
455
539
  self.Iconize()
456
- self.Bind(wx.EVT_ACTIVATE, self.on_active)
457
540
 
458
541
  def on_active(self, event):
459
542
  if event.GetActive():
@@ -1060,6 +1143,11 @@ class MeerK40t(MWindow):
1060
1143
  context.setting(bool, "enable_sel_rotate", True)
1061
1144
  context.setting(bool, "enable_sel_skew", False)
1062
1145
  context.setting(int, "zoom_margin", 4) # 4%
1146
+ context.setting(tuple, "mainwin_pos", None)
1147
+ context.setting(tuple, "mainwin_size", None)
1148
+ context.setting(bool, "mainwin_maximized", False)
1149
+ context.setting(bool, "mainwin_minimized", False)
1150
+
1063
1151
  # Standard-Icon-Sizes
1064
1152
  # default, factor 1 - leave as is
1065
1153
  # small = factor 2/3, min_size = 32
@@ -4836,11 +4924,18 @@ class MeerK40t(MWindow):
4836
4924
  return True
4837
4925
  if answer == wx.CANCEL:
4838
4926
  return True # VETO
4927
+ for job in self.context.device.spooler.queue:
4928
+ if job.is_running():
4929
+ print(f"{job.label} was still running, stopping...")
4930
+ try:
4931
+ job.stop()
4932
+ except Exception as e:
4933
+ print(f"Error stopping job {job.label}: {e}")
4839
4934
  return False
4840
4935
 
4841
4936
  def window_close(self):
4842
4937
  context = self.context
4843
-
4938
+ self.SaveWindowState()
4844
4939
  context.aui = self._mgr.SavePerspective()
4845
4940
  self.on_panes_closed()
4846
4941
  self._mgr.UnInit()
@@ -12,12 +12,15 @@ import time
12
12
 
13
13
  from meerk40t.tools.zinglplotter import ZinglPlotter
14
14
 
15
+ from ..core.cutcode.cubiccut import CubicCut
15
16
  from ..core.cutcode.dwellcut import DwellCut
16
17
  from ..core.cutcode.gotocut import GotoCut
17
18
  from ..core.cutcode.homecut import HomeCut
18
19
  from ..core.cutcode.inputcut import InputCut
20
+ from ..core.cutcode.linecut import LineCut
19
21
  from ..core.cutcode.outputcut import OutputCut
20
22
  from ..core.cutcode.plotcut import PlotCut
23
+ from ..core.cutcode.quadcut import QuadCut
21
24
  from ..core.cutcode.waitcut import WaitCut
22
25
  from ..core.parameters import Parameters
23
26
  from ..core.plotplanner import PlotPlanner, grouped
@@ -719,12 +722,39 @@ class LihuiyuDriver(Parameters):
719
722
  """
720
723
  for segment_type, start, c1, c2, end, sets in geom.as_lines():
721
724
  if segment_type == "line":
725
+ plot = LineCut(
726
+ start,
727
+ end,
728
+ settings={
729
+ "power": sets.get("power", 1000.0),
730
+ "speed": sets.get("speed", self.speed),
731
+ },
732
+ )
722
733
  self.plot_planner.push(plot)
723
734
  elif segment_type == "end":
724
735
  pass
725
736
  elif segment_type == "quad":
737
+ plot = QuadCut(
738
+ start,
739
+ c1,
740
+ end,
741
+ settings={
742
+ "power": sets.get("power", 1000.0),
743
+ "speed": sets.get("speed", self.speed),
744
+ },
745
+ )
726
746
  self.plot_planner.push(plot)
727
747
  elif segment_type == "cubic":
748
+ plot = CubicCut(
749
+ start,
750
+ c1,
751
+ c2,
752
+ end,
753
+ settings={
754
+ "power": sets.get("power", 1000.0),
755
+ "speed": sets.get("speed", self.speed),
756
+ },
757
+ )
728
758
  self.plot_planner.push(plot)
729
759
  elif segment_type == "arc":
730
760
  interp = 50
@@ -733,7 +763,15 @@ class LihuiyuDriver(Parameters):
733
763
  g.arc(start, c1, end)
734
764
  last = start
735
765
  for p in list(g.as_equal_interpolated_points(distance=interp))[1:]:
736
- self.plot_planner.push((last, p))
766
+ plot = LineCut(
767
+ last,
768
+ p,
769
+ settings={
770
+ "power": sets.get("power", 1000.0),
771
+ "speed": sets.get("speed", self.speed),
772
+ },
773
+ )
774
+ self.plot_planner.push(plot)
737
775
  last = p
738
776
  elif segment_type == "point":
739
777
  function = sets.get("function")
@@ -968,7 +1006,10 @@ class LihuiyuDriver(Parameters):
968
1006
  sx = self.native_x
969
1007
  sy = self.native_y
970
1008
  # print("x: %s, y: %s -- c: %s, %s" % (str(x), str(y), str(sx), str(sy)))
971
- on = int(on)
1009
+ if self.state == DRIVER_STATE_RASTER and on >= 0.3 and on < 1:
1010
+ on = 1
1011
+ else:
1012
+ on = int(on)
972
1013
  if on > 1:
973
1014
  # Special Command.
974
1015
  if on & PLOT_FINISH: # Plot planner is ending.
@@ -976,8 +1017,7 @@ class LihuiyuDriver(Parameters):
976
1017
  break
977
1018
  elif on & PLOT_SETTING: # Plot planner settings have changed.
978
1019
  p_set = Parameters(self.plot_planner.settings)
979
- if p_set.power != self.power:
980
- self._set_power(p_set.power)
1020
+ self._set_power(p_set.power)
981
1021
  if (
982
1022
  p_set.raster_step_x != self.raster_step_x
983
1023
  or p_set.raster_step_y != self.raster_step_y
@@ -1068,11 +1108,8 @@ class LihuiyuDriver(Parameters):
1068
1108
  self.state = DRIVER_STATE_MODECHANGE
1069
1109
 
1070
1110
  def _set_power(self, power=1000.0):
1071
- self.power = power
1072
- if self.power > 1000.0:
1073
- self.power = 1000.0
1074
- if self.power <= 0:
1075
- self.power = 0.0
1111
+ self.power = min(1000, max(0, power))
1112
+ self.settings["power"] = self.power
1076
1113
  if self.service.supports_pwm:
1077
1114
  self.send_at_pwm_code(self.power)
1078
1115
 
meerk40t/main.py CHANGED
@@ -11,7 +11,7 @@ import os.path
11
11
  import sys
12
12
 
13
13
  APPLICATION_NAME = "MeerK40t"
14
- APPLICATION_VERSION = "0.9.7910"
14
+ APPLICATION_VERSION = "0.9.7940"
15
15
 
16
16
  if not getattr(sys, "frozen", False):
17
17
  # If .git directory does not exist we are running from a package like pypi
@@ -161,6 +161,15 @@ class RuidaEmulator:
161
161
  if self.channel:
162
162
  self.channel(f"Process Failure: {str(bytes(array).hex())}")
163
163
 
164
+ def _home_device(self):
165
+ if hasattr(self.device.driver, "physical_home"):
166
+ # If the driver has a physical home, we can use that.
167
+ self.device.driver.physical_home()
168
+ elif hasattr(self.device.driver, "home"):
169
+ self.device.driver.home()
170
+ else:
171
+ self.device.driver.move_abs(0, 0)
172
+
164
173
  def _channel(self, text):
165
174
  if self.channel:
166
175
  self.channel(text)
@@ -357,7 +366,7 @@ class RuidaEmulator:
357
366
  self._describe(array, "Stop Process")
358
367
  try:
359
368
  self.device.driver.reset()
360
- self.device.driver.home()
369
+ self._home_device()
361
370
  except AttributeError:
362
371
  pass
363
372
  return True
@@ -383,10 +392,7 @@ class RuidaEmulator:
383
392
  return True
384
393
  elif array[1] == 0x2A:
385
394
  self._describe(array, "Home XY")
386
- try:
387
- self.device.driver.home()
388
- except AttributeError:
389
- pass
395
+ self._home_device()
390
396
  return True
391
397
  elif array[1] == 0x2E:
392
398
  self._describe(array, "FocusZ")
@@ -628,7 +634,7 @@ class RuidaEmulator:
628
634
  x = abscoord(array[3:8])
629
635
  y = abscoord(array[8:13])
630
636
  self._describe(array, f"Move {param} XY ({x}μm, {y}μm)")
631
- if "Origin" in param:
637
+ if x != 0 or y != 0:
632
638
  try:
633
639
  self.device.driver.move_abs(
634
640
  f"{x / 1000}mm",
@@ -637,10 +643,7 @@ class RuidaEmulator:
637
643
  except AttributeError:
638
644
  pass
639
645
  else:
640
- try:
641
- self.device.driver.home()
642
- except AttributeError:
643
- pass
646
+ self._home_device()
644
647
  elif array[1] == 0x30 or array[1] == 0x70:
645
648
  x = abscoord(array[3:8])
646
649
  y = abscoord(array[8:13])
meerk40t/ruida/plugin.py CHANGED
@@ -93,6 +93,7 @@ def plugin(kernel, lifecycle=None):
93
93
  jogless=False,
94
94
  man_in_the_middle=None,
95
95
  bridge=False,
96
+ remainder=None,
96
97
  **kwargs,
97
98
  ):
98
99
  """
@@ -101,10 +102,14 @@ def plugin(kernel, lifecycle=None):
101
102
  controls that type of device. This would then be sent to the device in a
102
103
  somewhat agnostic fashion.
103
104
  """
105
+ if remainder and remainder.lower() in ("stop", "quit"):
106
+ quit = True
107
+
104
108
  root = kernel.root
105
109
  ruidacontrol = root.device.lookup("ruidacontrol")
106
110
  if ruidacontrol is None:
107
111
  if quit:
112
+ channel(_("No control instance to stop."))
108
113
  return
109
114
  ruidacontrol = RuidaControl(root)
110
115
  root.device.register("ruidacontrol", ruidacontrol)
meerk40t/ruida/rdjob.py CHANGED
@@ -663,6 +663,7 @@ class RDJob:
663
663
  self.x = x
664
664
  self.y = y
665
665
  ox, oy = matrix.transform_point([self.x, self.y])
666
+ # print (f"Will generate plotcut with power: {self.power}")
666
667
  self.plotcut = PlotCut(
667
668
  settings={
668
669
  "speed": self.speed,
@@ -672,9 +673,8 @@ class RDJob:
672
673
  )
673
674
  self.plotcut.plot_init(int(round(ox)), int(round(oy)))
674
675
  tx, ty = matrix.transform_point([x, y])
675
- self.plotcut.plot_append(
676
- int(round(tx)), int(round(ty)), power * (self.power / 1000.0)
677
- )
676
+ # power is not a fraction of self.power, but just denoting laser on or off.
677
+ self.plotcut.plot_append(int(round(tx)), int(round(ty)), power)
678
678
  self.x = x
679
679
  self.y = y
680
680
 
@@ -1276,7 +1276,7 @@ class RDJob:
1276
1276
  else:
1277
1277
  desc = "Unknown Command!"
1278
1278
  if self.channel:
1279
- prefix = f"{offset:06x}" if offset is not None else ''
1279
+ prefix = f"{offset:06x}" if offset is not None else ""
1280
1280
  self.channel(f"{prefix}-**-> {str(bytes(array).hex())}\t({desc})")
1281
1281
 
1282
1282
  def unswizzle(self, data):
@@ -1422,7 +1422,7 @@ class RDJob:
1422
1422
  self.laser_device_0()
1423
1423
  if air == 1:
1424
1424
  self.air_assist_on()
1425
- elif air==2:
1425
+ elif air == 2:
1426
1426
  self.air_assist_off()
1427
1427
  self.speed_laser_1(speed)
1428
1428
  self.laser_on_delay(0)
meerk40t/tools/geomstr.py CHANGED
@@ -658,6 +658,14 @@ class Pattern:
658
658
  current = 0j
659
659
 
660
660
  for entry in pattern(a, b, *args, **kwargs):
661
+ if (
662
+ not isinstance(entry, (list, tuple))
663
+ or len(entry) < 3
664
+ or np.isnan(entry[1])
665
+ or np.isnan(entry[2])
666
+ ):
667
+ # If the entry is not a list or tuple, or if the first element is NaN, we just skip it.
668
+ continue
661
669
  key = entry[0].lower()
662
670
  if key == "m":
663
671
  current = complex(entry[1], entry[2])
@@ -715,6 +723,13 @@ class Pattern:
715
723
  @param y1:
716
724
  @return:
717
725
  """
726
+ try:
727
+ if np.isnan(x0) or np.isnan(y0) or np.isnan(x1) or np.isnan(y1):
728
+ # If any of the coordinates are NaN, we cannot generate a pattern.
729
+ return Geomstr()
730
+ except TypeError:
731
+ # If the coordinates are not numbers, we cannot generate a pattern.
732
+ return Geomstr()
718
733
  cw = self.cell_width
719
734
  ch = self.cell_height
720
735
  px = self.padding_x
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: meerk40t
3
- Version: 0.9.7910
3
+ Version: 0.9.7940
4
4
  Summary: MeerK40t LaserCutter Software
5
5
  Home-page: https://github.com/meerk40t/meerk40t
6
6
  Author: Tatarize
@@ -3,17 +3,17 @@ meerk40t/constants.py,sha256=iTcOFJF_MLo3Ugms_A5kyz5MM0Ln9ZlZweMepW6Peto,203
3
3
  meerk40t/external_plugins.py,sha256=OQ2475hUr9KJDmrIip4zyf-851igd5n6IIMrsAvnA-U,2126
4
4
  meerk40t/external_plugins_build.py,sha256=8pwgdxSpsQMdiXJAX9kXQUc0-Dw9AMBgBfcLbTLAKfI,857
5
5
  meerk40t/internal_plugins.py,sha256=lMslowIIev1t1mf_VTewNwNgFLn1W2xTCqa9Je00Bjw,3455
6
- meerk40t/main.py,sha256=WiDB7SieTQSd7qC9e--qybAYmlN0t5BA6mLsg2aUyYo,7572
6
+ meerk40t/main.py,sha256=OV93S9IrOENthfVlWJvH8P3heBVTpoEJyzdm-3vbW9Y,7572
7
7
  meerk40t/svgelements.py,sha256=OlHkjm9kDgx6ARGJ3M2Fyd2kMi06kWJizEt8zzV5xX8,333052
8
8
  meerk40t/balormk/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
9
9
  meerk40t/balormk/balor_params.py,sha256=S-kwGaHfBtXWDgtZlaudvQN_HkXPqlQyp8xVh5iSxW0,4290
10
10
  meerk40t/balormk/clone_loader.py,sha256=L2aMhCgvbKynqXcX3bVnvEtrL9EN26PBXNABUuEAJlU,20815
11
- meerk40t/balormk/controller.py,sha256=_JQdbnenHBxsD3rHddX7VYCHqboulj1QzO3z2_ItKZM,48958
11
+ meerk40t/balormk/controller.py,sha256=cOrSTNuu9z8l2AfiHr8j4q5ATv9Na72U2seWEf6CJss,50229
12
12
  meerk40t/balormk/cylindermod.py,sha256=uHcH9gDJffr9hoLwkFp0frFeBRsUiGg9MJZjMx3F0z0,2223
13
13
  meerk40t/balormk/device.py,sha256=LjKr8lvACsKpb57RsGPo7m38IElJAotajMMzWlmqzgU,33735
14
14
  meerk40t/balormk/driver.py,sha256=iFgQ6EoSTvCNDjJGqJTIeRmTw-HE1x7gRO47U0fjb7U,27909
15
15
  meerk40t/balormk/galvo_commands.py,sha256=b09BinrPWwo4KYTMVdUFGtk_jGl1wEwngfSGwaqsK7g,42584
16
- meerk40t/balormk/livelightjob.py,sha256=LjbnfRcOPXv3p2YNv-ydL4gAlGreQRHA0NQgQ-ekAqY,16920
16
+ meerk40t/balormk/livelightjob.py,sha256=sios52dTkUnE_z6Zek0L0WYbVS-h9lKD5HcugIVk2Fk,17962
17
17
  meerk40t/balormk/mock_connection.py,sha256=FCaInibW3wkGAL8GTqsB1As4Yfv0u33k6soTpC6hjcs,4295
18
18
  meerk40t/balormk/plugin.py,sha256=NhZ0oGJM_msmradpn2QkBgjukPO4_r_-aonLNTZcaVM,4887
19
19
  meerk40t/balormk/usb_connection.py,sha256=A6xgGKfjH95xdwJi2ytsKVj-GtsvhFeItkjykVRrgfI,11374
@@ -35,7 +35,7 @@ meerk40t/ch341/libusb.py,sha256=48NYQsgO7j-Sh8itRVLmC56bjjTyXIsY0lAjdBKV9yQ,2137
35
35
  meerk40t/ch341/mock.py,sha256=aaBXkC1KPRtyXweCi2LiyS5vDysNBVwZBk7Dw6ppymc,5497
36
36
  meerk40t/ch341/windriver.py,sha256=nEXAA0P-F7c-HL11kSJWUj1ZEelCPZKAqDEM-vDQ7Oo,5192
37
37
  meerk40t/core/__init__.py,sha256=hHHkA6qmojSU-5L1uDC_4A-EYfT38nbiYclZqKDdktI,14
38
- meerk40t/core/bindalias.py,sha256=YdKaVxpjidzUKiRDM0h93V5FXblEPgi4fdfdZpy2LE4,18282
38
+ meerk40t/core/bindalias.py,sha256=ZeCdsIwr9vz1aVjZNcNrLvuIF8qOV9Jm1mZ9c153HEI,18516
39
39
  meerk40t/core/core.py,sha256=plyFMXXzGjNRRt6WeBuha5g7g0STaWd2I8ZAk-pDQGE,865
40
40
  meerk40t/core/cutplan.py,sha256=D-_ibSfsCWeI9QFoH_4QKAzmyGXNpL0s3lLuFJZrtFw,75668
41
41
  meerk40t/core/drivers.py,sha256=uSI5quDubayhmgsQ5GqHlmCiDIgJXwQ16tL0TfgwvPI,9654
@@ -46,11 +46,11 @@ meerk40t/core/parameters.py,sha256=cJYN0KAmvP8Iho2JdDucP2Q68vlj0nRI6aVK-Qdr3PE,1
46
46
  meerk40t/core/planner.py,sha256=CG7ygD96hWUZdGYPqpMR1qvevB929oIs0QbYnv55Syg,36711
47
47
  meerk40t/core/plotplanner.py,sha256=p_YsaSoPAdvCL1aAsY2q8sfHwCMwRPP-SG9ebcTnZbo,23177
48
48
  meerk40t/core/space.py,sha256=0Epmr5hYHkw1shU1OiEt_tK9eq7BRc8XWhRn7tQ6Po8,4002
49
- meerk40t/core/spoolers.py,sha256=vvbxxYSoACPc_KTAFPWtcp-PIRM55YxtXgLnHI8r13I,25089
49
+ meerk40t/core/spoolers.py,sha256=PMG-BR78EfroPTnjh--fYbfh_-j1yx5dT0qzX_mpRuQ,25091
50
50
  meerk40t/core/svg_io.py,sha256=aBIHEGiAp5q3xTPFumA0kfhFb0Yd9Wp-uIU1zOsMS1Y,70520
51
51
  meerk40t/core/treeop.py,sha256=_L8Vv5Gp2JPxFzOZxsU17XiVFVrusmzLOHo5QtCH5CA,15190
52
52
  meerk40t/core/undos.py,sha256=VAvR4RZXp-jQC498JdqXYqyy2g28e3e6P7rnIfdH50A,11049
53
- meerk40t/core/units.py,sha256=LmuvS1kX4FKOWVPEX5TA0wf_9GlAsWzLGwacSIwXefc,23187
53
+ meerk40t/core/units.py,sha256=82L3aJGPqd_eIPkuo28dH_Y9O03y2k3BHWmoqooysps,23352
54
54
  meerk40t/core/view.py,sha256=4y5DI0b9C0FTSQvMo-5Sf2c-Qvc3zZjwUM2zLqr5UI0,12641
55
55
  meerk40t/core/webhelp.py,sha256=2IuysYKzjQnIObombd1tTQmEqsdvpumh-xBTyr3Z4iM,2807
56
56
  meerk40t/core/wordlist.py,sha256=Rta262IKuSdNwYliLhgNUI0lcR2nOlvtMH10zKvD7eo,18325
@@ -65,28 +65,28 @@ meerk40t/core/cutcode/homecut.py,sha256=fsYY2MPU68hY5WScM2atnRhWcKtReb9ePzB_L0uC
65
65
  meerk40t/core/cutcode/inputcut.py,sha256=-xyCRLjxT-CoKIU0LfITWmwnKzW75HGd_yDhKUZK8WM,742
66
66
  meerk40t/core/cutcode/linecut.py,sha256=QRXfSTa0iAQFKBFhBO2qXGt5vF_LZMeP-BGa0QX35TA,919
67
67
  meerk40t/core/cutcode/outputcut.py,sha256=xiYWfGw0L17Fc6QHXIgjbHfNGnHeMlW_VPIIZy9KBr0,752
68
- meerk40t/core/cutcode/plotcut.py,sha256=XfbLvdZBrudLbFgKKXlNawkv3mi2dXgcaY41GmDL__s,10655
68
+ meerk40t/core/cutcode/plotcut.py,sha256=FUufzVnT_k2X5Ni3sh78oRUJW-0ePb1Nu9ISDqieJBw,10737
69
69
  meerk40t/core/cutcode/quadcut.py,sha256=zMZ_KRv0fWdXwrZgPTidZ6UqqzTV9hP63POivxXmVIk,1592
70
70
  meerk40t/core/cutcode/rastercut.py,sha256=azBJhFJS1zhRhjUUvB553HHKDpts_eDijKdXerUKwTg,4793
71
71
  meerk40t/core/cutcode/waitcut.py,sha256=E5dOO5-LBUVBcP9_qClPkChYBNhQ8ElwucWqEkTlgRE,866
72
72
  meerk40t/core/elements/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
73
73
  meerk40t/core/elements/align.py,sha256=r68DOSr9DgkwbT8BvjoPGxtgJv52Hyz0YDMIFFIgMkA,30177
74
- meerk40t/core/elements/branches.py,sha256=7PobTrwghL82na_F5-9FqZimXaeYG6WyIVfMSCfvU6I,66546
75
- meerk40t/core/elements/clipboard.py,sha256=z0i4uM2zwPQAaZMDcWdN4fhfau4UXVOmLhKlLImPb34,8034
74
+ meerk40t/core/elements/branches.py,sha256=TH6VXV9rtwCnOqP_RrtDW_YPhWfhAlA4HeYT6KsF0L0,67382
75
+ meerk40t/core/elements/clipboard.py,sha256=RXS3nYKmDmonYDIyYQTSaQTy19ezTLYXelwJ2dciILo,8190
76
76
  meerk40t/core/elements/element_treeops.py,sha256=D2PzNY9NbMU_Qp9tVvs9G5IGdiSHruI1-Ik91nrYm6M,174699
77
77
  meerk40t/core/elements/element_types.py,sha256=MvHz7cYG1s4wAB215ZlEd1i4zanc2vv8iOxWzU0J4ys,2334
78
- meerk40t/core/elements/elements.py,sha256=kQitRHgubjz7qEs_y2DguBPiiQR3ojI8UFZukGB0iaw,181055
79
- meerk40t/core/elements/files.py,sha256=cuZPrRmvLqdhQ0Nft4Bm4yDQjI44mMR08AMEHSYAfOQ,4548
80
- meerk40t/core/elements/geometry.py,sha256=E11qolLrg_r2XhTOkGKASS8Lx9tj2n9qxOJ7ptkFkQY,17605
81
- meerk40t/core/elements/grid.py,sha256=UP7KX_q2SVhnDy3JYtDHXoXrKwTtEV6kwHQjBHGdmLQ,18987
78
+ meerk40t/core/elements/elements.py,sha256=pkzMO1xUunhr1RvbMPR5QHJY-1JzsImAWJL4NdZ38hE,181797
79
+ meerk40t/core/elements/files.py,sha256=Cki0DEXjJA0vj18QTFJ-9QX4UY_gj7aM-uBiueAvkUU,4569
80
+ meerk40t/core/elements/geometry.py,sha256=tvIz3Rbr-yhwwcJjlAL8zQqhfHlDvi7CJ9M6NYtQ5vU,19464
81
+ meerk40t/core/elements/grid.py,sha256=ub3AV44gFjqz3RecaQl-nQWpPgQZaaCY08D29toBApk,19639
82
82
  meerk40t/core/elements/materials.py,sha256=FvypUyQ7hVf3fP8_cyLKYFGra9c-4rRgnUF1F_hd6Es,5873
83
83
  meerk40t/core/elements/notes.py,sha256=tReyNmqe5YwC2IntMJZ8f0qvKw0oH0RU5He34TKfgt4,1781
84
- meerk40t/core/elements/offset_clpr.py,sha256=_3eRy-iesY6LXVdxz2f1F0hb8T0z5UfcFnxMEcdXyrA,35544
84
+ meerk40t/core/elements/offset_clpr.py,sha256=XZ7fA9nUdbhBUdJUD6qkyDirmBLOs7-DBJM44yWOhWI,35562
85
85
  meerk40t/core/elements/offset_mk.py,sha256=LUjGbVgvPsHyy5T6AsB65Icok-SYl-GBJWyigdcRgfQ,37917
86
86
  meerk40t/core/elements/penbox.py,sha256=kW162SViOSMxJukBHafQa1i0H0qfgPhiPWbw3NrB8fs,12837
87
- meerk40t/core/elements/placements.py,sha256=r_b_8Net4_stPm0yPVKjyzA3WELXGZs6Susff5Y7QkI,10680
88
- meerk40t/core/elements/render.py,sha256=F-qsV7ii8Zh2xBMO7-orZKptkCbFPXbfahdt2qFXwTE,27382
89
- meerk40t/core/elements/shapes.py,sha256=rjWCojJii6qZ36f4evDZ9QhuH9Y--1a58W8VrsUsg0I,105549
87
+ meerk40t/core/elements/placements.py,sha256=4h45hmeSBhhxd6Bi_peq_-dNmUmHHXCFAY9df5UP3gs,10901
88
+ meerk40t/core/elements/render.py,sha256=x9wU_cGjXPWOjcTl_X4dtAIAJEs4YzIJpJPrH2TGriQ,27806
89
+ meerk40t/core/elements/shapes.py,sha256=ZVbjYzVm_H4eP3uHuyYe0UApU0n8zAV6_9i_10lc0ZM,111454
90
90
  meerk40t/core/elements/testcases.py,sha256=4Oqq2ruNh_E71LmxHkSUC93Bo6_A8GPDamw73xJolHk,3758
91
91
  meerk40t/core/elements/trace.py,sha256=OT2hWFKAVflHJS1BHu12zoUyohFpIFzvEvlfGArgZug,20427
92
92
  meerk40t/core/elements/tree_commands.py,sha256=KkB1h3FSNNpflBEsJfLEhFGDR3q2IsJHCSGyXYS4BQE,14612
@@ -99,9 +99,9 @@ meerk40t/core/node/branch_elems.py,sha256=pe1baIxNpkGXX0Uoes6PTStq_leGuTTYDoRc7Y
99
99
  meerk40t/core/node/branch_ops.py,sha256=dtezh9pPRe0Pch3aRdnNTdcCNiblRyP_RTk0ZzQejtY,1425
100
100
  meerk40t/core/node/branch_regmark.py,sha256=-wo8J69dVind2-DNTDQrZZBiANLeWXP7E4Z1l7VcnfY,1501
101
101
  meerk40t/core/node/cutnode.py,sha256=8bN-oa0ZQzyQ4li9-bnP1U4m_EOKxqKJms8ltnDsweU,839
102
- meerk40t/core/node/effect_hatch.py,sha256=hlJQvkFRt22JRjF0ILFcsqyZC7jvWGl8MzWs0TGq0Ng,12297
103
- meerk40t/core/node/effect_warp.py,sha256=9I-kTHsbnkFe6FEgmecjXPcx4R66hRFx5oawDPhPowo,13659
104
- meerk40t/core/node/effect_wobble.py,sha256=UDXT-MtgckwHw9kEbHky-sBawNVWOS7-rjMo1HTrEJs,14716
102
+ meerk40t/core/node/effect_hatch.py,sha256=1EXbiIhttbhZwLUov__gnFoAQA4XuetJynZ7-sEH0sk,12389
103
+ meerk40t/core/node/effect_warp.py,sha256=C_FNnJrZ8yAOFzFfXWMJoXDa-ljRIaNUqQ3rrPPZVxc,13797
104
+ meerk40t/core/node/effect_wobble.py,sha256=Q4sRz8dKFhmZfgojtPJi9R6rvLYA8-R1tOKchhF8h1M,14855
105
105
  meerk40t/core/node/elem_ellipse.py,sha256=NJTNqe3F95qxLlGUNR-WUp1Ulr7mswjbtiIztNIwVWo,14429
106
106
  meerk40t/core/node/elem_image.py,sha256=SfpBG-gl9dR4JAghsoJctTnNdEnWMZwwUXu96iIKywY,43878
107
107
  meerk40t/core/node/elem_line.py,sha256=wAMqCl8PGOCCk4NwzDLdlPyGHe4TybyvbJ8nLshv0Fc,12777
@@ -121,7 +121,7 @@ meerk40t/core/node/nutils.py,sha256=YfET5o-9Q-2f-8TNTdk-xruSDwpnzD4rhRBcCZKvhyI,
121
121
  meerk40t/core/node/op_cut.py,sha256=j-ZXhcrIlr2Z6Bi8Dra9QldXSbhoEhXPvSPTRaM0Yk8,17875
122
122
  meerk40t/core/node/op_dots.py,sha256=OfoQdOjEGh1RV8J0t-V7Rd3nAr0tO3-aT-FG3dRcHHQ,11570
123
123
  meerk40t/core/node/op_engrave.py,sha256=dczEX1oGQEOB8rNP_Y1DOD65BgljAXBQJa26xLCo4uc,15873
124
- meerk40t/core/node/op_image.py,sha256=HoV8Dz5IbLIFiWsv5XuKW1TR_D5zd0l6qAZ0q-fYLNY,32578
124
+ meerk40t/core/node/op_image.py,sha256=qh0_F-Il8HGj2XjHQBY57-m4pAMLm8iMfa53wp_vyfk,33564
125
125
  meerk40t/core/node/op_raster.py,sha256=-iAWKvhuefZozaJRySXvtzjQhw9bbCMsDTlH1bNHyGU,32433
126
126
  meerk40t/core/node/place_current.py,sha256=YbMwOZP3pCeINlKLIvxihCuon1WGFlo8TyDtqo0Lojo,1216
127
127
  meerk40t/core/node/place_point.py,sha256=XEA3yGejiwuGUt2H1IbNoTUX2Pfdg2_qBAGRAE9IMKE,11439
@@ -179,12 +179,12 @@ meerk40t/grbl/control.py,sha256=WiWMOzXOvmIu1EWHHsGYN0o2sg5Pe33svWsfbRjuCPg,2622
179
179
  meerk40t/grbl/controller.py,sha256=zxQ733MFzgEssaQ1NlxPyAqzqf3fLH39evDxVjyMHK4,42040
180
180
  meerk40t/grbl/device.py,sha256=C30K5_9uwKjy9mrc6TYBM2gKW1Xc3lvvQJcSnNQPbo4,44216
181
181
  meerk40t/grbl/driver.py,sha256=npde5mUwUkP3ZdCrnwx3TdF_O5F0LF6XbRXLHNFIYY4,33286
182
- meerk40t/grbl/emulator.py,sha256=_rn0v5m0ZXHpXtLYKnr8OOYYc1juo3RUkF8ut1ZaQ38,21778
183
- meerk40t/grbl/gcodejob.py,sha256=YZRlhA6_W6rVEyBHUUiQTLK6SWQfKkXeDqmWgElegjA,29238
182
+ meerk40t/grbl/emulator.py,sha256=tTBipjjzH6VGRamyHG_paQqIbJQxAIed9t__Sr8l1No,21910
183
+ meerk40t/grbl/gcodejob.py,sha256=lkxlmUE8-aTcZxYt7XbUzXct2cR0MZacr1iBqWMmEcU,29644
184
184
  meerk40t/grbl/interpreter.py,sha256=jzUess5Ywxj_O9pkZL3gAWdRmBiGvRetRWt9SDC39sY,1569
185
185
  meerk40t/grbl/loader.py,sha256=UbXfTCJdkRbQBrEvlKcrZ2cfGiz8NJC8heyIOGYpyqo,596
186
186
  meerk40t/grbl/mock_connection.py,sha256=p-J8u1znNdNJ7olprZF-A5Ki9Kd_5Wls_oHH_85aVv4,1797
187
- meerk40t/grbl/plugin.py,sha256=OxcBvDgstoPBN8BdFgP3lvg1AdEdhUkABEncW7eb0do,10574
187
+ meerk40t/grbl/plugin.py,sha256=nbZ4T9lj8K6SZco2eAvbS9jqUyvS3KGgu1tXyASa_U4,10856
188
188
  meerk40t/grbl/serial_connection.py,sha256=n0Uqvx_4K3KNpPWpvveRUF19uQ1gFDSVQ2-TFTfaCus,3188
189
189
  meerk40t/grbl/tcp_connection.py,sha256=Wlr2CXGBCiedfEuxArgLqPLpO9ybaYzk-WEqt93nAvQ,2741
190
190
  meerk40t/grbl/ws_connection.py,sha256=Vr2EqJvtgrEHPIJPpb5-FO7gOz1H5o6Qto5T0se_iz8,4028
@@ -227,7 +227,7 @@ meerk40t/gui/navigationpanels.py,sha256=N6GD-AkFUagIoNKQi7AKbskJs7Hx75-_3xMjUBv0
227
227
  meerk40t/gui/notes.py,sha256=UNuXa0V0qj7tYvWbTnFr_plkRziRANhgqJXDIx89OUY,4573
228
228
  meerk40t/gui/opassignment.py,sha256=b6UCXZboOVsnmymTrZ1ycn7sryF98EwrIhXizpyIWFQ,14584
229
229
  meerk40t/gui/operation_info.py,sha256=Y5zyMOHPRQdT06gQ7WUeLSJgoCJsp5D5mhlufb_VxvQ,11129
230
- meerk40t/gui/plugin.py,sha256=6PUx5GPEgOojwofMrHovx74TJYh9cqqd27btnVD000Y,19579
230
+ meerk40t/gui/plugin.py,sha256=N0Kn3emZegEAxx_qThsb0F11HWKrNb1ZHbpZwxBDknw,20010
231
231
  meerk40t/gui/position.py,sha256=9wvNKuJrM5c-5l-4R7B2ZFXJtc7Q0KLlyST70ZuFdjI,27387
232
232
  meerk40t/gui/preferences.py,sha256=mD-bYAW3gLkDv9z_r8UjxfNVI6FhRr9XwiVpilelBIU,30840
233
233
  meerk40t/gui/ribbon.py,sha256=HYLiAhdnL9VTjLazBNlmlz2CEuH8sxFEP3jSd-HOObs,90472
@@ -236,18 +236,18 @@ meerk40t/gui/simulation.py,sha256=mzkWkb8QDgY3CSkaq9FvGRxkD4vdgFWeeDsM3Ubdv5k,96
236
236
  meerk40t/gui/snapoptions.py,sha256=Vd1PbMWyWSCXeRIOqc12ksx_lUZyNZzV-g9uJ23LcsA,8404
237
237
  meerk40t/gui/spoolerpanel.py,sha256=gu3ncSRMo2GEJyHZzepXEG93sv9ct0v6un8hke1k2iI,47203
238
238
  meerk40t/gui/themes.py,sha256=jVt5Km7if0IVV1MnpGvtvMlbvRqpO_DQzLLen_QzsXs,8299
239
- meerk40t/gui/tips.py,sha256=gJhKbNA7UKeJXgfTC3UYjAX8OHfcXjb0Ew6XwM2BOwo,22132
239
+ meerk40t/gui/tips.py,sha256=y0FUqMYTW8JXvI7wE7Iy3K3uQwuWfJmL24wif3NgcD4,23460
240
240
  meerk40t/gui/usbconnect.py,sha256=1kznvNlXlT14NCev1PngYFmvmTKXLGxoti94FuoWF28,3018
241
241
  meerk40t/gui/wordlisteditor.py,sha256=PHuz9wEkyGtK2IuoRTZvI1xHJ_rC6p6kEmUnLFQZlxI,36955
242
242
  meerk40t/gui/wxmeerk40t.py,sha256=VlIn5N2vxt6a9rEUd-2XgX67pHwo20kJI-J-XcGXKFo,55540
243
- meerk40t/gui/wxmmain.py,sha256=LQ6k_lMtYn7FKGHCAzmoj_IHFSZaqxRs8p1Lfb783TE,214759
243
+ meerk40t/gui/wxmmain.py,sha256=SGJXSmQB70Ixy1oZxUXXSXiMGuwIX-TmKq4ENIo-b7M,218917
244
244
  meerk40t/gui/wxmribbon.py,sha256=-qiWL0c2fNfl6d-bwHF_PROKy3i34aTs9ujCaw37tYU,61708
245
245
  meerk40t/gui/wxmscene.py,sha256=KVx8DMjWwWd1HidaldYKChhYTlaSz5QzvGm-dFPyzYU,71657
246
246
  meerk40t/gui/wxmtree.py,sha256=_guVz39SxL7xQ_OoX7U6OvqrQ9eSbXnPzlI40G03VMc,93430
247
247
  meerk40t/gui/wxutils.py,sha256=zydAiHhpQZJIqoTP-8Lj00XajuMYmiAACieJHKfq6os,68424
248
248
  meerk40t/gui/zmatrix.py,sha256=kNK4RQ9F9AFW32Gow4u2ZjLdmQXMPBhhv9DEhMU7utI,2705
249
249
  meerk40t/gui/help_assets/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
250
- meerk40t/gui/help_assets/help_assets.py,sha256=611_dH6Sa3ZE8nh8q6WzU_ERHH7JLqRLo-jTswcR0C8,28488
250
+ meerk40t/gui/help_assets/help_assets.py,sha256=7K79w6oAuSjXGLixKXB48BjJEvBiC_fkrR4wBekg0y8,59771
251
251
  meerk40t/gui/propertypanels/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
252
252
  meerk40t/gui/propertypanels/attributes.py,sha256=p9hWJIOl5MNLCTyf3ZfyN2L5HRf0ILoNp990c2HXFTw,54392
253
253
  meerk40t/gui/propertypanels/blobproperty.py,sha256=dFKFM-OGyQszf6BZlyhWh_KPgwQr1c4tGnuJcuWuXu0,3529
@@ -359,7 +359,7 @@ meerk40t/kernel/states.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
359
359
  meerk40t/lihuiyu/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
360
360
  meerk40t/lihuiyu/controller.py,sha256=VGnoWfs13JMUNXg7t2nzGW3OIt27UYXkzFoT1Lv1yWs,32973
361
361
  meerk40t/lihuiyu/device.py,sha256=lhNQ__lnLhARhuCDUwl54vDtzOXSrSArk7tFblkMy7Y,49802
362
- meerk40t/lihuiyu/driver.py,sha256=Fv7vjlMLBK_WSppyHQAAq7Y10V4dJERSeGfLtK57zJA,50049
362
+ meerk40t/lihuiyu/driver.py,sha256=2wEeXuVupNMA1WXrG1USnTpO9_K9zeYL__9VIIfTmak,51405
363
363
  meerk40t/lihuiyu/interpreter.py,sha256=BzzWGREVHnmqO1E3hRWA5vLdwqE59oiDo7ePqtP1RZo,1639
364
364
  meerk40t/lihuiyu/laserspeed.py,sha256=GkcUlOVjkSwtybhosS05Wd7tVo8EM0dIfqpIPf2hta0,16351
365
365
  meerk40t/lihuiyu/loader.py,sha256=zwOINnkqfVlVjY-MQIBpF6BtpiTRGO7EzaaH-oRUOAY,2618
@@ -412,12 +412,12 @@ meerk40t/ruida/control.py,sha256=ir9uddn_hZ-QjPxGWBKLc6xy1JtqXVBE904lLR63dUA,104
412
412
  meerk40t/ruida/controller.py,sha256=RIdFegB_tuaI1q2Asl3pXNTERMVvl8ltYL9kQNy4mTU,3460
413
413
  meerk40t/ruida/device.py,sha256=iojk8_ry5chLCBGnYfgG7tPddhFQQf-ncS5UOFi5P8Y,23656
414
414
  meerk40t/ruida/driver.py,sha256=4Hgm5ptXjARThqf76k1AqznpHl7PgJ7FIZwswnFlKPg,17340
415
- meerk40t/ruida/emulator.py,sha256=nr3Qisv7Ix4-HWK4DpReeXw004LAEF2AzciU0mjV6g0,55390
415
+ meerk40t/ruida/emulator.py,sha256=8S-XbfM-OqXMFa16o9K9XQku8VyoyMyTsTdDZM0xyP8,55516
416
416
  meerk40t/ruida/exceptions.py,sha256=xJtpaxuLOLANQuo15p6Fl0Lgq3eUwODCIsWw0TQm78s,116
417
417
  meerk40t/ruida/loader.py,sha256=8gHnKX3D5V7qQltvueO-m6X9-xARjVEl8rjYIpKqLbk,1516
418
418
  meerk40t/ruida/mock_connection.py,sha256=Qig2x5s01f6U3BKHNlZockyaJTWHhfgcVV6w895R8R4,1577
419
- meerk40t/ruida/plugin.py,sha256=WCMm0PKc3I9Q8iI1ptXfWVcWp_j20-UUR_SowSFEvbU,4091
420
- meerk40t/ruida/rdjob.py,sha256=DkqvSiEndzO26kwOzBsBayq5FjFHvExj0Z1_YS3n1-4,71865
419
+ meerk40t/ruida/plugin.py,sha256=NRuDolYS-HNrxShEPRxhFlcLS8LCHJllWZd038agXOY,4279
420
+ meerk40t/ruida/rdjob.py,sha256=JzQl4lEWnMdv33OiIdrW3C3JD6gEPJvu_u4UuK1eJJY,71977
421
421
  meerk40t/ruida/serial_connection.py,sha256=RJ95TX933rAD3eUL2Uz48xwhm-7wm1m3Jo-Tv6jsypk,3573
422
422
  meerk40t/ruida/tcp_connection.py,sha256=3utEZQDDUI6DzYJP83RABoXAFB-wEYGVRaoNsuWqCqE,4657
423
423
  meerk40t/ruida/udp_connection.py,sha256=S6eSoh9smYWmax6VdSOTJyc9ixEStgvy7bWVkHgqtDU,2130
@@ -428,7 +428,7 @@ meerk40t/ruida/gui/ruidacontroller.py,sha256=nJpZPW-dy7YbxxLnHzmYcU6guc-6tK1oJIw
428
428
  meerk40t/ruida/gui/ruidaoperationproperties.py,sha256=pMEZFyWHDsbzoIfIKrFrKsw2IDPEK2HhHDw3HDQM3dw,1002
429
429
  meerk40t/tools/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
430
430
  meerk40t/tools/driver_to_path.py,sha256=eeQOGZO-08CJBqeF9epQv-P7T3dcpP2grMILW5LLd3U,20851
431
- meerk40t/tools/geomstr.py,sha256=hzC99CpCAB2tSThNoBlOU8FBjFsKKKmAddtlAA2pZ78,207715
431
+ meerk40t/tools/geomstr.py,sha256=kSR9E-LRxZuA1hzYCnk1nf_YwHB5RqQee1QoMG4CPJg,208380
432
432
  meerk40t/tools/jhfparser.py,sha256=CGC9C2cthrMWfUfumFs5EBzVCUP4PldwIqkf1Qhq52k,14395
433
433
  meerk40t/tools/kerftest.py,sha256=dtm4sP-cXQdwr3tkEImif30lnd1tyEYGxnN6vUTWe2M,36449
434
434
  meerk40t/tools/livinghinges.py,sha256=oO9ERPh2ILXpJj3-DvYyA3P7Y6FR2ACf3dbBehJlgR4,46949
@@ -440,10 +440,10 @@ meerk40t/tools/rasterplotter.py,sha256=pfIIwWjBaVnJQH2dSyfj7nj-cAK7AGmTU0kD6dBzz
440
440
  meerk40t/tools/shxparser.py,sha256=5CPV4HW5ulH71hWtiIFMFj0-Jn4-OqXRCdaimjOSfOs,35169
441
441
  meerk40t/tools/ttfparser.py,sha256=Dqd8msoqiaJAyFQ-Kdr3sBGyi5QxJFq0EOVf6-LM4Ac,61301
442
442
  meerk40t/tools/zinglplotter.py,sha256=wsXA9jnORb0AR0Bvrhcow-hROJhgDeLRcE8DmnEbiWo,20164
443
- meerk40t-0.9.7910.dist-info/LICENSE,sha256=sMsd9pY-cLfcNzUkQ2DvZobE0qpiiLMmoPfJMBTznNY,1065
444
- meerk40t-0.9.7910.dist-info/METADATA,sha256=LCrrTJHmFu0e5mnLq0DnM5YJFuWQMYy5wqRkHrfTjkU,8014
445
- meerk40t-0.9.7910.dist-info/WHEEL,sha256=Ll72iyqtt6Rbxp-Q7FSafYA1LeRv98X15xcZWRsFEmY,109
446
- meerk40t-0.9.7910.dist-info/entry_points.txt,sha256=5KjPHpJvgQq3-SwLWJQtLE1BvfGeINBae3Josx6fgpk,47
447
- meerk40t-0.9.7910.dist-info/top_level.txt,sha256=ng4SDtNom2u-smf8sCHERr74HYQIOJOjZbBlDdlpvjU,9
448
- meerk40t-0.9.7910.dist-info/zip-safe,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
449
- meerk40t-0.9.7910.dist-info/RECORD,,
443
+ meerk40t-0.9.7940.dist-info/LICENSE,sha256=sMsd9pY-cLfcNzUkQ2DvZobE0qpiiLMmoPfJMBTznNY,1065
444
+ meerk40t-0.9.7940.dist-info/METADATA,sha256=5v5vKxOkUu1vNyCQgBThuFi6mUlpoQO2Nost8xf2RAQ,8014
445
+ meerk40t-0.9.7940.dist-info/WHEEL,sha256=Ll72iyqtt6Rbxp-Q7FSafYA1LeRv98X15xcZWRsFEmY,109
446
+ meerk40t-0.9.7940.dist-info/entry_points.txt,sha256=5KjPHpJvgQq3-SwLWJQtLE1BvfGeINBae3Josx6fgpk,47
447
+ meerk40t-0.9.7940.dist-info/top_level.txt,sha256=ng4SDtNom2u-smf8sCHERr74HYQIOJOjZbBlDdlpvjU,9
448
+ meerk40t-0.9.7940.dist-info/zip-safe,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
449
+ meerk40t-0.9.7940.dist-info/RECORD,,