meerk40t 0.9.2000__py2.py3-none-any.whl → 0.9.3001__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 (187) hide show
  1. meerk40t/balormk/balor_params.py +1 -43
  2. meerk40t/balormk/controller.py +1 -41
  3. meerk40t/balormk/device.py +16 -22
  4. meerk40t/balormk/driver.py +4 -4
  5. meerk40t/balormk/gui/balorconfig.py +2 -2
  6. meerk40t/balormk/gui/balorcontroller.py +13 -5
  7. meerk40t/balormk/gui/baloroperationproperties.py +0 -46
  8. meerk40t/balormk/gui/gui.py +17 -17
  9. meerk40t/camera/gui/camerapanel.py +18 -11
  10. meerk40t/core/cutcode/rastercut.py +3 -1
  11. meerk40t/core/cutplan.py +145 -14
  12. meerk40t/core/elements/clipboard.py +18 -9
  13. meerk40t/core/elements/element_treeops.py +320 -180
  14. meerk40t/core/elements/element_types.py +7 -2
  15. meerk40t/core/elements/elements.py +53 -27
  16. meerk40t/core/elements/geometry.py +8 -0
  17. meerk40t/core/elements/offset_clpr.py +129 -4
  18. meerk40t/core/elements/offset_mk.py +3 -1
  19. meerk40t/core/elements/shapes.py +28 -25
  20. meerk40t/core/laserjob.py +7 -0
  21. meerk40t/core/node/bootstrap.py +4 -0
  22. meerk40t/core/node/effect_hatch.py +85 -96
  23. meerk40t/core/node/effect_wobble.py +309 -0
  24. meerk40t/core/node/elem_image.py +49 -19
  25. meerk40t/core/node/elem_line.py +60 -0
  26. meerk40t/core/node/elem_rect.py +5 -3
  27. meerk40t/core/node/image_processed.py +766 -0
  28. meerk40t/core/node/image_raster.py +113 -0
  29. meerk40t/core/node/node.py +120 -1
  30. meerk40t/core/node/op_cut.py +2 -8
  31. meerk40t/core/node/op_dots.py +0 -8
  32. meerk40t/core/node/op_engrave.py +2 -18
  33. meerk40t/core/node/op_image.py +22 -35
  34. meerk40t/core/node/op_raster.py +0 -9
  35. meerk40t/core/planner.py +32 -2
  36. meerk40t/core/svg_io.py +699 -461
  37. meerk40t/core/treeop.py +191 -0
  38. meerk40t/core/undos.py +15 -1
  39. meerk40t/core/units.py +14 -4
  40. meerk40t/device/dummydevice.py +3 -2
  41. meerk40t/device/gui/defaultactions.py +43 -55
  42. meerk40t/device/gui/formatterpanel.py +58 -49
  43. meerk40t/device/gui/warningpanel.py +12 -12
  44. meerk40t/device/mixins.py +13 -0
  45. meerk40t/dxf/dxf_io.py +9 -5
  46. meerk40t/extra/ezd.py +28 -26
  47. meerk40t/extra/imageactions.py +300 -308
  48. meerk40t/extra/lbrn.py +19 -2
  49. meerk40t/fill/fills.py +6 -6
  50. meerk40t/fill/patternfill.py +1061 -1061
  51. meerk40t/fill/patterns.py +2 -6
  52. meerk40t/grbl/controller.py +168 -52
  53. meerk40t/grbl/device.py +23 -18
  54. meerk40t/grbl/driver.py +39 -0
  55. meerk40t/grbl/emulator.py +79 -19
  56. meerk40t/grbl/gcodejob.py +10 -0
  57. meerk40t/grbl/gui/grblconfiguration.py +2 -2
  58. meerk40t/grbl/gui/grblcontroller.py +24 -8
  59. meerk40t/grbl/gui/grblhardwareconfig.py +153 -0
  60. meerk40t/grbl/gui/gui.py +17 -14
  61. meerk40t/grbl/mock_connection.py +15 -34
  62. meerk40t/grbl/plugin.py +0 -4
  63. meerk40t/grbl/serial_connection.py +2 -1
  64. meerk40t/gui/about.py +8 -5
  65. meerk40t/gui/alignment.py +10 -6
  66. meerk40t/gui/basicops.py +27 -17
  67. meerk40t/gui/bufferview.py +2 -2
  68. meerk40t/gui/choicepropertypanel.py +101 -13
  69. meerk40t/gui/consolepanel.py +12 -9
  70. meerk40t/gui/devicepanel.py +38 -25
  71. meerk40t/gui/executejob.py +6 -4
  72. meerk40t/gui/help_assets/help_assets.py +13 -10
  73. meerk40t/gui/hersheymanager.py +8 -6
  74. meerk40t/gui/icons.py +1951 -3065
  75. meerk40t/gui/imagesplitter.py +14 -7
  76. meerk40t/gui/keymap.py +3 -3
  77. meerk40t/gui/laserpanel.py +151 -84
  78. meerk40t/gui/laserrender.py +61 -70
  79. meerk40t/gui/lasertoolpanel.py +8 -7
  80. meerk40t/gui/materialtest.py +3 -3
  81. meerk40t/gui/mkdebug.py +254 -1
  82. meerk40t/gui/navigationpanels.py +321 -180
  83. meerk40t/gui/notes.py +3 -3
  84. meerk40t/gui/opassignment.py +12 -12
  85. meerk40t/gui/operation_info.py +13 -13
  86. meerk40t/gui/plugin.py +5 -0
  87. meerk40t/gui/position.py +20 -18
  88. meerk40t/gui/preferences.py +21 -6
  89. meerk40t/gui/propertypanels/attributes.py +70 -22
  90. meerk40t/gui/propertypanels/blobproperty.py +2 -2
  91. meerk40t/gui/propertypanels/consoleproperty.py +2 -2
  92. meerk40t/gui/propertypanels/groupproperties.py +3 -3
  93. meerk40t/gui/propertypanels/hatchproperty.py +11 -18
  94. meerk40t/gui/propertypanels/imageproperty.py +4 -3
  95. meerk40t/gui/propertypanels/opbranchproperties.py +1 -1
  96. meerk40t/gui/propertypanels/pathproperty.py +2 -2
  97. meerk40t/gui/propertypanels/pointproperty.py +2 -2
  98. meerk40t/gui/propertypanels/propertywindow.py +4 -4
  99. meerk40t/gui/propertypanels/textproperty.py +3 -3
  100. meerk40t/gui/propertypanels/wobbleproperty.py +204 -0
  101. meerk40t/gui/ribbon.py +367 -259
  102. meerk40t/gui/scene/scene.py +31 -5
  103. meerk40t/gui/scenewidgets/elementswidget.py +12 -4
  104. meerk40t/gui/scenewidgets/gridwidget.py +2 -2
  105. meerk40t/gui/scenewidgets/laserpathwidget.py +7 -2
  106. meerk40t/gui/scenewidgets/machineoriginwidget.py +6 -2
  107. meerk40t/gui/scenewidgets/relocatewidget.py +1 -1
  108. meerk40t/gui/scenewidgets/reticlewidget.py +9 -0
  109. meerk40t/gui/scenewidgets/selectionwidget.py +12 -7
  110. meerk40t/gui/simpleui.py +95 -8
  111. meerk40t/gui/simulation.py +44 -36
  112. meerk40t/gui/spoolerpanel.py +124 -26
  113. meerk40t/gui/statusbarwidgets/defaultoperations.py +18 -6
  114. meerk40t/gui/statusbarwidgets/infowidget.py +2 -2
  115. meerk40t/gui/statusbarwidgets/opassignwidget.py +12 -12
  116. meerk40t/gui/statusbarwidgets/shapepropwidget.py +45 -18
  117. meerk40t/gui/statusbarwidgets/statusbar.py +11 -4
  118. meerk40t/gui/themes.py +78 -0
  119. meerk40t/gui/toolwidgets/toolcircle.py +2 -1
  120. meerk40t/gui/toolwidgets/toolellipse.py +2 -1
  121. meerk40t/gui/toolwidgets/toolimagecut.py +132 -0
  122. meerk40t/gui/toolwidgets/toolline.py +144 -0
  123. meerk40t/gui/toolwidgets/toolnodeedit.py +72 -145
  124. meerk40t/gui/toolwidgets/toolpoint.py +1 -1
  125. meerk40t/gui/toolwidgets/toolpolygon.py +8 -55
  126. meerk40t/gui/toolwidgets/toolrect.py +2 -1
  127. meerk40t/gui/usbconnect.py +2 -2
  128. meerk40t/gui/utilitywidgets/cyclocycloidwidget.py +2 -2
  129. meerk40t/gui/utilitywidgets/harmonograph.py +7 -7
  130. meerk40t/gui/utilitywidgets/scalewidget.py +1 -1
  131. meerk40t/gui/wordlisteditor.py +33 -18
  132. meerk40t/gui/wxmeerk40t.py +166 -66
  133. meerk40t/gui/wxmmain.py +236 -157
  134. meerk40t/gui/wxmribbon.py +49 -25
  135. meerk40t/gui/wxmscene.py +49 -38
  136. meerk40t/gui/wxmtree.py +216 -85
  137. meerk40t/gui/wxutils.py +62 -4
  138. meerk40t/image/imagetools.py +443 -15
  139. meerk40t/internal_plugins.py +2 -10
  140. meerk40t/kernel/kernel.py +12 -4
  141. meerk40t/lihuiyu/controller.py +7 -7
  142. meerk40t/lihuiyu/device.py +3 -1
  143. meerk40t/lihuiyu/driver.py +3 -0
  144. meerk40t/lihuiyu/gui/gui.py +8 -8
  145. meerk40t/lihuiyu/gui/lhyaccelgui.py +2 -2
  146. meerk40t/lihuiyu/gui/lhycontrollergui.py +73 -27
  147. meerk40t/lihuiyu/gui/lhydrivergui.py +2 -2
  148. meerk40t/lihuiyu/gui/tcpcontroller.py +22 -9
  149. meerk40t/main.py +6 -1
  150. meerk40t/moshi/controller.py +5 -5
  151. meerk40t/moshi/device.py +5 -2
  152. meerk40t/moshi/driver.py +4 -0
  153. meerk40t/moshi/gui/gui.py +8 -8
  154. meerk40t/moshi/gui/moshicontrollergui.py +24 -8
  155. meerk40t/moshi/gui/moshidrivergui.py +2 -2
  156. meerk40t/newly/controller.py +2 -0
  157. meerk40t/newly/device.py +9 -2
  158. meerk40t/newly/driver.py +4 -0
  159. meerk40t/newly/gui/gui.py +16 -17
  160. meerk40t/newly/gui/newlyconfig.py +2 -2
  161. meerk40t/newly/gui/newlycontroller.py +13 -5
  162. meerk40t/rotary/gui/gui.py +2 -2
  163. meerk40t/rotary/gui/rotarysettings.py +2 -2
  164. meerk40t/ruida/device.py +3 -0
  165. meerk40t/ruida/driver.py +4 -0
  166. meerk40t/ruida/gui/gui.py +6 -6
  167. meerk40t/ruida/gui/ruidaconfig.py +2 -2
  168. meerk40t/ruida/gui/ruidacontroller.py +13 -5
  169. meerk40t/svgelements.py +9 -9
  170. meerk40t/tools/geomstr.py +849 -153
  171. meerk40t/tools/kerftest.py +8 -4
  172. meerk40t/tools/livinghinges.py +15 -8
  173. {meerk40t-0.9.2000.dist-info → meerk40t-0.9.3001.dist-info}/METADATA +21 -16
  174. {meerk40t-0.9.2000.dist-info → meerk40t-0.9.3001.dist-info}/RECORD +185 -177
  175. {meerk40t-0.9.2000.dist-info → meerk40t-0.9.3001.dist-info}/entry_points.txt +0 -1
  176. test/test_core_elements.py +8 -24
  177. test/test_file_svg.py +88 -0
  178. test/test_fill.py +9 -9
  179. test/test_geomstr.py +258 -8
  180. test/test_kernel.py +4 -0
  181. test/test_tools_rasterplotter.py +29 -0
  182. meerk40t/extra/embroider.py +0 -56
  183. meerk40t/extra/pathoptimize.py +0 -249
  184. {meerk40t-0.9.2000.dist-info → meerk40t-0.9.3001.dist-info}/LICENSE +0 -0
  185. {meerk40t-0.9.2000.dist-info → meerk40t-0.9.3001.dist-info}/WHEEL +0 -0
  186. {meerk40t-0.9.2000.dist-info → meerk40t-0.9.3001.dist-info}/top_level.txt +0 -0
  187. {meerk40t-0.9.2000.dist-info → meerk40t-0.9.3001.dist-info}/zip-safe +0 -0
