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
@@ -9,7 +9,7 @@ from meerk40t.core.node.op_cut import CutOpNode
9
9
  from meerk40t.core.node.op_engrave import EngraveOpNode
10
10
  from meerk40t.core.node.op_raster import RasterOpNode
11
11
  from meerk40t.core.units import UNITS_PER_PIXEL, Length
12
- from meerk40t.gui.icons import STD_ICON_SIZE, icon_kerf_50, icons8_detective_50
12
+ from meerk40t.gui.icons import STD_ICON_SIZE, icon_kerf, icons8_detective
13
13
  from meerk40t.gui.mwindow import MWindow
14
14
  from meerk40t.gui.wxutils import StaticBoxSizer, TextCtrl, dip_size
15
15
  from meerk40t.kernel import lookup_listener, signal_listener
@@ -58,7 +58,7 @@ class KerfPanel(wx.Panel):
58
58
 
59
59
  self.button_create = wx.Button(self, wx.ID_ANY, _("Create Pattern"))
60
60
  self.button_create.SetBitmap(
61
- icons8_detective_50.GetBitmap(resize=STD_ICON_SIZE / 2)
61
+ icons8_detective.GetBitmap(resize=STD_ICON_SIZE / 2)
62
62
  )
63
63
 
64
64
  self._set_layout()
@@ -156,7 +156,7 @@ class KerfPanel(wx.Panel):
156
156
  sizer_param.Add(hline_dim, 0, wx.EXPAND, 0)
157
157
  sizer_param.Add(hline_delta, 0, wx.EXPAND, 0)
158
158
 
159
- sizer_info = StaticBoxSizer(self, wx.ID_ANY, _("How to use it"), wx.VERTICAL)
159
+ sizer_info = StaticBoxSizer(self, wx.ID_ANY, _("How to use it"), wx.HORIZONTAL)
160
160
  infomsg = _(
161
161
  "If you want to produce cut out shapes with *exact* dimensions"
162
162
  + " after the burn, then you need to take half the width of the"
@@ -166,10 +166,14 @@ class KerfPanel(wx.Panel):
166
166
  + " label together. Choose the pair that has a perfect fit and use the"
167
167
  + " label as your kerf-compensation value."
168
168
  )
169
+ info_pic = wx.StaticBitmap(
170
+ self, wx.ID_ANY, bitmap=icon_kerf.GetBitmap(resize=STD_ICON_SIZE)
171
+ )
169
172
  info_label = wx.TextCtrl(
170
173
  self, wx.ID_ANY, value=infomsg, style=wx.TE_READONLY | wx.TE_MULTILINE
171
174
  )
172
175
  info_label.SetBackgroundColour(self.GetBackgroundColour())
176
+ sizer_info.Add(info_pic, 0, 0, 0)
173
177
  sizer_info.Add(info_label, 1, wx.EXPAND, 0)
174
178
 
175
179
  main_sizer.Add(sizer_cutop, 0, wx.EXPAND, 1)
@@ -863,7 +867,7 @@ class KerfTool(MWindow):
863
867
  )
864
868
  self.add_module_delegate(self.panel_template)
865
869
  _icon = wx.NullIcon
866
- _icon.CopyFromBitmap(icon_kerf_50.GetBitmap())
870
+ _icon.CopyFromBitmap(icon_kerf.GetBitmap())
867
871
  self.SetIcon(_icon)
868
872
  self.SetTitle(_("Kerf-Test"))
869
873
  self.Layout()
@@ -4,13 +4,16 @@ import wx
4
4
 
5
5
  from meerk40t.core.units import ACCEPTED_UNITS, Length
6
6
  from meerk40t.fill.patterns import LivingHinges
7
- from meerk40t.gui.icons import STD_ICON_SIZE, icons8_hinges_50
7
+ from meerk40t.gui.icons import STD_ICON_SIZE, icon_hinges
8
8
  from meerk40t.gui.laserrender import LaserRender
9
9
  from meerk40t.gui.mwindow import MWindow
10
10
  from meerk40t.gui.wxutils import StaticBoxSizer, dip_size
11
11
  from meerk40t.kernel import signal_listener
12
12
  from meerk40t.svgelements import Color, Matrix, Path
13
13
 
14
+ # from meerk40t.fill.patternfill import LivingHinges
15
+
16
+
14
17
  _ = wx.GetTranslation
15
18
 
