meerk40t 0.9.3001__py2.py3-none-any.whl → 0.9.7010__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/__init__.py +1 -1
- meerk40t/balormk/balor_params.py +167 -167
- meerk40t/balormk/clone_loader.py +457 -457
- meerk40t/balormk/controller.py +1566 -1512
- meerk40t/balormk/cylindermod.py +64 -0
- meerk40t/balormk/device.py +966 -1959
- meerk40t/balormk/driver.py +778 -591
- meerk40t/balormk/galvo_commands.py +1195 -0
- meerk40t/balormk/gui/balorconfig.py +237 -111
- meerk40t/balormk/gui/balorcontroller.py +191 -184
- meerk40t/balormk/gui/baloroperationproperties.py +116 -115
- meerk40t/balormk/gui/corscene.py +845 -0
- meerk40t/balormk/gui/gui.py +179 -147
- meerk40t/balormk/livelightjob.py +466 -382
- meerk40t/balormk/mock_connection.py +131 -109
- meerk40t/balormk/plugin.py +133 -135
- meerk40t/balormk/usb_connection.py +306 -301
- meerk40t/camera/__init__.py +1 -1
- meerk40t/camera/camera.py +514 -397
- meerk40t/camera/gui/camerapanel.py +1241 -1095
- meerk40t/camera/gui/gui.py +58 -58
- meerk40t/camera/plugin.py +441 -399
- meerk40t/ch341/__init__.py +27 -27
- meerk40t/ch341/ch341device.py +628 -628
- meerk40t/ch341/libusb.py +595 -589
- meerk40t/ch341/mock.py +171 -171
- meerk40t/ch341/windriver.py +157 -157
- meerk40t/constants.py +13 -0
- meerk40t/core/__init__.py +1 -1
- meerk40t/core/bindalias.py +550 -539
- meerk40t/core/core.py +47 -47
- meerk40t/core/cutcode/cubiccut.py +73 -73
- meerk40t/core/cutcode/cutcode.py +315 -312
- meerk40t/core/cutcode/cutgroup.py +141 -137
- meerk40t/core/cutcode/cutobject.py +192 -185
- meerk40t/core/cutcode/dwellcut.py +37 -37
- meerk40t/core/cutcode/gotocut.py +29 -29
- meerk40t/core/cutcode/homecut.py +29 -29
- meerk40t/core/cutcode/inputcut.py +34 -34
- meerk40t/core/cutcode/linecut.py +33 -33
- meerk40t/core/cutcode/outputcut.py +34 -34
- meerk40t/core/cutcode/plotcut.py +335 -335
- meerk40t/core/cutcode/quadcut.py +61 -61
- meerk40t/core/cutcode/rastercut.py +168 -148
- meerk40t/core/cutcode/waitcut.py +34 -34
- meerk40t/core/cutplan.py +1843 -1316
- meerk40t/core/drivers.py +330 -329
- meerk40t/core/elements/align.py +801 -669
- meerk40t/core/elements/branches.py +1844 -1507
- meerk40t/core/elements/clipboard.py +229 -219
- meerk40t/core/elements/element_treeops.py +4561 -2837
- meerk40t/core/elements/element_types.py +125 -105
- meerk40t/core/elements/elements.py +4329 -3617
- meerk40t/core/elements/files.py +117 -64
- meerk40t/core/elements/geometry.py +473 -224
- meerk40t/core/elements/grid.py +467 -316
- meerk40t/core/elements/materials.py +158 -94
- meerk40t/core/elements/notes.py +50 -38
- meerk40t/core/elements/offset_clpr.py +933 -912
- meerk40t/core/elements/offset_mk.py +963 -955
- meerk40t/core/elements/penbox.py +339 -267
- meerk40t/core/elements/placements.py +300 -83
- meerk40t/core/elements/render.py +785 -687
- meerk40t/core/elements/shapes.py +2618 -2092
- meerk40t/core/elements/trace.py +651 -563
- meerk40t/core/elements/tree_commands.py +415 -409
- meerk40t/core/elements/undo_redo.py +116 -58
- meerk40t/core/elements/wordlist.py +319 -200
- meerk40t/core/exceptions.py +9 -9
- meerk40t/core/laserjob.py +220 -220
- meerk40t/core/logging.py +63 -63
- meerk40t/core/node/blobnode.py +83 -86
- meerk40t/core/node/bootstrap.py +105 -103
- meerk40t/core/node/branch_elems.py +40 -31
- meerk40t/core/node/branch_ops.py +45 -38
- meerk40t/core/node/branch_regmark.py +48 -41
- meerk40t/core/node/cutnode.py +29 -32
- meerk40t/core/node/effect_hatch.py +375 -257
- meerk40t/core/node/effect_warp.py +398 -0
- meerk40t/core/node/effect_wobble.py +441 -309
- meerk40t/core/node/elem_ellipse.py +404 -309
- meerk40t/core/node/elem_image.py +1082 -801
- meerk40t/core/node/elem_line.py +358 -292
- meerk40t/core/node/elem_path.py +259 -201
- meerk40t/core/node/elem_point.py +129 -102
- meerk40t/core/node/elem_polyline.py +310 -246
- meerk40t/core/node/elem_rect.py +376 -286
- meerk40t/core/node/elem_text.py +445 -418
- meerk40t/core/node/filenode.py +59 -40
- meerk40t/core/node/groupnode.py +138 -74
- meerk40t/core/node/image_processed.py +777 -766
- meerk40t/core/node/image_raster.py +156 -113
- meerk40t/core/node/layernode.py +31 -31
- meerk40t/core/node/mixins.py +135 -107
- meerk40t/core/node/node.py +1427 -1304
- meerk40t/core/node/nutils.py +117 -114
- meerk40t/core/node/op_cut.py +462 -335
- meerk40t/core/node/op_dots.py +296 -251
- meerk40t/core/node/op_engrave.py +414 -311
- meerk40t/core/node/op_image.py +755 -369
- meerk40t/core/node/op_raster.py +787 -522
- meerk40t/core/node/place_current.py +37 -40
- meerk40t/core/node/place_point.py +329 -126
- meerk40t/core/node/refnode.py +58 -47
- meerk40t/core/node/rootnode.py +225 -219
- meerk40t/core/node/util_console.py +48 -48
- meerk40t/core/node/util_goto.py +84 -65
- meerk40t/core/node/util_home.py +61 -61
- meerk40t/core/node/util_input.py +102 -102
- meerk40t/core/node/util_output.py +102 -102
- meerk40t/core/node/util_wait.py +65 -65
- meerk40t/core/parameters.py +709 -707
- meerk40t/core/planner.py +875 -785
- meerk40t/core/plotplanner.py +656 -652
- meerk40t/core/space.py +120 -113
- meerk40t/core/spoolers.py +706 -705
- meerk40t/core/svg_io.py +1836 -1549
- meerk40t/core/treeop.py +534 -445
- meerk40t/core/undos.py +278 -124
- meerk40t/core/units.py +784 -680
- meerk40t/core/view.py +393 -322
- meerk40t/core/webhelp.py +62 -62
- meerk40t/core/wordlist.py +513 -504
- meerk40t/cylinder/cylinder.py +247 -0
- meerk40t/cylinder/gui/cylindersettings.py +41 -0
- meerk40t/cylinder/gui/gui.py +24 -0
- meerk40t/device/__init__.py +1 -1
- meerk40t/device/basedevice.py +322 -123
- meerk40t/device/devicechoices.py +50 -0
- meerk40t/device/dummydevice.py +163 -128
- meerk40t/device/gui/defaultactions.py +618 -602
- meerk40t/device/gui/effectspanel.py +114 -0
- meerk40t/device/gui/formatterpanel.py +253 -290
- meerk40t/device/gui/warningpanel.py +337 -260
- meerk40t/device/mixins.py +13 -13
- meerk40t/dxf/__init__.py +1 -1
- meerk40t/dxf/dxf_io.py +766 -554
- meerk40t/dxf/plugin.py +47 -35
- meerk40t/external_plugins.py +79 -79
- meerk40t/external_plugins_build.py +28 -28
- meerk40t/extra/cag.py +112 -116
- meerk40t/extra/coolant.py +403 -0
- meerk40t/extra/encode_detect.py +198 -0
- meerk40t/extra/ezd.py +1165 -1165
- meerk40t/extra/hershey.py +835 -340
- meerk40t/extra/imageactions.py +322 -316
- meerk40t/extra/inkscape.py +630 -622
- meerk40t/extra/lbrn.py +424 -424
- meerk40t/extra/outerworld.py +284 -0
- meerk40t/extra/param_functions.py +1542 -1556
- meerk40t/extra/potrace.py +257 -253
- meerk40t/extra/serial_exchange.py +118 -0
- meerk40t/extra/updater.py +602 -453
- meerk40t/extra/vectrace.py +147 -146
- meerk40t/extra/winsleep.py +83 -83
- meerk40t/extra/xcs_reader.py +597 -0
- meerk40t/fill/fills.py +781 -335
- meerk40t/fill/patternfill.py +1061 -1061
- meerk40t/fill/patterns.py +614 -567
- meerk40t/grbl/control.py +87 -87
- meerk40t/grbl/controller.py +990 -903
- meerk40t/grbl/device.py +1081 -768
- meerk40t/grbl/driver.py +989 -771
- meerk40t/grbl/emulator.py +532 -497
- meerk40t/grbl/gcodejob.py +783 -767
- meerk40t/grbl/gui/grblconfiguration.py +373 -298
- meerk40t/grbl/gui/grblcontroller.py +485 -271
- meerk40t/grbl/gui/grblhardwareconfig.py +269 -153
- meerk40t/grbl/gui/grbloperationconfig.py +105 -0
- meerk40t/grbl/gui/gui.py +147 -116
- meerk40t/grbl/interpreter.py +44 -44
- meerk40t/grbl/loader.py +22 -22
- meerk40t/grbl/mock_connection.py +56 -56
- meerk40t/grbl/plugin.py +294 -264
- meerk40t/grbl/serial_connection.py +93 -88
- meerk40t/grbl/tcp_connection.py +81 -79
- meerk40t/grbl/ws_connection.py +112 -0
- meerk40t/gui/__init__.py +1 -1
- meerk40t/gui/about.py +2042 -296
- meerk40t/gui/alignment.py +1644 -1608
- meerk40t/gui/autoexec.py +199 -0
- meerk40t/gui/basicops.py +791 -670
- meerk40t/gui/bufferview.py +77 -71
- meerk40t/gui/busy.py +170 -133
- meerk40t/gui/choicepropertypanel.py +1673 -1469
- meerk40t/gui/consolepanel.py +706 -542
- meerk40t/gui/devicepanel.py +687 -581
- meerk40t/gui/dialogoptions.py +110 -107
- meerk40t/gui/executejob.py +316 -306
- meerk40t/gui/fonts.py +90 -90
- meerk40t/gui/functionwrapper.py +252 -0
- meerk40t/gui/gui_mixins.py +729 -0
- meerk40t/gui/guicolors.py +205 -182
- meerk40t/gui/help_assets/help_assets.py +218 -201
- meerk40t/gui/helper.py +154 -0
- meerk40t/gui/hersheymanager.py +1430 -846
- meerk40t/gui/icons.py +3422 -2747
- meerk40t/gui/imagesplitter.py +555 -508
- meerk40t/gui/keymap.py +354 -344
- meerk40t/gui/laserpanel.py +892 -806
- meerk40t/gui/laserrender.py +1470 -1232
- meerk40t/gui/lasertoolpanel.py +805 -793
- meerk40t/gui/magnetoptions.py +436 -0
- meerk40t/gui/materialmanager.py +2917 -0
- meerk40t/gui/materialtest.py +1722 -1694
- meerk40t/gui/mkdebug.py +646 -359
- meerk40t/gui/mwindow.py +163 -140
- meerk40t/gui/navigationpanels.py +2605 -2467
- meerk40t/gui/notes.py +143 -142
- meerk40t/gui/opassignment.py +414 -410
- meerk40t/gui/operation_info.py +310 -299
- meerk40t/gui/plugin.py +494 -328
- meerk40t/gui/position.py +714 -669
- meerk40t/gui/preferences.py +901 -650
- meerk40t/gui/propertypanels/attributes.py +1461 -1131
- meerk40t/gui/propertypanels/blobproperty.py +117 -114
- meerk40t/gui/propertypanels/consoleproperty.py +83 -80
- meerk40t/gui/propertypanels/gotoproperty.py +77 -0
- meerk40t/gui/propertypanels/groupproperties.py +223 -217
- meerk40t/gui/propertypanels/hatchproperty.py +489 -469
- meerk40t/gui/propertypanels/imageproperty.py +2244 -1384
- meerk40t/gui/propertypanels/inputproperty.py +59 -58
- meerk40t/gui/propertypanels/opbranchproperties.py +82 -80
- meerk40t/gui/propertypanels/operationpropertymain.py +1890 -1638
- meerk40t/gui/propertypanels/outputproperty.py +59 -58
- meerk40t/gui/propertypanels/pathproperty.py +389 -380
- meerk40t/gui/propertypanels/placementproperty.py +1214 -383
- meerk40t/gui/propertypanels/pointproperty.py +140 -136
- meerk40t/gui/propertypanels/propertywindow.py +313 -181
- meerk40t/gui/propertypanels/rasterwizardpanels.py +996 -912
- meerk40t/gui/propertypanels/regbranchproperties.py +76 -0
- meerk40t/gui/propertypanels/textproperty.py +770 -755
- meerk40t/gui/propertypanels/waitproperty.py +56 -55
- meerk40t/gui/propertypanels/warpproperty.py +121 -0
- meerk40t/gui/propertypanels/wobbleproperty.py +255 -204
- meerk40t/gui/ribbon.py +2468 -2210
- meerk40t/gui/scene/scene.py +1100 -1051
- meerk40t/gui/scene/sceneconst.py +22 -22
- meerk40t/gui/scene/scenepanel.py +439 -349
- meerk40t/gui/scene/scenespacewidget.py +365 -365
- meerk40t/gui/scene/widget.py +518 -505
- meerk40t/gui/scenewidgets/affinemover.py +215 -215
- meerk40t/gui/scenewidgets/attractionwidget.py +315 -309
- meerk40t/gui/scenewidgets/bedwidget.py +120 -97
- meerk40t/gui/scenewidgets/elementswidget.py +137 -107
- meerk40t/gui/scenewidgets/gridwidget.py +785 -745
- meerk40t/gui/scenewidgets/guidewidget.py +765 -765
- meerk40t/gui/scenewidgets/laserpathwidget.py +66 -66
- meerk40t/gui/scenewidgets/machineoriginwidget.py +86 -86
- meerk40t/gui/scenewidgets/nodeselector.py +28 -28
- meerk40t/gui/scenewidgets/rectselectwidget.py +589 -346
- meerk40t/gui/scenewidgets/relocatewidget.py +33 -33
- meerk40t/gui/scenewidgets/reticlewidget.py +83 -83
- meerk40t/gui/scenewidgets/selectionwidget.py +2952 -2756
- meerk40t/gui/simpleui.py +357 -333
- meerk40t/gui/simulation.py +2431 -2094
- meerk40t/gui/snapoptions.py +208 -203
- meerk40t/gui/spoolerpanel.py +1227 -1180
- meerk40t/gui/statusbarwidgets/defaultoperations.py +480 -353
- meerk40t/gui/statusbarwidgets/infowidget.py +520 -483
- meerk40t/gui/statusbarwidgets/opassignwidget.py +356 -355
- meerk40t/gui/statusbarwidgets/selectionwidget.py +172 -171
- meerk40t/gui/statusbarwidgets/shapepropwidget.py +754 -236
- meerk40t/gui/statusbarwidgets/statusbar.py +272 -260
- meerk40t/gui/statusbarwidgets/statusbarwidget.py +268 -270
- meerk40t/gui/statusbarwidgets/strokewidget.py +267 -251
- meerk40t/gui/themes.py +200 -78
- meerk40t/gui/tips.py +591 -0
- meerk40t/gui/toolwidgets/circlebrush.py +35 -35
- meerk40t/gui/toolwidgets/toolcircle.py +248 -242
- meerk40t/gui/toolwidgets/toolcontainer.py +82 -77
- meerk40t/gui/toolwidgets/tooldraw.py +97 -90
- meerk40t/gui/toolwidgets/toolellipse.py +219 -212
- meerk40t/gui/toolwidgets/toolimagecut.py +25 -132
- meerk40t/gui/toolwidgets/toolline.py +39 -144
- meerk40t/gui/toolwidgets/toollinetext.py +79 -236
- meerk40t/gui/toolwidgets/toollinetext_inline.py +296 -0
- meerk40t/gui/toolwidgets/toolmeasure.py +160 -216
- meerk40t/gui/toolwidgets/toolnodeedit.py +2088 -2074
- meerk40t/gui/toolwidgets/toolnodemove.py +92 -94
- meerk40t/gui/toolwidgets/toolparameter.py +754 -668
- meerk40t/gui/toolwidgets/toolplacement.py +108 -108
- meerk40t/gui/toolwidgets/toolpoint.py +68 -59
- meerk40t/gui/toolwidgets/toolpointlistbuilder.py +294 -0
- meerk40t/gui/toolwidgets/toolpointmove.py +183 -0
- meerk40t/gui/toolwidgets/toolpolygon.py +288 -403
- meerk40t/gui/toolwidgets/toolpolyline.py +38 -196
- meerk40t/gui/toolwidgets/toolrect.py +211 -207
- meerk40t/gui/toolwidgets/toolrelocate.py +72 -72
- meerk40t/gui/toolwidgets/toolribbon.py +598 -113
- meerk40t/gui/toolwidgets/tooltabedit.py +546 -0
- meerk40t/gui/toolwidgets/tooltext.py +98 -89
- meerk40t/gui/toolwidgets/toolvector.py +213 -204
- meerk40t/gui/toolwidgets/toolwidget.py +39 -39
- meerk40t/gui/usbconnect.py +98 -91
- meerk40t/gui/utilitywidgets/buttonwidget.py +18 -18
- meerk40t/gui/utilitywidgets/checkboxwidget.py +90 -90
- meerk40t/gui/utilitywidgets/controlwidget.py +14 -14
- meerk40t/gui/utilitywidgets/cyclocycloidwidget.py +343 -340
- meerk40t/gui/utilitywidgets/debugwidgets.py +148 -0
- meerk40t/gui/utilitywidgets/handlewidget.py +27 -27
- meerk40t/gui/utilitywidgets/harmonograph.py +450 -447
- meerk40t/gui/utilitywidgets/openclosewidget.py +40 -40
- meerk40t/gui/utilitywidgets/rotationwidget.py +54 -54
- meerk40t/gui/utilitywidgets/scalewidget.py +75 -75
- meerk40t/gui/utilitywidgets/seekbarwidget.py +183 -183
- meerk40t/gui/utilitywidgets/togglewidget.py +142 -142
- meerk40t/gui/utilitywidgets/toolbarwidget.py +8 -8
- meerk40t/gui/wordlisteditor.py +985 -931
- meerk40t/gui/wxmeerk40t.py +1444 -1169
- meerk40t/gui/wxmmain.py +5578 -4112
- meerk40t/gui/wxmribbon.py +1591 -1076
- meerk40t/gui/wxmscene.py +1635 -1453
- meerk40t/gui/wxmtree.py +2410 -2089
- meerk40t/gui/wxutils.py +1769 -1099
- meerk40t/gui/zmatrix.py +102 -102
- meerk40t/image/__init__.py +1 -1
- meerk40t/image/dither.py +429 -0
- meerk40t/image/imagetools.py +2778 -2269
- meerk40t/internal_plugins.py +150 -130
- meerk40t/kernel/__init__.py +63 -12
- meerk40t/kernel/channel.py +259 -212
- meerk40t/kernel/context.py +538 -538
- meerk40t/kernel/exceptions.py +41 -41
- meerk40t/kernel/functions.py +463 -414
- meerk40t/kernel/jobs.py +100 -100
- meerk40t/kernel/kernel.py +3809 -3571
- meerk40t/kernel/lifecycles.py +71 -71
- meerk40t/kernel/module.py +49 -49
- meerk40t/kernel/service.py +147 -147
- meerk40t/kernel/settings.py +383 -343
- meerk40t/lihuiyu/controller.py +883 -876
- meerk40t/lihuiyu/device.py +1181 -1069
- meerk40t/lihuiyu/driver.py +1466 -1372
- meerk40t/lihuiyu/gui/gui.py +127 -106
- meerk40t/lihuiyu/gui/lhyaccelgui.py +377 -363
- meerk40t/lihuiyu/gui/lhycontrollergui.py +741 -651
- meerk40t/lihuiyu/gui/lhydrivergui.py +470 -446
- meerk40t/lihuiyu/gui/lhyoperationproperties.py +238 -237
- meerk40t/lihuiyu/gui/tcpcontroller.py +226 -190
- meerk40t/lihuiyu/interpreter.py +53 -53
- meerk40t/lihuiyu/laserspeed.py +450 -450
- meerk40t/lihuiyu/loader.py +90 -90
- meerk40t/lihuiyu/parser.py +404 -404
- meerk40t/lihuiyu/plugin.py +101 -102
- meerk40t/lihuiyu/tcp_connection.py +111 -109
- meerk40t/main.py +231 -165
- meerk40t/moshi/builder.py +788 -781
- meerk40t/moshi/controller.py +505 -499
- meerk40t/moshi/device.py +495 -442
- meerk40t/moshi/driver.py +862 -696
- meerk40t/moshi/gui/gui.py +78 -76
- meerk40t/moshi/gui/moshicontrollergui.py +538 -522
- meerk40t/moshi/gui/moshidrivergui.py +87 -75
- meerk40t/moshi/plugin.py +43 -43
- meerk40t/network/console_server.py +102 -57
- meerk40t/network/kernelserver.py +10 -9
- meerk40t/network/tcp_server.py +142 -140
- meerk40t/network/udp_server.py +103 -77
- meerk40t/network/web_server.py +390 -0
- meerk40t/newly/controller.py +1158 -1144
- meerk40t/newly/device.py +874 -732
- meerk40t/newly/driver.py +540 -412
- meerk40t/newly/gui/gui.py +219 -188
- meerk40t/newly/gui/newlyconfig.py +116 -101
- meerk40t/newly/gui/newlycontroller.py +193 -186
- meerk40t/newly/gui/operationproperties.py +51 -51
- meerk40t/newly/mock_connection.py +82 -82
- meerk40t/newly/newly_params.py +56 -56
- meerk40t/newly/plugin.py +1214 -1246
- meerk40t/newly/usb_connection.py +322 -322
- meerk40t/rotary/gui/gui.py +52 -46
- meerk40t/rotary/gui/rotarysettings.py +240 -232
- meerk40t/rotary/rotary.py +202 -98
- meerk40t/ruida/control.py +291 -91
- meerk40t/ruida/controller.py +138 -1088
- meerk40t/ruida/device.py +672 -231
- meerk40t/ruida/driver.py +534 -472
- meerk40t/ruida/emulator.py +1494 -1491
- meerk40t/ruida/exceptions.py +4 -4
- meerk40t/ruida/gui/gui.py +71 -76
- meerk40t/ruida/gui/ruidaconfig.py +239 -72
- meerk40t/ruida/gui/ruidacontroller.py +187 -184
- meerk40t/ruida/gui/ruidaoperationproperties.py +48 -47
- meerk40t/ruida/loader.py +54 -52
- meerk40t/ruida/mock_connection.py +57 -109
- meerk40t/ruida/plugin.py +124 -87
- meerk40t/ruida/rdjob.py +2084 -945
- meerk40t/ruida/serial_connection.py +116 -0
- meerk40t/ruida/tcp_connection.py +146 -0
- meerk40t/ruida/udp_connection.py +73 -0
- meerk40t/svgelements.py +9671 -9669
- meerk40t/tools/driver_to_path.py +584 -579
- meerk40t/tools/geomstr.py +5583 -4680
- meerk40t/tools/jhfparser.py +357 -292
- meerk40t/tools/kerftest.py +904 -890
- meerk40t/tools/livinghinges.py +1168 -1033
- meerk40t/tools/pathtools.py +987 -949
- meerk40t/tools/pmatrix.py +234 -0
- meerk40t/tools/pointfinder.py +942 -942
- meerk40t/tools/polybool.py +940 -940
- meerk40t/tools/rasterplotter.py +1660 -547
- meerk40t/tools/shxparser.py +989 -901
- meerk40t/tools/ttfparser.py +726 -446
- meerk40t/tools/zinglplotter.py +595 -593
- {meerk40t-0.9.3001.dist-info → meerk40t-0.9.7010.dist-info}/LICENSE +21 -21
- {meerk40t-0.9.3001.dist-info → meerk40t-0.9.7010.dist-info}/METADATA +150 -139
- meerk40t-0.9.7010.dist-info/RECORD +445 -0
- {meerk40t-0.9.3001.dist-info → meerk40t-0.9.7010.dist-info}/WHEEL +1 -1
- {meerk40t-0.9.3001.dist-info → meerk40t-0.9.7010.dist-info}/top_level.txt +0 -1
- {meerk40t-0.9.3001.dist-info → meerk40t-0.9.7010.dist-info}/zip-safe +1 -1
- meerk40t/balormk/elementlightjob.py +0 -159
- meerk40t-0.9.3001.dist-info/RECORD +0 -437
- test/bootstrap.py +0 -63
- test/test_cli.py +0 -12
- test/test_core_cutcode.py +0 -418
- test/test_core_elements.py +0 -144
- test/test_core_plotplanner.py +0 -397
- test/test_core_viewports.py +0 -312
- test/test_drivers_grbl.py +0 -108
- test/test_drivers_lihuiyu.py +0 -443
- test/test_drivers_newly.py +0 -113
- test/test_element_degenerate_points.py +0 -43
- test/test_elements_classify.py +0 -97
- test/test_elements_penbox.py +0 -22
- test/test_file_svg.py +0 -176
- test/test_fill.py +0 -155
- test/test_geomstr.py +0 -1523
- test/test_geomstr_nodes.py +0 -18
- test/test_imagetools_actualize.py +0 -306
- test/test_imagetools_wizard.py +0 -258
- test/test_kernel.py +0 -200
- test/test_laser_speeds.py +0 -3303
- test/test_length.py +0 -57
- test/test_lifecycle.py +0 -66
- test/test_operations.py +0 -251
- test/test_operations_hatch.py +0 -57
- test/test_ruida.py +0 -19
- test/test_spooler.py +0 -22
- test/test_tools_rasterplotter.py +0 -29
- test/test_wobble.py +0 -133
- test/test_zingl.py +0 -124
- {test → meerk40t/cylinder}/__init__.py +0 -0
- /meerk40t/{core/element_commands.py → cylinder/gui/__init__.py} +0 -0
- {meerk40t-0.9.3001.dist-info → meerk40t-0.9.7010.dist-info}/entry_points.txt +0 -0
meerk40t/network/tcp_server.py
CHANGED
@@ -1,140 +1,142 @@
|
|
1
|
-
import socket
|
2
|
-
|
3
|
-
from meerk40t.kernel import Module
|
4
|
-
|
5
|
-
|
6
|
-
def plugin(kernel, lifecycle=None):
|
7
|
-
if lifecycle == "register":
|
8
|
-
_ = kernel.translation
|
9
|
-
kernel.register("module/TCPServer", TCPServer)
|
10
|
-
|
11
|
-
|
12
|
-
class TCPServer(Module):
|
13
|
-
"""
|
14
|
-
TCPServer opens up a localhost server and waits. Any connection is given its own handler.
|
15
|
-
"""
|
16
|
-
|
17
|
-
def __init__(self, context, name, port=23):
|
18
|
-
"""
|
19
|
-
Laser Server init.
|
20
|
-
|
21
|
-
@param context: Context at which this module is attached.
|
22
|
-
@param name: Name of this module
|
23
|
-
@param port: Port being used for the server.
|
24
|
-
"""
|
25
|
-
Module.__init__(self, context, name)
|
26
|
-
self.port = port
|
27
|
-
|
28
|
-
self.socket = None
|
29
|
-
self.events_channel = self.context.channel(f"server-tcp-{port}")
|
30
|
-
self.data_channel = self.context.channel(f"data-tcp-{port}")
|
31
|
-
self.context.threaded(
|
32
|
-
self.run_tcp_delegater, thread_name=f"tcp-{port}", daemon=True
|
33
|
-
)
|
34
|
-
|
35
|
-
def stop(self):
|
36
|
-
self.state = "terminate"
|
37
|
-
|
38
|
-
def module_close(self, *args, **kwargs):
|
39
|
-
_ = self.context._
|
40
|
-
self.events_channel(_("Shutting down server."))
|
41
|
-
self.state = "terminate"
|
42
|
-
if self.socket is not None:
|
43
|
-
self.socket.close()
|
44
|
-
self.socket = None
|
45
|
-
|
46
|
-
def run_tcp_delegater(self):
|
47
|
-
"""
|
48
|
-
TCP Run is a connection thread delegate. Any connections are given a different threaded
|
49
|
-
handle to interact with that connection. This thread here waits for sockets and delegates.
|
50
|
-
"""
|
51
|
-
_ = self.context._
|
52
|
-
self.socket = socket.socket()
|
53
|
-
try:
|
54
|
-
self.socket.bind(("", self.port))
|
55
|
-
self.socket.listen(1)
|
56
|
-
except OSError:
|
57
|
-
self.events_channel(_("Could not start listening."))
|
58
|
-
return
|
59
|
-
handle = 1
|
60
|
-
while self.state != "terminate":
|
61
|
-
self.events_channel(
|
62
|
-
_("Listening {name} on port {port}...").format(
|
63
|
-
name=self.name, port=self.port
|
64
|
-
)
|
65
|
-
)
|
66
|
-
connection = None
|
67
|
-
address = None
|
68
|
-
try:
|
69
|
-
connection, address = self.socket.accept()
|
70
|
-
self.events_channel(
|
71
|
-
_("Socket Connected: {address}").format(address=address)
|
72
|
-
)
|
73
|
-
self.context.threaded(
|
74
|
-
self.connection_handler(connection, address),
|
75
|
-
thread_name=f"handler-{self.port}-{handle}",
|
76
|
-
daemon=True,
|
77
|
-
)
|
78
|
-
handle += 1
|
79
|
-
except socket.timeout:
|
80
|
-
pass
|
81
|
-
except OSError:
|
82
|
-
self.events_channel(
|
83
|
-
_("Socket was killed: {address}").format(address=address)
|
84
|
-
)
|
85
|
-
if connection is not None:
|
86
|
-
connection.close()
|
87
|
-
break
|
88
|
-
except AttributeError:
|
89
|
-
self.events_channel(_("Socket did not exist to accept connection."))
|
90
|
-
break
|
91
|
-
if self.socket is not None:
|
92
|
-
self.socket.close()
|
93
|
-
|
94
|
-
def connection_handler(self, connection, address):
|
95
|
-
"""
|
96
|
-
The TCP Connection Handle, handles all connections delegated by the tcp_run() method.
|
97
|
-
The threaded context is entirely local and independent.
|
98
|
-
"""
|
99
|
-
_ = self.context._
|
100
|
-
|
101
|
-
def handle():
|
102
|
-
def send(e):
|
103
|
-
if connection is None:
|
104
|
-
return
|
105
|
-
try:
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
except
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
self.context.channel(
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
1
|
+
import socket
|
2
|
+
|
3
|
+
from meerk40t.kernel import Module
|
4
|
+
|
5
|
+
|
6
|
+
def plugin(kernel, lifecycle=None):
|
7
|
+
if lifecycle == "register":
|
8
|
+
_ = kernel.translation
|
9
|
+
kernel.register("module/TCPServer", TCPServer)
|
10
|
+
|
11
|
+
|
12
|
+
class TCPServer(Module):
|
13
|
+
"""
|
14
|
+
TCPServer opens up a localhost server and waits. Any connection is given its own handler.
|
15
|
+
"""
|
16
|
+
|
17
|
+
def __init__(self, context, name, port=23):
|
18
|
+
"""
|
19
|
+
Laser Server init.
|
20
|
+
|
21
|
+
@param context: Context at which this module is attached.
|
22
|
+
@param name: Name of this module
|
23
|
+
@param port: Port being used for the server.
|
24
|
+
"""
|
25
|
+
Module.__init__(self, context, name)
|
26
|
+
self.port = port
|
27
|
+
|
28
|
+
self.socket = None
|
29
|
+
self.events_channel = self.context.channel(f"server-tcp-{port}")
|
30
|
+
self.data_channel = self.context.channel(f"data-tcp-{port}")
|
31
|
+
self.context.threaded(
|
32
|
+
self.run_tcp_delegater, thread_name=f"tcp-{port}", daemon=True
|
33
|
+
)
|
34
|
+
|
35
|
+
def stop(self):
|
36
|
+
self.state = "terminate"
|
37
|
+
|
38
|
+
def module_close(self, *args, **kwargs):
|
39
|
+
_ = self.context._
|
40
|
+
self.events_channel(_("Shutting down server."))
|
41
|
+
self.state = "terminate"
|
42
|
+
if self.socket is not None:
|
43
|
+
self.socket.close()
|
44
|
+
self.socket = None
|
45
|
+
|
46
|
+
def run_tcp_delegater(self):
|
47
|
+
"""
|
48
|
+
TCP Run is a connection thread delegate. Any connections are given a different threaded
|
49
|
+
handle to interact with that connection. This thread here waits for sockets and delegates.
|
50
|
+
"""
|
51
|
+
_ = self.context._
|
52
|
+
self.socket = socket.socket()
|
53
|
+
try:
|
54
|
+
self.socket.bind(("", self.port))
|
55
|
+
self.socket.listen(1)
|
56
|
+
except OSError:
|
57
|
+
self.events_channel(_("Could not start listening."))
|
58
|
+
return
|
59
|
+
handle = 1
|
60
|
+
while self.state != "terminate":
|
61
|
+
self.events_channel(
|
62
|
+
_("Listening {name} on port {port}...").format(
|
63
|
+
name=self.name, port=self.port
|
64
|
+
)
|
65
|
+
)
|
66
|
+
connection = None
|
67
|
+
address = None
|
68
|
+
try:
|
69
|
+
connection, address = self.socket.accept()
|
70
|
+
self.events_channel(
|
71
|
+
_("Socket Connected: {address}").format(address=address)
|
72
|
+
)
|
73
|
+
self.context.threaded(
|
74
|
+
self.connection_handler(connection, address),
|
75
|
+
thread_name=f"handler-{self.port}-{handle}",
|
76
|
+
daemon=True,
|
77
|
+
)
|
78
|
+
handle += 1
|
79
|
+
except socket.timeout:
|
80
|
+
pass
|
81
|
+
except OSError:
|
82
|
+
self.events_channel(
|
83
|
+
_("Socket was killed: {address}").format(address=address)
|
84
|
+
)
|
85
|
+
if connection is not None:
|
86
|
+
connection.close()
|
87
|
+
break
|
88
|
+
except AttributeError:
|
89
|
+
self.events_channel(_("Socket did not exist to accept connection."))
|
90
|
+
break
|
91
|
+
if self.socket is not None:
|
92
|
+
self.socket.close()
|
93
|
+
|
94
|
+
def connection_handler(self, connection, address):
|
95
|
+
"""
|
96
|
+
The TCP Connection Handle, handles all connections delegated by the tcp_run() method.
|
97
|
+
The threaded context is entirely local and independent.
|
98
|
+
"""
|
99
|
+
_ = self.context._
|
100
|
+
|
101
|
+
def handle():
|
102
|
+
def send(e):
|
103
|
+
if connection is None:
|
104
|
+
return
|
105
|
+
try:
|
106
|
+
if isinstance(e, str):
|
107
|
+
e = bytes(e, "utf-8")
|
108
|
+
connection.send(e)
|
109
|
+
self.data_channel(f"<-- {str(e)}")
|
110
|
+
except (ConnectionAbortedError, ConnectionResetError):
|
111
|
+
connection.close()
|
112
|
+
except OSError:
|
113
|
+
# Connection is likely already closed.
|
114
|
+
if connection is not None:
|
115
|
+
connection.close()
|
116
|
+
|
117
|
+
recv = self.context.channel(f"{self.name}/recv", pure=True)
|
118
|
+
send_channel_name = f"{self.name}/send"
|
119
|
+
self.context.channel(send_channel_name, pure=True).watch(send)
|
120
|
+
while self.state != "terminate":
|
121
|
+
try:
|
122
|
+
data_from_socket = connection.recv(1024)
|
123
|
+
if len(data_from_socket):
|
124
|
+
self.data_channel(f"--> {str(data_from_socket)}")
|
125
|
+
else:
|
126
|
+
break
|
127
|
+
recv(data_from_socket)
|
128
|
+
except socket.timeout:
|
129
|
+
self.events_channel(
|
130
|
+
_("Connection to {address} timed out.").format(address=address)
|
131
|
+
)
|
132
|
+
break
|
133
|
+
except OSError:
|
134
|
+
if connection is not None:
|
135
|
+
connection.close()
|
136
|
+
break
|
137
|
+
self.context.channel(send_channel_name).unwatch(send)
|
138
|
+
self.events_channel(
|
139
|
+
_("Connection to {address} was closed.").format(address=address)
|
140
|
+
)
|
141
|
+
|
142
|
+
return handle
|
meerk40t/network/udp_server.py
CHANGED
@@ -1,77 +1,103 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
@param
|
26
|
-
@param
|
27
|
-
|
28
|
-
|
29
|
-
self
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
self.context.channel(f"{
|
34
|
-
self.
|
35
|
-
|
36
|
-
|
37
|
-
self.
|
38
|
-
self.
|
39
|
-
self.
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
1
|
+
"""
|
2
|
+
UDPServer opens up a localhost data server and waits for UDP packets. Utilizing pure MK channels.
|
3
|
+
|
4
|
+
Any packet the server picks up will be sent to the `{path}/recv` channel.
|
5
|
+
Data sent to the `{path}/send` channel is sent as a reply to the last seen UDP packet.
|
6
|
+
|
7
|
+
"""
|
8
|
+
|
9
|
+
import socket
|
10
|
+
|
11
|
+
from meerk40t.kernel import Module
|
12
|
+
|
13
|
+
|
14
|
+
def plugin(kernel, lifecycle=None):
|
15
|
+
if lifecycle == "register":
|
16
|
+
_ = kernel.translation
|
17
|
+
kernel.register("module/UDPServer", UDPServer)
|
18
|
+
|
19
|
+
|
20
|
+
class UDPServer(Module):
|
21
|
+
def __init__(self, context, name, port=23, udp_address=None):
|
22
|
+
"""
|
23
|
+
Laser Server init.
|
24
|
+
|
25
|
+
@param context: Context at which this module is attached.
|
26
|
+
@param name: Name of this module.
|
27
|
+
@param port: UDP listen port.
|
28
|
+
"""
|
29
|
+
Module.__init__(self, context, name)
|
30
|
+
|
31
|
+
self.udp_address = udp_address
|
32
|
+
|
33
|
+
self.events_channel = self.context.channel(f"server-udp-{port}")
|
34
|
+
self.send_channel = self.context.channel(f"{name}/send", pure=True)
|
35
|
+
self.recv_channel = self.context.channel(f"{name}/recv", pure=True)
|
36
|
+
|
37
|
+
self.listen_address = ""
|
38
|
+
self.listen_port = port
|
39
|
+
self.socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
|
40
|
+
self.socket.settimeout(2)
|
41
|
+
self.socket.bind((self.listen_address, self.listen_port))
|
42
|
+
|
43
|
+
def module_open(self, *args, **kwargs):
|
44
|
+
"""
|
45
|
+
Module opened. Watch send_channel -> Send and run the upd_listener thread.
|
46
|
+
@param args:
|
47
|
+
@param kwargs:
|
48
|
+
@return:
|
49
|
+
"""
|
50
|
+
self.send_channel.watch(self.send)
|
51
|
+
self.context.threaded(self.run_udp_listener, thread_name=self.name, daemon=True)
|
52
|
+
|
53
|
+
def module_close(self, *args, **kwargs):
|
54
|
+
_ = self.context._
|
55
|
+
self.send_channel.unwatch(self.send)
|
56
|
+
|
57
|
+
self.events_channel(_("Shutting down server."))
|
58
|
+
if self.socket is not None:
|
59
|
+
self.socket.close()
|
60
|
+
self.socket = None
|
61
|
+
self.state = "terminate"
|
62
|
+
|
63
|
+
def send(self, message, address=None):
|
64
|
+
"""
|
65
|
+
Watching the {name}/send channel. This will receive any data sent along that channel. And send it to the last
|
66
|
+
address at which data was received.
|
67
|
+
|
68
|
+
@param message: Message to send.
|
69
|
+
@param address: (address,port) override if not simply replying.
|
70
|
+
@return:
|
71
|
+
"""
|
72
|
+
_ = self.context._
|
73
|
+
if self.udp_address is None:
|
74
|
+
self.events_channel(
|
75
|
+
_(
|
76
|
+
"No UDP packet can be sent as reply to a host that has never made contact."
|
77
|
+
)
|
78
|
+
)
|
79
|
+
return
|
80
|
+
if address:
|
81
|
+
self.udp_address = address
|
82
|
+
self.socket.sendto(message, self.udp_address)
|
83
|
+
|
84
|
+
def run_udp_listener(self):
|
85
|
+
"""
|
86
|
+
UDP Thread Listener. Attempt to read UDP socket. On data read, send to `.recv_channel` ({name}/recv).
|
87
|
+
@return:
|
88
|
+
"""
|
89
|
+
_ = self.context._
|
90
|
+
self.events_channel(
|
91
|
+
_("UDP Socket({port}) Listening.").format(port=self.listen_port)
|
92
|
+
)
|
93
|
+
try:
|
94
|
+
while self.state not in ("end", "terminate"):
|
95
|
+
try:
|
96
|
+
message, address = self.socket.recvfrom(1024)
|
97
|
+
except (socket.timeout, AttributeError):
|
98
|
+
continue
|
99
|
+
if address is not None:
|
100
|
+
self.udp_address = address
|
101
|
+
self.recv_channel(message)
|
102
|
+
except OSError:
|
103
|
+
pass
|