@@ -13,19 +13,17 @@ FLOAT_PARAMETERS = (
13
13
  "delay_laser_on",
14
14
  "delay_laser_off",
15
15
  "delay_polygon",
16
- "wobble_speed",
17
16
  )
18
17
  INT_PARAMETERS = ("pulse_width",)
19
18
 
20
19
  BOOL_PARAMETERS = (
21
- "wobble_enabled",
22
20
  "timing_enabled",
23
21
  "rapid_enabled",
24
22
  "pulse_width_enabled",
25
23
  )
26
24
 
27
25
 
28
- STRING_PARAMETERS = ("wobble_type", "wobble_radius", "wobble_interval")
26
+ STRING_PARAMETERS = ()
29
27
 
30
28
 
31
29
  class Parameters:
@@ -96,46 +94,6 @@ class Parameters:
96
94
  def timing_enabled(self, value):
97
95
  self.settings["timing_enabled"] = value
98
96
 
99
- @property
100
- def wobble_enabled(self):
101
- return self.settings.get("wobble_enabled", False)
102
-
103
- @wobble_enabled.setter
104
- def wobble_enabled(self, value):
105
- self.settings["wobble_enabled"] = value
106
-
107
- @property
108
- def wobble_radius(self):
109
- return self.settings.get("wobble_radius", "1.5mm")
110
-
111
- @wobble_radius.setter
112
- def wobble_radius(self, value):
113
- self.settings["wobble_radius"] = value
114
-
115
- @property
116
- def wobble_speed(self):
117
- return self.settings.get("wobble_speed", 50.0)
118
-
119
- @wobble_speed.setter
120
- def wobble_speed(self, value):
121
- self.settings["wobble_speed"] = value
122
-
123
- @property
124
- def wobble_interval(self):
125
- return self.settings.get("wobble_interval", "0.3mm")
126
-
127
- @wobble_interval.setter
128
- def wobble_interval(self, value):
129
- self.settings["wobble_interval"] = value
130
-
131
- @property
132
- def wobble_type(self):
133
- return self.settings.get("wobble_type", "circle")
134
-
135
- @wobble_type.setter
136
- def wobble_type(self, value):
137
- self.settings["wobble_type"] = value
138
-
139
97
  @property
