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.
- meerk40t/balormk/balor_params.py +1 -43
- meerk40t/balormk/controller.py +1 -41
- meerk40t/balormk/device.py +16 -22
- meerk40t/balormk/driver.py +4 -4
- meerk40t/balormk/gui/balorconfig.py +2 -2
- meerk40t/balormk/gui/balorcontroller.py +13 -5
- meerk40t/balormk/gui/baloroperationproperties.py +0 -46
- meerk40t/balormk/gui/gui.py +17 -17
- meerk40t/camera/gui/camerapanel.py +18 -11
- meerk40t/core/cutcode/rastercut.py +3 -1
- meerk40t/core/cutplan.py +145 -14
- meerk40t/core/elements/clipboard.py +18 -9
- meerk40t/core/elements/element_treeops.py +320 -180
- meerk40t/core/elements/element_types.py +7 -2
- meerk40t/core/elements/elements.py +53 -27
- meerk40t/core/elements/geometry.py +8 -0
- meerk40t/core/elements/offset_clpr.py +129 -4
- meerk40t/core/elements/offset_mk.py +3 -1
- meerk40t/core/elements/shapes.py +28 -25
- meerk40t/core/laserjob.py +7 -0
- meerk40t/core/node/bootstrap.py +4 -0
- meerk40t/core/node/effect_hatch.py +85 -96
- meerk40t/core/node/effect_wobble.py +309 -0
- meerk40t/core/node/elem_image.py +49 -19
- meerk40t/core/node/elem_line.py +60 -0
- meerk40t/core/node/elem_rect.py +5 -3
- meerk40t/core/node/image_processed.py +766 -0
- meerk40t/core/node/image_raster.py +113 -0
- meerk40t/core/node/node.py +120 -1
- meerk40t/core/node/op_cut.py +2 -8
- meerk40t/core/node/op_dots.py +0 -8
- meerk40t/core/node/op_engrave.py +2 -18
- meerk40t/core/node/op_image.py +22 -35
- meerk40t/core/node/op_raster.py +0 -9
- meerk40t/core/planner.py +32 -2
- meerk40t/core/svg_io.py +699 -461
- meerk40t/core/treeop.py +191 -0
- meerk40t/core/undos.py +15 -1
- meerk40t/core/units.py +14 -4
- meerk40t/device/dummydevice.py +3 -2
- meerk40t/device/gui/defaultactions.py +43 -55
- meerk40t/device/gui/formatterpanel.py +58 -49
- meerk40t/device/gui/warningpanel.py +12 -12
- meerk40t/device/mixins.py +13 -0
- meerk40t/dxf/dxf_io.py +9 -5
- meerk40t/extra/ezd.py +28 -26
- meerk40t/extra/imageactions.py +300 -308
- meerk40t/extra/lbrn.py +19 -2
- meerk40t/fill/fills.py +6 -6
- meerk40t/fill/patternfill.py +1061 -1061
- meerk40t/fill/patterns.py +2 -6
- meerk40t/grbl/controller.py +168 -52
- meerk40t/grbl/device.py +23 -18
- meerk40t/grbl/driver.py +39 -0
- meerk40t/grbl/emulator.py +79 -19
- meerk40t/grbl/gcodejob.py +10 -0
- meerk40t/grbl/gui/grblconfiguration.py +2 -2
- meerk40t/grbl/gui/grblcontroller.py +24 -8
- meerk40t/grbl/gui/grblhardwareconfig.py +153 -0
- meerk40t/grbl/gui/gui.py +17 -14
- meerk40t/grbl/mock_connection.py +15 -34
- meerk40t/grbl/plugin.py +0 -4
- meerk40t/grbl/serial_connection.py +2 -1
- meerk40t/gui/about.py +8 -5
- meerk40t/gui/alignment.py +10 -6
- meerk40t/gui/basicops.py +27 -17
- meerk40t/gui/bufferview.py +2 -2
- meerk40t/gui/choicepropertypanel.py +101 -13
- meerk40t/gui/consolepanel.py +12 -9
- meerk40t/gui/devicepanel.py +38 -25
- meerk40t/gui/executejob.py +6 -4
- meerk40t/gui/help_assets/help_assets.py +13 -10
- meerk40t/gui/hersheymanager.py +8 -6
- meerk40t/gui/icons.py +1951 -3065
- meerk40t/gui/imagesplitter.py +14 -7
- meerk40t/gui/keymap.py +3 -3
- meerk40t/gui/laserpanel.py +151 -84
- meerk40t/gui/laserrender.py +61 -70
- meerk40t/gui/lasertoolpanel.py +8 -7
- meerk40t/gui/materialtest.py +3 -3
- meerk40t/gui/mkdebug.py +254 -1
- meerk40t/gui/navigationpanels.py +321 -180
- meerk40t/gui/notes.py +3 -3
- meerk40t/gui/opassignment.py +12 -12
- meerk40t/gui/operation_info.py +13 -13
- meerk40t/gui/plugin.py +5 -0
- meerk40t/gui/position.py +20 -18
- meerk40t/gui/preferences.py +21 -6
- meerk40t/gui/propertypanels/attributes.py +70 -22
- meerk40t/gui/propertypanels/blobproperty.py +2 -2
- meerk40t/gui/propertypanels/consoleproperty.py +2 -2
- meerk40t/gui/propertypanels/groupproperties.py +3 -3
- meerk40t/gui/propertypanels/hatchproperty.py +11 -18
- meerk40t/gui/propertypanels/imageproperty.py +4 -3
- meerk40t/gui/propertypanels/opbranchproperties.py +1 -1
- meerk40t/gui/propertypanels/pathproperty.py +2 -2
- meerk40t/gui/propertypanels/pointproperty.py +2 -2
- meerk40t/gui/propertypanels/propertywindow.py +4 -4
- meerk40t/gui/propertypanels/textproperty.py +3 -3
- meerk40t/gui/propertypanels/wobbleproperty.py +204 -0
- meerk40t/gui/ribbon.py +367 -259
- meerk40t/gui/scene/scene.py +31 -5
- meerk40t/gui/scenewidgets/elementswidget.py +12 -4
- meerk40t/gui/scenewidgets/gridwidget.py +2 -2
- meerk40t/gui/scenewidgets/laserpathwidget.py +7 -2
- meerk40t/gui/scenewidgets/machineoriginwidget.py +6 -2
- meerk40t/gui/scenewidgets/relocatewidget.py +1 -1
- meerk40t/gui/scenewidgets/reticlewidget.py +9 -0
- meerk40t/gui/scenewidgets/selectionwidget.py +12 -7
- meerk40t/gui/simpleui.py +95 -8
- meerk40t/gui/simulation.py +44 -36
- meerk40t/gui/spoolerpanel.py +124 -26
- meerk40t/gui/statusbarwidgets/defaultoperations.py +18 -6
- meerk40t/gui/statusbarwidgets/infowidget.py +2 -2
- meerk40t/gui/statusbarwidgets/opassignwidget.py +12 -12
- meerk40t/gui/statusbarwidgets/shapepropwidget.py +45 -18
- meerk40t/gui/statusbarwidgets/statusbar.py +11 -4
- meerk40t/gui/themes.py +78 -0
- meerk40t/gui/toolwidgets/toolcircle.py +2 -1
- meerk40t/gui/toolwidgets/toolellipse.py +2 -1
- meerk40t/gui/toolwidgets/toolimagecut.py +132 -0
- meerk40t/gui/toolwidgets/toolline.py +144 -0
- meerk40t/gui/toolwidgets/toolnodeedit.py +72 -145
- meerk40t/gui/toolwidgets/toolpoint.py +1 -1
- meerk40t/gui/toolwidgets/toolpolygon.py +8 -55
- meerk40t/gui/toolwidgets/toolrect.py +2 -1
- meerk40t/gui/usbconnect.py +2 -2
- meerk40t/gui/utilitywidgets/cyclocycloidwidget.py +2 -2
- meerk40t/gui/utilitywidgets/harmonograph.py +7 -7
- meerk40t/gui/utilitywidgets/scalewidget.py +1 -1
- meerk40t/gui/wordlisteditor.py +33 -18
- meerk40t/gui/wxmeerk40t.py +166 -66
- meerk40t/gui/wxmmain.py +236 -157
- meerk40t/gui/wxmribbon.py +49 -25
- meerk40t/gui/wxmscene.py +49 -38
- meerk40t/gui/wxmtree.py +216 -85
- meerk40t/gui/wxutils.py +62 -4
- meerk40t/image/imagetools.py +443 -15
- meerk40t/internal_plugins.py +2 -10
- meerk40t/kernel/kernel.py +12 -4
- meerk40t/lihuiyu/controller.py +7 -7
- meerk40t/lihuiyu/device.py +3 -1
- meerk40t/lihuiyu/driver.py +3 -0
- meerk40t/lihuiyu/gui/gui.py +8 -8
- meerk40t/lihuiyu/gui/lhyaccelgui.py +2 -2
- meerk40t/lihuiyu/gui/lhycontrollergui.py +73 -27
- meerk40t/lihuiyu/gui/lhydrivergui.py +2 -2
- meerk40t/lihuiyu/gui/tcpcontroller.py +22 -9
- meerk40t/main.py +6 -1
- meerk40t/moshi/controller.py +5 -5
- meerk40t/moshi/device.py +5 -2
- meerk40t/moshi/driver.py +4 -0
- meerk40t/moshi/gui/gui.py +8 -8
- meerk40t/moshi/gui/moshicontrollergui.py +24 -8
- meerk40t/moshi/gui/moshidrivergui.py +2 -2
- meerk40t/newly/controller.py +2 -0
- meerk40t/newly/device.py +9 -2
- meerk40t/newly/driver.py +4 -0
- meerk40t/newly/gui/gui.py +16 -17
- meerk40t/newly/gui/newlyconfig.py +2 -2
- meerk40t/newly/gui/newlycontroller.py +13 -5
- meerk40t/rotary/gui/gui.py +2 -2
- meerk40t/rotary/gui/rotarysettings.py +2 -2
- meerk40t/ruida/device.py +3 -0
- meerk40t/ruida/driver.py +4 -0
- meerk40t/ruida/gui/gui.py +6 -6
- meerk40t/ruida/gui/ruidaconfig.py +2 -2
- meerk40t/ruida/gui/ruidacontroller.py +13 -5
- meerk40t/svgelements.py +9 -9
- meerk40t/tools/geomstr.py +849 -153
- meerk40t/tools/kerftest.py +8 -4
- meerk40t/tools/livinghinges.py +15 -8
- {meerk40t-0.9.2000.dist-info → meerk40t-0.9.3001.dist-info}/METADATA +21 -16
- {meerk40t-0.9.2000.dist-info → meerk40t-0.9.3001.dist-info}/RECORD +185 -177
- {meerk40t-0.9.2000.dist-info → meerk40t-0.9.3001.dist-info}/entry_points.txt +0 -1
- test/test_core_elements.py +8 -24
- test/test_file_svg.py +88 -0
- test/test_fill.py +9 -9
- test/test_geomstr.py +258 -8
- test/test_kernel.py +4 -0
- test/test_tools_rasterplotter.py +29 -0
- meerk40t/extra/embroider.py +0 -56
- meerk40t/extra/pathoptimize.py +0 -249
- {meerk40t-0.9.2000.dist-info → meerk40t-0.9.3001.dist-info}/LICENSE +0 -0
- {meerk40t-0.9.2000.dist-info → meerk40t-0.9.3001.dist-info}/WHEEL +0 -0
- {meerk40t-0.9.2000.dist-info → meerk40t-0.9.3001.dist-info}/top_level.txt +0 -0
- {meerk40t-0.9.2000.dist-info → meerk40t-0.9.3001.dist-info}/zip-safe +0 -0
meerk40t/newly/device.py
CHANGED
@@ -4,17 +4,19 @@ Newly Device
|
|
4
4
|
from meerk40t.core.laserjob import LaserJob
|
5
5
|
from meerk40t.core.spoolers import Spooler
|
6
6
|
from meerk40t.core.view import View
|
7
|
+
from meerk40t.device.mixins import Status
|
7
8
|
from meerk40t.kernel import CommandSyntaxError, Service, signal_listener
|
8
9
|
from meerk40t.newly.driver import NewlyDriver
|
9
10
|
|
10
11
|
|
11
|
-
class NewlyDevice(Service):
|
12
|
+
class NewlyDevice(Service, Status):
|
12
13
|
"""
|
13
14
|
Newly Device
|
14
15
|
"""
|
15
16
|
|
16
17
|
def __init__(self, kernel, path, *args, choices=None, **kwargs):
|
17
18
|
Service.__init__(self, kernel, path)
|
19
|
+
Status.__init__(self)
|
18
20
|
self.name = "newly"
|
19
21
|
self.extension = "hpgl"
|
20
22
|
self.job = None
|
@@ -87,7 +89,7 @@ class NewlyDevice(Service):
|
|
87
89
|
},
|
88
90
|
{
|
89
91
|
"attr": "corner_speed",
|
90
|
-
"type":
|
92
|
+
"type": int,
|
91
93
|
"label": _("Corner Speed"),
|
92
94
|
"width": 133,
|
93
95
|
"editable": True,
|
@@ -95,6 +97,8 @@ class NewlyDevice(Service):
|
|
95
97
|
],
|
96
98
|
"style": "chart",
|
97
99
|
"primary": "speed",
|
100
|
+
"allow_deletion": True,
|
101
|
+
"allow_duplication": True,
|
98
102
|
"label": _("Speed Chart"),
|
99
103
|
"tip": _("Raster speed to chart."),
|
100
104
|
},
|
@@ -507,6 +511,9 @@ class NewlyDevice(Service):
|
|
507
511
|
|
508
512
|
self.viewbuffer = ""
|
509
513
|
|
514
|
+
# Sort the entries for the rasterchart
|
515
|
+
self.speedchart.sort(key=lambda x: x["speed"])
|
516
|
+
|
510
517
|
@self.console_command(
|
511
518
|
"estop",
|
512
519
|
help=_("stops the current job, deletes the spooler"),
|
meerk40t/newly/driver.py
CHANGED
@@ -365,6 +365,7 @@ class NewlyDriver:
|
|
365
365
|
return
|
366
366
|
self.paused = True
|
367
367
|
self.connection.pause()
|
368
|
+
self.service.signal("pause")
|
368
369
|
|
369
370
|
def resume(self):
|
370
371
|
"""
|
@@ -377,6 +378,7 @@ class NewlyDriver:
|
|
377
378
|
"""
|
378
379
|
self.paused = False
|
379
380
|
self.connection.resume()
|
381
|
+
self.service.signal("pause")
|
380
382
|
|
381
383
|
def reset(self):
|
382
384
|
"""
|
@@ -384,7 +386,9 @@ class NewlyDriver:
|
|
384
386
|
|
385
387
|
@return:
|
386
388
|
"""
|
389
|
+
self.paused = False
|
387
390
|
self.connection.abort()
|
391
|
+
self.service.signal("pause")
|
388
392
|
|
389
393
|
def status(self):
|
390
394
|
"""
|
meerk40t/newly/gui/gui.py
CHANGED
@@ -7,7 +7,7 @@ def plugin(service, lifecycle):
|
|
7
7
|
# Needed to test wx import.
|
8
8
|
import wx # pylint: disable=unused-import
|
9
9
|
|
10
|
-
from meerk40t.gui.icons import
|
10
|
+
from meerk40t.gui.icons import icons8_computer_support, icons8_connected
|
11
11
|
|
12
12
|
from .newlyconfig import NewlyConfiguration
|
13
13
|
from .newlycontroller import NewlyController
|
@@ -26,7 +26,7 @@ def plugin(service, lifecycle):
|
|
26
26
|
"button/control/Controller",
|
27
27
|
{
|
28
28
|
"label": _("Controller"),
|
29
|
-
"icon":
|
29
|
+
"icon": icons8_connected,
|
30
30
|
"tip": _("Opens Controller Window"),
|
31
31
|
"action": lambda e: service("window toggle Controller\n"),
|
32
32
|
},
|
@@ -35,7 +35,7 @@ def plugin(service, lifecycle):
|
|
35
35
|
"button/device/Configuration",
|
36
36
|
{
|
37
37
|
"label": _("Config"),
|
38
|
-
"icon":
|
38
|
+
"icon": icons8_computer_support,
|
39
39
|
"tip": _("Opens device-specific configuration window"),
|
40
40
|
"action": lambda v: service("window toggle Configuration\n"),
|
41
41
|
},
|
@@ -43,14 +43,13 @@ def plugin(service, lifecycle):
|
|
43
43
|
|
44
44
|
if lifecycle == "service_attach":
|
45
45
|
from meerk40t.gui.icons import (
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
icons8_rectangular_50,
|
46
|
+
icon_mk_rectangular,
|
47
|
+
icons8_circled_play,
|
48
|
+
icons8_circled_stop,
|
49
|
+
icons8_computer_support,
|
50
|
+
icons8_connected,
|
51
|
+
icons8_file,
|
52
|
+
icons8_move,
|
54
53
|
)
|
55
54
|
|
56
55
|
_ = service.kernel.translation
|
@@ -60,7 +59,7 @@ def plugin(service, lifecycle):
|
|
60
59
|
"button/control/SelectFile",
|
61
60
|
{
|
62
61
|
"label": _("File {index}").format(index=selected),
|
63
|
-
"icon":
|
62
|
+
"icon": icons8_file,
|
64
63
|
"tip": _("Select active file to use for machine."),
|
65
64
|
"identifier": "file_index",
|
66
65
|
"object": service,
|
@@ -127,7 +126,7 @@ def plugin(service, lifecycle):
|
|
127
126
|
"button/control/AutoStart",
|
128
127
|
{
|
129
128
|
"label": _("Send Only"),
|
130
|
-
"icon":
|
129
|
+
"icon": icons8_circled_stop,
|
131
130
|
"tip": _("Send the file but do not start the file"),
|
132
131
|
"toggle_attr": "autoplay",
|
133
132
|
"object": service,
|
@@ -135,7 +134,7 @@ def plugin(service, lifecycle):
|
|
135
134
|
"toggle": {
|
136
135
|
"label": _("Send & Start"),
|
137
136
|
"tip": _("Automatically start the device after send"),
|
138
|
-
"icon":
|
137
|
+
"icon": icons8_circled_play,
|
139
138
|
"signal": "autoplay",
|
140
139
|
},
|
141
140
|
},
|
@@ -144,7 +143,7 @@ def plugin(service, lifecycle):
|
|
144
143
|
"button/control/DrawFrame",
|
145
144
|
{
|
146
145
|
"label": _("Draw Frame"),
|
147
|
-
"icon":
|
146
|
+
"icon": icon_mk_rectangular,
|
148
147
|
"tip": _(
|
149
148
|
"Draw a bounding rectangle of the object saved in the machine"
|
150
149
|
),
|
@@ -158,7 +157,7 @@ def plugin(service, lifecycle):
|
|
158
157
|
"button/control/MoveFrame",
|
159
158
|
{
|
160
159
|
"label": _("Move Frame"),
|
161
|
-
"icon":
|
160
|
+
"icon": icons8_move,
|
162
161
|
"tip": _(
|
163
162
|
"Move the bounding rectangle of the object saved in the machine"
|
164
163
|
),
|
@@ -172,7 +171,7 @@ def plugin(service, lifecycle):
|
|
172
171
|
"button/control/Replay",
|
173
172
|
{
|
174
173
|
"label": _("Replay"),
|
175
|
-
"icon":
|
174
|
+
"icon": icons8_circled_play,
|
176
175
|
"tip": _("Replay the file saved in the machine"),
|
177
176
|
"action": lambda v: service(
|
178
177
|
"replay {index}\n".format(index=service.file_index)
|
@@ -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
|
7
|
+
from meerk40t.gui.icons import icons8_administrative_tools
|
8
8
|
from meerk40t.gui.mwindow import MWindow
|
9
9
|
|
10
10
|
_ = wx.GetTranslation
|
@@ -15,7 +15,7 @@ class NewlyConfiguration(MWindow):
|
|
15
15
|
super().__init__(420, 570, *args, **kwds)
|
16
16
|
self.context = self.context.device
|
17
17
|
_icon = wx.NullIcon
|
18
|
-
_icon.CopyFromBitmap(
|
18
|
+
_icon.CopyFromBitmap(icons8_administrative_tools.GetBitmap())
|
19
19
|
self.SetIcon(_icon)
|
20
20
|
self.SetTitle(_("Newly-Configuration"))
|
21
21
|
|
@@ -2,7 +2,11 @@ import threading
|
|
2
2
|
|
3
3
|
import wx
|
4
4
|
|
5
|
-
from meerk40t.gui.icons import
|
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 NewlyControllerPanel(wx.ScrolledWindow):
|
|
58
62
|
_("Force connection/disconnection from the device.")
|
59
63
|
)
|
60
64
|
self.button_device_connect.SetBitmap(
|
61
|
-
|
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 NewlyControllerPanel(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
|
-
|
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
|
-
|
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
|
|
@@ -163,7 +171,7 @@ class NewlyController(MWindow):
|
|
163
171
|
self.add_module_delegate(self.panel)
|
164
172
|
self.SetTitle(_("Newly-Controller"))
|
165
173
|
_icon = wx.NullIcon
|
166
|
-
_icon.CopyFromBitmap(
|
174
|
+
_icon.CopyFromBitmap(icons8_connected.GetBitmap())
|
167
175
|
self.SetIcon(_icon)
|
168
176
|
self.Layout()
|
169
177
|
|
meerk40t/rotary/gui/gui.py
CHANGED
@@ -7,7 +7,7 @@ def plugin(kernel, lifecycle):
|
|
7
7
|
if lifecycle == "invalidate":
|
8
8
|
return not kernel.has_feature("wx")
|
9
9
|
if lifecycle == "register":
|
10
|
-
from meerk40t.gui.icons import
|
10
|
+
from meerk40t.gui.icons import icon_rotary
|
11
11
|
from meerk40t.rotary.gui.rotarysettings import RotarySettings
|
12
12
|
|
13
13
|
_ = kernel.translation
|
@@ -21,7 +21,7 @@ def plugin(kernel, lifecycle):
|
|
21
21
|
"button/device/Rotary",
|
22
22
|
{
|
23
23
|
"label": _("Rotary"),
|
24
|
-
"icon":
|
24
|
+
"icon": icon_rotary,
|
25
25
|
"tip": _("Opens Rotary Window"),
|
26
26
|
"action": lambda v: kernel.console("window toggle Rotary\n"),
|
27
27
|
},
|
@@ -5,7 +5,7 @@
|
|
5
5
|
|
6
6
|
import wx
|
7
7
|
|
8
|
-
from meerk40t.gui.icons import
|
8
|
+
from meerk40t.gui.icons import icon_rotary
|
9
9
|
from meerk40t.gui.mwindow import MWindow
|
10
10
|
from meerk40t.gui.wxutils import ScrolledPanel, StaticBoxSizer, TextCtrl, dip_size
|
11
11
|
|
@@ -216,7 +216,7 @@ class RotarySettings(MWindow):
|
|
216
216
|
self.panel = RotarySettingsPanel(self, wx.ID_ANY, context=self.context.rotary)
|
217
217
|
self.add_module_delegate(self.panel)
|
218
218
|
_icon = wx.NullIcon
|
219
|
-
_icon.CopyFromBitmap(
|
219
|
+
_icon.CopyFromBitmap(icon_rotary.GetBitmap())
|
220
220
|
self.SetIcon(_icon)
|
221
221
|
# begin wxGlade: RotarySettings.__set_properties
|
222
222
|
self.SetTitle(_("Rotary-Settings"))
|
meerk40t/ruida/device.py
CHANGED
@@ -9,6 +9,7 @@ from meerk40t.kernel import Service
|
|
9
9
|
|
10
10
|
from ..core.spoolers import Spooler
|
11
11
|
from ..core.units import UNITS_PER_NM, Length
|
12
|
+
from ..device.mixins import Status
|
12
13
|
from .driver import RuidaDriver
|
13
14
|
|
14
15
|
|
@@ -19,7 +20,9 @@ class RuidaDevice(Service):
|
|
19
20
|
|
20
21
|
def __init__(self, kernel, path, *args, choices=None, **kwargs):
|
21
22
|
Service.__init__(self, kernel, path)
|
23
|
+
Status.__init__(self)
|
22
24
|
self.name = "RuidaDevice"
|
25
|
+
|
23
26
|
if choices is not None:
|
24
27
|
for c in choices:
|
25
28
|
attr = c.get("attr")
|
meerk40t/ruida/driver.py
CHANGED
@@ -431,6 +431,7 @@ class RuidaDriver:
|
|
431
431
|
return
|
432
432
|
self.paused = True
|
433
433
|
self.connection.pause()
|
434
|
+
self.service.signal("pause")
|
434
435
|
|
435
436
|
def resume(self):
|
436
437
|
"""
|
@@ -443,6 +444,7 @@ class RuidaDriver:
|
|
443
444
|
"""
|
444
445
|
self.paused = False
|
445
446
|
self.connection.resume()
|
447
|
+
self.service.signal("pause")
|
446
448
|
|
447
449
|
def reset(self):
|
448
450
|
"""
|
@@ -451,6 +453,8 @@ class RuidaDriver:
|
|
451
453
|
@return:
|
452
454
|
"""
|
453
455
|
self.connection.abort()
|
456
|
+
self.paused = False
|
457
|
+
self.service.signal("pause")
|
454
458
|
|
455
459
|
def dwell(self, time_in_ms):
|
456
460
|
"""
|
meerk40t/ruida/gui/gui.py
CHANGED
@@ -7,9 +7,9 @@ def plugin(service, lifecycle):
|
|
7
7
|
import wx
|
8
8
|
|
9
9
|
from meerk40t.gui.icons import (
|
10
|
-
|
11
|
-
|
12
|
-
|
10
|
+
icons8_computer_support,
|
11
|
+
icons8_connected,
|
12
|
+
icons8_info,
|
13
13
|
)
|
14
14
|
|
15
15
|
_ = service._
|
@@ -28,7 +28,7 @@ def plugin(service, lifecycle):
|
|
28
28
|
"button/control/Info",
|
29
29
|
{
|
30
30
|
"label": _("Ruida Info"),
|
31
|
-
"icon":
|
31
|
+
"icon": icons8_info,
|
32
32
|
"tip": _("Provide information about the Ruida Driver"),
|
33
33
|
"action": popup_info,
|
34
34
|
},
|
@@ -37,7 +37,7 @@ def plugin(service, lifecycle):
|
|
37
37
|
"button/control/Controller",
|
38
38
|
{
|
39
39
|
"label": _("Controller"),
|
40
|
-
"icon":
|
40
|
+
"icon": icons8_connected,
|
41
41
|
"tip": _("Opens Controller Window"),
|
42
42
|
"action": lambda e: service("window toggle Controller\n"),
|
43
43
|
},
|
@@ -46,7 +46,7 @@ def plugin(service, lifecycle):
|
|
46
46
|
"button/device/Configuration",
|
47
47
|
{
|
48
48
|
"label": _("Config"),
|
49
|
-
"icon":
|
49
|
+
"icon": icons8_computer_support,
|
50
50
|
"tip": _("Opens device-specific configuration window"),
|
51
51
|
"action": lambda v: service("window toggle Configuration\n"),
|
52
52
|
},
|
@@ -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
|
7
|
+
from meerk40t.gui.icons import icons8_administrative_tools
|
8
8
|
from meerk40t.gui.mwindow import MWindow
|
9
9
|
|
10
10
|
_ = wx.GetTranslation
|
@@ -15,7 +15,7 @@ class RuidaConfiguration(MWindow):
|
|
15
15
|
super().__init__(420, 570, *args, **kwds)
|
16
16
|
self.context = self.context.device
|
17
17
|
_icon = wx.NullIcon
|
18
|
-
_icon.CopyFromBitmap(
|
18
|
+
_icon.CopyFromBitmap(icons8_administrative_tools.GetBitmap())
|
19
19
|
self.SetIcon(_icon)
|
20
20
|
self.SetTitle(_(_("Ruida-Configuration")))
|
21
21
|
|
@@ -2,7 +2,11 @@ import threading
|
|
2
2
|
|
3
3
|
import wx
|
4
4
|
|
5
|
-
from meerk40t.gui.icons import
|
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 RuidaControllerPanel(wx.ScrolledWindow):
|
|
58
62
|
_("Force connection/disconnection from the device.")
|
59
63
|
)
|
60
64
|
self.button_device_connect.SetBitmap(
|
61
|
-
|
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 RuidaControllerPanel(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
|
-
|
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
|
-
|
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 RuidaController(MWindow):
|
|
161
169
|
self.add_module_delegate(self.panel)
|
162
170
|
self.SetTitle(_("Ruida-Controller"))
|
163
171
|
_icon = wx.NullIcon
|
164
|
-
_icon.CopyFromBitmap(
|
172
|
+
_icon.CopyFromBitmap(icons8_connected.GetBitmap())
|
165
173
|
self.SetIcon(_icon)
|
166
174
|
self.Layout()
|
167
175
|
|
meerk40t/svgelements.py
CHANGED
@@ -3995,7 +3995,7 @@ class PathSegment:
|
|
3995
3995
|
|
3996
3996
|
These segments define a 1:1 relationship with the path_d or path data attribute, denoted in
|
3997
3997
|
SVG by the 'd' attribute. These are moveto, closepath, lineto, and the curves which are cubic
|
3998
|
-
B
|
3998
|
+
B?zier curves, quadratic B?zier curves, and elliptical arc. These are classed as Move, Close,
|
3999
3999
|
Line, CubicBezier, QuadraticBezier, and Arc. And in path_d are denoted as M, Z, L, C, Q, A.
|
4000
4000
|
|
4001
4001
|
There are lowercase versions of these commands. And for C, and Q there are S and T which are
|
@@ -4514,7 +4514,7 @@ class Line(Linear):
|
|
4514
4514
|
|
4515
4515
|
|
4516
4516
|
class QuadraticBezier(Curve):
|
4517
|
-
"""Represents Quadratic B
|
4517
|
+
"""Represents Quadratic B?zier commands."""
|
4518
4518
|
|
4519
4519
|
def __init__(self, start, control, end, **kwargs):
|
4520
4520
|
Curve.__init__(self, start, end, **kwargs)
|
@@ -4604,7 +4604,7 @@ class QuadraticBezier(Curve):
|
|
4604
4604
|
|
4605
4605
|
def bbox(self):
|
4606
4606
|
"""
|
4607
|
-
Returns the bounding box for the quadratic B
|
4607
|
+
Returns the bounding box for the quadratic B?zier curve.
|
4608
4608
|
"""
|
4609
4609
|
n = self.start.x - self.control.x
|
4610
4610
|
d = self.start.x - 2 * self.control.x + self.end.x
|
@@ -4696,7 +4696,7 @@ class QuadraticBezier(Curve):
|
|
4696
4696
|
|
4697
4697
|
|
4698
4698
|
class CubicBezier(Curve):
|
4699
|
-
"""Represents Cubic B
|
4699
|
+
"""Represents Cubic B?zier commands."""
|
4700
4700
|
|
4701
4701
|
def __init__(self, start, control1, control2, end, **kwargs):
|
4702
4702
|
Curve.__init__(self, start, end, **kwargs)
|
@@ -4801,7 +4801,7 @@ class CubicBezier(Curve):
|
|
4801
4801
|
return [Point(*_compute_point(position)) for position in positions]
|
4802
4802
|
|
4803
4803
|
def bbox(self):
|
4804
|
-
"""returns the tight-fitting bounding box of the B
|
4804
|
+
"""returns the tight-fitting bounding box of the B?zier curve.
|
4805
4805
|
Code by:
|
4806
4806
|
https://github.com/mathandy/svgpathtools
|
4807
4807
|
"""
|
@@ -5331,7 +5331,7 @@ class Arc(Curve):
|
|
5331
5331
|
def length(self, error=ERROR, min_depth=MIN_DEPTH):
|
5332
5332
|
"""The length of an elliptical arc segment requires numerical
|
5333
5333
|
integration, and in that case it's simpler to just do a geometric
|
5334
|
-
approximation, as for cubic B
|
5334
|
+
approximation, as for cubic B?zier curves.
|
5335
5335
|
"""
|
5336
5336
|
if self.sweep == 0:
|
5337
5337
|
return 0
|
@@ -6498,7 +6498,7 @@ class Path(Shape, MutableSequence):
|
|
6498
6498
|
|
6499
6499
|
def approximate_arcs_with_cubics(self, error=0.1):
|
6500
6500
|
"""
|
6501
|
-
Iterates through this path and replaces any Arcs with cubic B
|
6501
|
+
Iterates through this path and replaces any Arcs with cubic B?zier curves.
|
6502
6502
|
"""
|
6503
6503
|
sweep_limit = tau * error
|
6504
6504
|
for s in range(len(self) - 1, -1, -1):
|
@@ -6509,7 +6509,7 @@ class Path(Shape, MutableSequence):
|
|
6509
6509
|
|
6510
6510
|
def approximate_arcs_with_quads(self, error=0.1):
|
6511
6511
|
"""
|
6512
|
-
Iterates through this path and replaces any Arcs with quadratic B
|
6512
|
+
Iterates through this path and replaces any Arcs with quadratic B?zier curves.
|
6513
6513
|
"""
|
6514
6514
|
sweep_limit = tau * error
|
6515
6515
|
for s in range(len(self) - 1, -1, -1):
|
@@ -6520,7 +6520,7 @@ class Path(Shape, MutableSequence):
|
|
6520
6520
|
|
6521
6521
|
def approximate_bezier_with_circular_arcs(self, error=0.01):
|
6522
6522
|
"""
|
6523
|
-
Iterates through this path and replaces any B
|
6523
|
+
Iterates through this path and replaces any B?zier curves with circular arcs.
|
6524
6524
|
"""
|
6525
6525
|
for s in range(len(self) - 1, -1, -1):
|
6526
6526
|
segment = self[s]
|