16
19
  """
@@ -99,7 +102,7 @@ class HingePanel(wx.Panel):
99
102
  self,
100
103
  wx.ID_ANY,
101
104
  0,
102
- int(1 - _FACTOR / 2),
105
+ int(1 - _FACTOR / 2) + 1,
103
106
  int(_FACTOR / 2),
104
107
  style=wx.SL_HORIZONTAL,
105
108
  )
@@ -114,7 +117,7 @@ class HingePanel(wx.Panel):
114
117
  self,
115
118
  wx.ID_ANY,
116
119
  0,
117
- int(1 - _FACTOR / 2),
120
+ int(1 - _FACTOR / 2) + 1,
118
121
  int(_FACTOR / 2),
119
122
  style=wx.SL_HORIZONTAL,
120
123
  )
@@ -489,7 +492,7 @@ class HingePanel(wx.Panel):
489
492
  )
490
493
  gc.SetPen(mypen_path)
491
494
  gspath = self.hinge_generator.preview_path
492
- if gspath is not None:
495
+ if gspath is not None and self.hinge_generator.outershape is not None:
493
496
  if isinstance(gspath, Path):
494
497
  bb = self.hinge_generator.outershape.bbox()
495
498
  gspath.transform *= Matrix.translate(-bb[0], -bb[1])
@@ -533,7 +536,9 @@ class HingePanel(wx.Panel):
533
536
  self.button_generate.Enable(False)
534
537
  self.button_generate.SetLabel(_("Processing..."))
535
538
  start_time = time()
536
- if self.hinge_generator.outershape is not None:
539
+ if self.hinge_generator.outershape is not None and hasattr(
540
+ self.hinge_generator.outershape, "as_geometry"
541
+ ):
537
542
  # As we have a reference shape, we make sure
538
543
  # we update the information...
539
544
  units = self.context.units_name
@@ -917,7 +922,7 @@ class HingePanel(wx.Panel):
917
922
  self.slider_param_b.SetValue(int(10 * self.hinge_param_b))
918
923
  if require_sync:
919
924
  self.sync_controls(True)
920
- flag = wd > 0 and ht > 0
925
+ flag = wd > 0 and ht > 0 and self.hinge_generator.outershape is not None
921
926
  self.button_generate.Enable(flag)
922
927
  self.Layout()
923
928
 
@@ -931,9 +936,11 @@ class HingePanel(wx.Panel):
931
936
  bounds = node.bbox()
932
937
  self.hinge_generator.set_hinge_shape(first_selected)
933
938
  flag = False
939
+ self.button_generate.Enable(True)
934
940
  break
935
941
  if flag:
936
942
  self.hinge_generator.set_hinge_shape(None)
943
+ self.button_generate.Enable(False)
937
944
  if units in ("in", "inch"):
938
945
  s = "2in"
939
946
  else:
@@ -985,7 +992,7 @@ class LivingHingeTool(MWindow):
985
992
  )
986
993
  self.add_module_delegate(self.panel_template)
987
994
  _icon = wx.NullIcon
988
- _icon.CopyFromBitmap(icons8_hinges_50.GetBitmap())
995
+ _icon.CopyFromBitmap(icon_hinges.GetBitmap())
989
996
  self.SetIcon(_icon)
990
997
  self.SetTitle(_("Living-Hinges"))
991
998
  self.Layout()
@@ -1014,7 +1021,7 @@ class LivingHingeTool(MWindow):
1014
1021
  "button/extended_tools/LivingHinge",
1015
1022
  {
1016
1023
  "label": _("Hinge"),
1017
- "icon": icons8_hinges_50,
1024
+ "icon": icon_hinges,
1018
1025
  "tip": _("Fill area with a living hinge pattern"),
1019
1026
  "action": lambda v: kernel.console("window open Hingetool\n"),
1020
1027
  "size": STD_ICON_SIZE,
@@ -1,13 +1,12 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: meerk40t
3
- Version: 0.9.2000
3
+ Version: 0.9.3001
4
4
  Summary: MeerK40t LaserCutter Software
5
5
  Home-page: https://github.com/meerk40t/meerk40t
6
6
  Author: Tatarize
7
7
  Author-email: tatarize@gmail.com
8
8
  License: MIT
9
9
  Keywords: lasercutter,laser,vector,parser
10
- Platform: UNKNOWN
11
10
  Classifier: Development Status :: 5 - Production/Stable
12
11
  Classifier: License :: OSI Approved :: MIT License
13
12
  Classifier: Operating System :: OS Independent
@@ -21,6 +20,7 @@ Classifier: Topic :: Multimedia :: Graphics
21
20
  Classifier: Topic :: Multimedia :: Graphics :: Editors :: Vector-Based
22
21
  Classifier: Topic :: Utilities
23
22
  Description-Content-Type: text/markdown
23
+ License-File: LICENSE
24
24
  Requires-Dist: pyusb >=1.0.0
25
25
  Requires-Dist: pyserial
26
26
  Requires-Dist: numpy
@@ -70,16 +70,21 @@ Meerk40t provides a variety of drivers with an extensible framework to provide s
70
70
 
71
71
 
72
72
  ### Supported devices
73
- * M2-Nano
74
- * Moshiboard
73
+ * Lihuiyu M2/M3-Nano
75
74
  * GRBL
76
- * Fibre Lasers based on the JCZ controllers (still experimental)
75
+ * Ezcad2-compatible JCZ controllers galvo lasers
76
+ * Moshiboard
77
+ * NewlyDraw System 8.1 Lasers
77
78
  * Ruida-Emulation (Middleman between Lightburn and K40)
78
79
 
79
80
  ### Lihuiyu M2-Nano
80
81
  For the Lihuiyu (stock driver), Meerk40t supports both the windows and libusb connection methods, making it compatible with Whisperer and with the original Chinese software. So MeerK40t can usually run alongside these other pieces of software interchangeably.
81
82
 
82
- ### Galvo LMC
83
+ ### GRBL
84
+
85
+ GRBL is itself open source and the various interfaces with the board should be quite well understood.
86
+
87
+ ### EZCAD2-Compatible Galvo LMC
83
88
 
84
89
  Meerk40t supports controlling galvo as well as gantry lasers with open source support.
85
90
 
@@ -87,9 +92,9 @@ Meerk40t supports controlling galvo as well as gantry lasers with open source su
87
92
 
88
93
  The support for old moshiboards makes meerk40t the only known opensource software that controls moshiboards.
89
94
 
90
- ### GRBL
95
+ ### System 8.1 Lasers (NewlyDraw)
91
96
 
92
- GRBL is itself open source and the various interfaces with the board should be quite well understood.
97
+ HPGL-modified laser systems produced under many different company names
93
98
 
94
99
  ## Support
95
100
  The primary source for help and documentation is the [MeerK40t Wiki - please click here](https://github.com/meerk40t/meerk40t/wiki).
@@ -119,16 +124,16 @@ Open source projects live and die with their support. There are a lots of ways t
119
124
 
120
125
  ## Download
121
126
  You can find and download all current and historical versions in the [Releases](https://github.com/meerk40t/meerk40t/releases) section.
122
- Currently there are three relevant branches:
123
- * 0.7 - K40 support only (including ruidacontrol emulator for 3rd party lasersoftware integration) - no longer supported, still good enough for 3rd party integration, latest version [0.7.10](https://github.com/meerk40t/meerk40t/releases/tag/0.7.10000)
124
- * 0.8 - Multi laser support - receives critical bugfixes but no more new features, latest version: [0.8.11](https://github.com/meerk40t/meerk40t/releases/tag/0.8.11001)
125
- * 0.9 - Active development branch with new features and some underlying architectural changes. Still a bit green behind the ears, but good enough for daily use. If you feel brave, try the latest released version: [0.9.1](https://github.com/meerk40t/meerk40t/releases#latest)
127
+
128
+ Currently, primary branches:
129
+ * 0.9 - Active - New features and some underlying architectural changes. Try the latest released version: [0.9.2](https://github.com/meerk40t/meerk40t/releases#latest)
130
+ * 0.8 - Maintenance - may receive critical bugfixes but no more new features, latest version: [0.8.12](https://github.com/meerk40t/meerk40t/releases/tag/0.8.12000) (Oct 17, 2023)
131
+ * 0.7 - Discontinued - K40 support only (including ruidacontrol emulator for 3rd party lasersoftware integration), latest version [0.7.10](https://github.com/meerk40t/meerk40t/releases/tag/0.7.10000) (June 13, 2023)
132
+ * 0.6 - Discontinued - K40 support only, latest version: [0.6.24](https://github.com/meerk40t/meerk40t/releases/tag/0.6.24) (Oct 11, 2021)
126
133
 
127
134
  Just download one of the files for Windows, Mac OSX, Linux and Raspberry Pi.
128
135
 
129
136
  ## Lightburn integration
130
- Meerk40t allows to act as an intermediator between your K40 laser and software that supports Ruida-controlled laser equipment - [Lightburn](https://lightburnsoftware.com/) is a relevant example of such a software product. You just need to issue the command ``ruidacontrol`` in MeerK40ts console window and you will then be able to add an emulated Ruida Laser inside Lightburn. Laser jobs that are created inside Lightburn and sent to this laser will be picked up by MeerK40t and sent to your K40. See some more detailled instructions in this [video](https://www.youtube.com/watch?v=LUUfLf5Agu0). Please note this will require the DSP version of Light burn. (Present in all versions since 0.7)
131
-
132
- With 0.9 another way of interacting with Lightburn was introduced, which will work as well with the standard version of LB: You just need to issue the command ``grblcontrol`` in MeerK40ts console window and you will then be able to add an emulated remote GBRL-LPC laser inside Lightburn.
133
-
137
+ Meerk40t allows to act as an intermediary between your K40 laser and software that supports Ruida-controlled laser equipment - [Lightburn](https://lightburnsoftware.com/) is a relevant example of such a software product. You just need to issue the command ``ruidacontrol`` in MeerK40ts console window and you will then be able to add an emulated Ruida Laser inside Lightburn™. Laser jobs that are created inside Lightburn and sent to this laser will be picked up by MeerK40t and sent to your K40. See some more detailed instructions in this [video](https://www.youtube.com/watch?v=LUUfLf5Agu0). Please note `ruidacontrol` will require the DSP version of Lightburn™. (Present in all versions since 0.7)
134
138
 
139
+ With 0.9 another way of interacting with Lightburn was introduced, which will work as well with the standard version of LB: You just need to issue the command ``grblcontrol`` in MeerK40ts console window, and you will then be able to add an emulated remote GBRL-LPC laser inside Lightburn or any TCP GRBL control software.