140
98
  def speed(self):
141
99
  return self.settings.get("speed", 100.0)
@@ -12,7 +12,6 @@ from copy import copy
12
12
 
13
13
  from meerk40t.balormk.mock_connection import MockConnection
14
14
  from meerk40t.balormk.usb_connection import USBConnection
15
- from meerk40t.fill.fills import Wobble
16
15
 
17
16
  DRIVER_STATE_RAPID = 0
18
17
  DRIVER_STATE_LIGHT = 1
@@ -273,7 +272,6 @@ class GalvoController:
273
272
  self._delay_poly = None
274
273
  self._delay_end = None
275
274
 
276
- self._wobble = None
277
275
  self._port_bits = 0
278
276
  self._machine_index = 0
279
277
 
@@ -627,40 +625,6 @@ class GalvoController:
627
625
  self.list_laser_off_delay(self.service.delay_laser_off)
628
626
  self.list_polygon_delay(self.service.delay_polygon)
629
627
 
630
- def set_wobble(self, settings):
631
- """
632
- Set the wobble parameters and mark modifications routines.
633
-
634
- @param settings: The dict setting to extract parameters from.
635
- @return:
636
- """
637
- if settings is None:
638
- self._wobble = None
639
- return
640
- wobble_enabled = str(settings.get("wobble_enabled", False)).lower() == "true"
641
- if not wobble_enabled:
642
- self._wobble = None
643
- return
644
- wobble_radius = settings.get("wobble_radius", "1.5mm")
645
- wobble_r, _ = self.service.view.position(wobble_radius, 0, vector=True)
646
- wobble_interval = settings.get("wobble_interval", "0.3mm")
647
- wobble_speed = settings.get("wobble_speed", 50.0)
648
- wobble_type = settings.get("wobble_type", "circle")
649
- wobble_interval, _ = self.service.view.position(wobble_interval, 0, vector=True)
650
- algorithm = self.service.lookup(f"wobble/{wobble_type}")
651
- if self._wobble is None:
652
- self._wobble = Wobble(
653
- algorithm=algorithm,
654
- radius=wobble_r,
655
- speed=wobble_speed,
656
- interval=wobble_interval,
657
- )
658
- else:
659
- # set our parameterizations
660
- self._wobble.algorithm = algorithm
661
- self._wobble.radius = wobble_r
662
- self._wobble.speed = wobble_speed
663
-
664
628
  #######################
665
629
  # PLOTLIKE SHORTCUTS
666
630
  #######################
@@ -673,11 +637,7 @@ class GalvoController:
673
637
  return
674
638
  if self._mark_speed is not None:
675
639
  self.list_mark_speed(self._mark_speed)
676
- if self._wobble:
677
- for wx, wy in self._wobble(self._last_x, self._last_y, x, y):
678
- self.list_mark(wx, wy)
679
- else:
680
- self.list_mark(x, y)
640
+ self.list_mark(x, y)
681
641
 
682
642
  def goto(self, x, y, long=None, short=None, distance_limit=None):
683
643
  if x == self._last_x and y == self._last_y:
@@ -15,12 +15,13 @@ from meerk40t.core.laserjob import LaserJob
15
15
  from meerk40t.core.spoolers import Spooler
16
16
  from meerk40t.core.units import Angle, Length
17
17
  from meerk40t.core.view import View
18
+ from meerk40t.device.mixins import Status
18
19
  from meerk40t.kernel import CommandSyntaxError, Service, signal_listener
19
20
  from meerk40t.svgelements import Path, Point
20
21
  from meerk40t.tools.geomstr import Geomstr
21
22
 
22
23
 
23
- class BalorDevice(Service):
24
+ class BalorDevice(Service, Status):
24
25
  """
25
26
  The BalorDevice is a MeerK40t service for the device type. It should be the main method of interacting with
26
27
  the rest of meerk40t. It defines how the scene should look and contains a spooler which meerk40t will give jobs
@@ -29,6 +30,7 @@ class BalorDevice(Service):
29
30
 
30
31
  def __init__(self, kernel, path, *args, choices=None, **kwargs):
31
32
  Service.__init__(self, kernel, path)
33
+ Status.__init__(self)
32
34
  self.name = "balor"
33
35
  self.extension = "lmc"
34
36
  self.job = None
@@ -1791,35 +1793,27 @@ class BalorDevice(Service):
1791
1793
  """
1792
1794
  if data is None:
1793
1795
  data = list(self.elements.elems(emphasized=True))
1794
- pts = []
1796
+ g = Geomstr()
1795
1797
  for e in data:
1796
- if e.type == "elem image":
1798
+ if hasattr(e, "as_image"):
1797
1799
  bounds = e.bounds
1798
- pts += [
1799
- (bounds[0], bounds[1]),
1800
- (bounds[0], bounds[3]),
1801
- (bounds[2], bounds[1]),
1802
- (bounds[2], bounds[3]),
1803
- ]
1800
+ g.append(
1801
+ Geomstr.rect(
1802
+ bounds[0],
1803
+ bounds[1],
1804
+ bounds[2] - bounds[0],
1805
+ bounds[3] - bounds[1],
1806
+ )
1807
+ )
1804
1808
  elif e.type == "elem text":
1805
1809
  continue # We can't outline text.
1806
1810
  else:
1807
- try:
1808
- path = abs(Path(e.shape))
1809
- except AttributeError:
1810
- try:
1811
- path = abs(e.path)
1812
- except AttributeError:
1813
- continue
1814
- pts += [q for q in path.as_points()]
1815
- hull = [p for p in Point.convex_hull(pts)]
1811
+ g.append(e.as_geometry())
1812
+ hull = Geomstr.hull(g)
1816
1813
  if len(hull) == 0:
1817
1814
  channel(_("No elements bounds to trace."))
1818
1815
  return
1819
- hull.append(hull[0]) # loop
1820
- hull = list(map(complex, hull))
1821
- geometry = Geomstr.lines(*hull)
1822
- return "geometry", geometry
1816
+ return "geometry", hull
1823
1817
 
1824
1818
  def ant_points(points, steps):
1825
1819
  points = list(points)
@@ -102,7 +102,7 @@ class BalorDriver:
102
102
  """
103
103
  Required.
104
104
 
105
- Sets a laser parameter this could be speed, power, wobble, number_of_unicorns, or any unknown parameters for
105
+ Sets a laser parameter this could be speed, power, number_of_unicorns, or any unknown parameters for
106
106
  yet to be written drivers.
107
107
 
108
108
  @param key:
@@ -186,7 +186,6 @@ class BalorDriver:
186
186
  con.program_mode()
187
187
  self._list_bits = con._port_bits
188
188
  last_on = None
189
- con.set_wobble(None)
190
189
  queue = self.queue
191
190
  self.queue = list()
192
191
  for q in queue:
@@ -198,7 +197,6 @@ class BalorDriver:
198
197
  except KeyError:
199
198
  self.value_penbox = None
200
199
  con.set_settings(settings)
201
- con.set_wobble(settings)
202
200
  # LOOP CHECKS
203
201
  if self._aborting:
204
202
  con.abort()
@@ -323,7 +321,6 @@ class BalorDriver:
323
321
  except KeyError:
324
322
  self.value_penbox = None
325
323
  con.set_settings(settings)
326
- con.set_wobble(settings)
327
324
  elif on & (
328
325
  PLOT_RAPID | PLOT_JOG
329
326
  ): # Plot planner requests position change.
@@ -533,6 +530,7 @@ class BalorDriver:
533
530
  return
534
531
  self.paused = True
535
532
  self.connection.pause()
533
+ self.service.signal("pause")
536
534
 
537
535
  def resume(self):
538
536
  """
@@ -545,6 +543,7 @@ class BalorDriver:
545
543
  """
546
544
  self.paused = False
547
545
  self.connection.resume()
546
+ self.service.signal("pause")
548
547
 
549
548
  def reset(self):
550
549
  """
@@ -554,6 +553,7 @@ class BalorDriver:
554
553
  """
555
554
  self.paused = False
556
555
  self.connection.abort()
556
+ self.service.signal("pause")
557
557
 
558
558
  def dwell(self, time_in_ms):
559
559
  """
@@ -4,7 +4,7 @@ from meerk40t.device.gui.defaultactions import DefaultActionPanel
4
4
  from meerk40t.device.gui.formatterpanel import FormatterPanel
5
5
  from meerk40t.device.gui.warningpanel import WarningPanel
6
6
  from meerk40t.gui.choicepropertypanel import ChoicePropertyPanel
7
- from meerk40t.gui.icons import icons8_administrative_tools_50
7
+ from meerk40t.gui.icons import icons8_administrative_tools
8
8
  from meerk40t.gui.mwindow import MWindow
9
9
  from meerk40t.kernel import signal_listener
10
10
 
@@ -16,7 +16,7 @@ class BalorConfiguration(MWindow):
16
16
  super().__init__(420, 570, *args, **kwds)
17
17
  self.context = self.context.device
18
18
  _icon = wx.NullIcon
19
- _icon.CopyFromBitmap(icons8_administrative_tools_50.GetBitmap())
19
+ _icon.CopyFromBitmap(icons8_administrative_tools.GetBitmap())
20
20
  self.SetIcon(_icon)
21
21
  self.SetTitle(_(_("Balor-Configuration")))
22
22
 
@@ -2,7 +2,11 @@ import threading
2
2
 
3
3
  import wx
4
4
 
5
- from meerk40t.gui.icons import icons8_connected_50, icons8_disconnected_50
5
+ from meerk40t.gui.icons import (
6
+ get_default_icon_size,
7
+ icons8_connected,
8
+ icons8_disconnected,
9
+ )
6
10
  from meerk40t.gui.mwindow import MWindow
7
11
  from meerk40t.gui.wxutils import dip_size
8
12
  from meerk40t.kernel import signal_listener
@@ -58,7 +62,9 @@ class BalorControllerPanel(wx.ScrolledWindow):
58
62
  _("Force connection/disconnection from the device.")
59
63
  )
60
64
  self.button_device_connect.SetBitmap(
61
- icons8_disconnected_50.GetBitmap(use_theme=False)
65
+ icons8_disconnected.GetBitmap(
66
+ use_theme=False, resize=get_default_icon_size()
67
+ )
62
68
  )
63
69
  # end wxGlade
64
70
 
@@ -89,14 +95,16 @@ class BalorControllerPanel(wx.ScrolledWindow):
89
95
  def set_button_connected(self):
90
96
  self.button_device_connect.SetBackgroundColour("#00ff00")
91
97
  self.button_device_connect.SetBitmap(
92
- icons8_connected_50.GetBitmap(use_theme=False)
98
+ icons8_connected.GetBitmap(use_theme=False, resize=get_default_icon_size())
93
99
  )
94
100
  self.button_device_connect.Enable()
95
101
 
96
102
  def set_button_disconnected(self):
97
103
  self.button_device_connect.SetBackgroundColour("#dfdf00")
98
104
  self.button_device_connect.SetBitmap(
99
- icons8_disconnected_50.GetBitmap(use_theme=False)
105
+ icons8_disconnected.GetBitmap(
106
+ use_theme=False, resize=get_default_icon_size()
107
+ )
100
108
  )
101
109
  self.button_device_connect.Enable()
102
110
 
@@ -161,7 +169,7 @@ class BalorController(MWindow):
161
169
  self.add_module_delegate(self.panel)
162
170
  self.SetTitle(_("Balor-Controller"))
163
171
  _icon = wx.NullIcon
164
- _icon.CopyFromBitmap(icons8_connected_50.GetBitmap())
172
+ _icon.CopyFromBitmap(icons8_connected.GetBitmap())
165
173
  self.SetIcon(_icon)
166
174
  self.Layout()
167
175
 
@@ -92,52 +92,6 @@ class BalorOperationPanel(ScrolledPanel):
92
92
  "label": _("Polygon Delay"),
93
93
  "tip": _("Delay amount between different points in the path travel."),
94
94
  },
95
- {
96
- "attr": "wobble_enabled",
97
- "object": params,
98
- "default": False,
99
- "type": bool,
100
- "label": _("Enable Wobble"),
101
- "tip": _("Enable wobble for this particular cut"),
102
- },
103
- {
104
- "attr": "wobble_radius",
105
- "object": params,
106
- "default": "1.5mm",
107
- "type": Length,
108
- "conditional": (params, "wobble_enabled"),
109
- "label": _("Radius of wobble"),
110
- "tip": _("Radius of the wobble for this cut, if wobble is enabled."),
111
- },
112
- {
113
- "attr": "wobble_interval",
114
- "object": params,
115
- "default": "0.2mm",
116
- "type": Length,
117
- "conditional": (params, "wobble_enabled"),
118
- "label": _("Wobble Sampling Interval"),
119
- "tip": _("Sample interval for the wobble of this cut"),
120
- },
121
- {
122
- "attr": "wobble_speed",
123
- "object": params,
124
- "default": 50.0,
125
- "type": float,
126
- "conditional": (params, "wobble_enabled"),
127
- "label": _("Wobble Speed Multiplier"),
128
- "tip": _("Wobble rotation speed multiplier"),
129
- },
130
- {
131
- "attr": "wobble_type",
132
- "object": params,
133
- "default": "circle",
134
- "type": str,
135
- "style": "combo",
136
- "choices": list(self.context.match("wobble", suffix=True)),
137
- "conditional": (params, "wobble_enabled"),
138
- "label": _("Wobble Pattern Type"),
139
- "tip": _("Pattern type for the given wobble."),
140
- },
141
95
  ]
142
96
 
143
97
  self.panel = ChoicePropertyPanel(
@@ -8,13 +8,13 @@ def plugin(service, lifecycle):
8
8
  import wx # pylint: disable=unused-import
9
9
 
10
10
  from meerk40t.gui.icons import (
11
- icons8_center_of_gravity_50,
12
- icons8_computer_support_50,
13
- icons8_connected_50,
14
- icons8_flash_off_50,
15
- icons8_light_off_50,
16
- icons8_light_on_50,
17
- icons8_quick_mode_on_50,
11
+ icons8_center_of_gravity,
12
+ icons8_computer_support,
13
+ icons8_connected,
14
+ icons8_flash_off,
15
+ icons8_flash_on,
16
+ icons8_light_off,
17
+ icons8_light_on,
18
18
  )
19
19
 
20
20
  from .balorconfig import BalorConfiguration
@@ -33,7 +33,7 @@ def plugin(service, lifecycle):
33
33
  "button/control/Controller",
34
34
  {
35
35
  "label": _("Controller"),
36
- "icon": icons8_connected_50,
36
+ "icon": icons8_connected,
37
37
  "tip": _("Opens Controller Window"),
38
38
  "action": lambda e: service("window toggle Controller\n"),
39
39
  },
@@ -42,7 +42,7 @@ def plugin(service, lifecycle):
42
42
  "button/device/Configuration",
43
43
  {
44
44
  "label": _("Config"),
45
- "icon": icons8_computer_support_50,
45
+ "icon": icons8_computer_support,
46
46
  "tip": _("Opens device-specific configuration window"),
47
47
  "action": lambda v: service("window toggle Configuration\n"),
48
48
  },
@@ -57,20 +57,20 @@ def plugin(service, lifecycle):
57
57
  "button/control/Light_On",
58
58
  {
59
59
  "label": _("Galvo Light"),
60
- "icon": icons8_light_on_50,
60
+ "icon": icons8_light_on,
61
61
  "tip": _("Runs outline on selection"),
62
62
  "identifier": "light_default",
63
63
  "multi": [
64
64
  {
65
65
  "identifier": "live-full",
66
66
  "label": _("Live Full"),
67
- "icon": icons8_computer_support_50,
67
+ "icon": icons8_computer_support,
68
68
  "action": lambda e: service("full-light\n"),
69
69
  },
70
70
  {
71
71
  "identifier": "live-regmark",
72
72
  "label": _("Regmarks"),
73
- "icon": icons8_computer_support_50,
73
+ "icon": icons8_computer_support,
74
74
  "action": lambda e: service("regmark-light\n"),
75
75
  },
76
76
  {
@@ -81,7 +81,7 @@ def plugin(service, lifecycle):
81
81
  {
82
82
  "identifier": "live-hull",
83
83
  "label": _("Live Hull"),
84
- "icon": icons8_computer_support_50,
84
+ "icon": icons8_computer_support,
85
85
  "action": lambda e: service("hull-light\n"),
86
86
  },
87
87
  {
@@ -107,7 +107,7 @@ def plugin(service, lifecycle):
107
107
  ],
108
108
  "toggle": {
109
109
  "label": _("Stop Tracing..."),
110
- "icon": icons8_light_off_50,
110
+ "icon": icons8_light_off,
111
111
  "tip": _("Turn light off"),
112
112
  "action": lambda v: service("stop\n"),
113
113
  "signal": "light_simulate",
@@ -118,13 +118,13 @@ def plugin(service, lifecycle):
118
118
  "button/control/Redlight",
119
119
  {
120
120
  "label": _("Red Dot On"),
121
- "icon": icons8_quick_mode_on_50,
121
+ "icon": icons8_flash_on,
122
122
  "tip": _("Turn Redlight On"),
123
123
  "action": lambda v: service("red on\n"),
124
124
  "toggle": {
125
125
  "label": _("Red Dot Off"),
126
126
  "action": lambda v: service("red off\n"),
127
- "icon": icons8_flash_off_50,
127
+ "icon": icons8_flash_off,
128
128
  },
129
129
  },
130
130
  )
@@ -132,7 +132,7 @@ def plugin(service, lifecycle):
132
132
  "button/control/Center",
133
133
  {
134
134
  "label": _("Center"),
135
- "icon": icons8_center_of_gravity_50,
135
+ "icon": icons8_center_of_gravity,
136
136
  "tip": _("Center selection on laserbed"),
137
137
  "action": lambda v: service("align bed group xy center center\n"),
138
138
  },
@@ -4,10 +4,11 @@ import wx
4
4
  from wx import aui
5
5
 
6
6
  from meerk40t.gui.icons import (
7
- icons8_camera_50,
8
- icons8_connected_50,
9
- icons8_detective_50,
10
- icons8_picture_in_picture_alternative_50,
7
+ get_default_icon_size,
8
+ icons8_camera,
9
+ icons8_connected,
10
+ icons8_detective,
11
+ icons8_image_in_frame,
11
12
  )
12
13
  from meerk40t.gui.mwindow import MWindow
13
14
  from meerk40t.gui.scene.sceneconst import (
@@ -75,13 +76,17 @@ class CameraPanel(wx.Panel, Job):
75
76
 
76
77
  if not pane:
77
78
  self.button_update = wx.BitmapButton(
78
- self, wx.ID_ANY, icons8_camera_50.GetBitmap()
79
+ self, wx.ID_ANY, icons8_camera.GetBitmap(resize=get_default_icon_size())
79
80
  )
80
81
  self.button_export = wx.BitmapButton(
81
- self, wx.ID_ANY, icons8_picture_in_picture_alternative_50.GetBitmap()
82
+ self,
83
+ wx.ID_ANY,
84
+ icons8_image_in_frame.GetBitmap(resize=get_default_icon_size()),
82
85
  )
83
86
  self.button_reconnect = wx.BitmapButton(
84
- self, wx.ID_ANY, icons8_connected_50.GetBitmap()
87
+ self,
88
+ wx.ID_ANY,
89
+ icons8_connected.GetBitmap(resize=get_default_icon_size()),
85
90
  )
86
91
  self.check_fisheye = wx.CheckBox(self, wx.ID_ANY, _("Correct Fisheye"))
87
92
  self.check_perspective = wx.CheckBox(
@@ -96,7 +101,9 @@ class CameraPanel(wx.Panel, Job):
96
101
  style=wx.SL_AUTOTICKS | wx.SL_HORIZONTAL | wx.SL_LABELS,
97
102
  )
98
103
  self.button_detect = wx.BitmapButton(
99
- self, wx.ID_ANY, icons8_detective_50.GetBitmap()
104
+ self,
105
+ wx.ID_ANY,
106
+ icons8_detective.GetBitmap(resize=get_default_icon_size()),
100
107
  )
101
108
  scene_name = f"Camera{self.index}"
102
109
  else:
@@ -725,7 +732,7 @@ class CameraInterface(MWindow):
725
732
  # ==========
726
733
 
727
734
  _icon = wx.NullIcon
728
- _icon.CopyFromBitmap(icons8_camera_50.GetBitmap())
735
+ _icon.CopyFromBitmap(icons8_camera.GetBitmap())
729
736
  self.SetIcon(_icon)
730
737
  self.SetTitle(_("CameraInterface {index}").format(index=index))
731
738
  self.Layout()
@@ -800,7 +807,7 @@ class CameraInterface(MWindow):
800
807
  "button/preparation/Camera",
801
808
  {
802
809
  "label": _("Camera"),
803
- "icon": icons8_camera_50,
810
+ "icon": icons8_camera,
804
811
  "tip": _("Opens Camera Window"),
805
812
  "identifier": "camera_id",
806
813
  "action": camera_click(),
@@ -1072,7 +1079,7 @@ class CameraURI(MWindow):
1072
1079
 
1073
1080
  self.panel = CameraURIPanel(self, wx.ID_ANY, context=self.context, index=index)
1074
1081
  _icon = wx.NullIcon
1075
- _icon.CopyFromBitmap(icons8_camera_50.GetBitmap())
1082
+ _icon.CopyFromBitmap(icons8_camera.GetBitmap())
1076
1083
  self.SetIcon(_icon)
1077
1084
  # begin wxGlade: CameraURI.__set_properties
1078
1085
  self.SetTitle(_("URI Manager"))
@@ -28,7 +28,9 @@ class RasterCut(CutObject):
28
28
  CutObject.__init__(
29
29
  self, settings=settings, passes=passes, parent=parent, color=color
30
30
  )
31
- assert image.mode in ("L", "1")
31
+ if image.mode not in ("L", "1"):
32
+ image = image.convert("L")
33
+ # assert image.mode in ("L", "1")
32
34
  self.first = True # Raster cuts are always first within themselves.
33
35
  self.image = image
34
36
  self.offset_x = offset_x