meerk40t 0.9.3001__py2.py3-none-any.whl → 0.9.7020__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 +1194 -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 +1858 -1507
- meerk40t/core/elements/clipboard.py +229 -219
- meerk40t/core/elements/element_treeops.py +4595 -2837
- meerk40t/core/elements/element_types.py +125 -105
- meerk40t/core/elements/elements.py +4315 -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 +934 -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/testcases.py +105 -0
- 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 +463 -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 +204 -0
- meerk40t/extra/ezd.py +1165 -1165
- meerk40t/extra/hershey.py +834 -340
- meerk40t/extra/imageactions.py +322 -316
- meerk40t/extra/inkscape.py +628 -622
- meerk40t/extra/lbrn.py +424 -424
- meerk40t/extra/outerworld.py +283 -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 +1084 -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 +232 -133
- meerk40t/gui/choicepropertypanel.py +1662 -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 +1440 -846
- meerk40t/gui/icons.py +3422 -2747
- meerk40t/gui/imagesplitter.py +555 -508
- meerk40t/gui/keymap.py +354 -344
- meerk40t/gui/laserpanel.py +897 -806
- meerk40t/gui/laserrender.py +1470 -1232
- meerk40t/gui/lasertoolpanel.py +805 -793
- meerk40t/gui/magnetoptions.py +436 -0
- meerk40t/gui/materialmanager.py +2944 -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 +500 -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 +2471 -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 +592 -346
- meerk40t/gui/scenewidgets/relocatewidget.py +33 -33
- meerk40t/gui/scenewidgets/reticlewidget.py +83 -83
- meerk40t/gui/scenewidgets/selectionwidget.py +2958 -2756
- meerk40t/gui/simpleui.py +362 -333
- meerk40t/gui/simulation.py +2451 -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 +590 -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 +163 -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 +1447 -1169
- meerk40t/gui/wxmmain.py +5644 -4112
- meerk40t/gui/wxmribbon.py +1591 -1076
- meerk40t/gui/wxmscene.py +1631 -1453
- meerk40t/gui/wxmtree.py +2416 -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 +2793 -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 +3828 -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 +140 -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 +404 -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 +676 -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 +941 -940
- meerk40t/tools/rasterplotter.py +1660 -547
- meerk40t/tools/shxparser.py +1047 -901
- meerk40t/tools/ttfparser.py +726 -446
- meerk40t/tools/zinglplotter.py +595 -593
- {meerk40t-0.9.3001.dist-info → meerk40t-0.9.7020.dist-info}/LICENSE +21 -21
- {meerk40t-0.9.3001.dist-info → meerk40t-0.9.7020.dist-info}/METADATA +150 -139
- meerk40t-0.9.7020.dist-info/RECORD +446 -0
- {meerk40t-0.9.3001.dist-info → meerk40t-0.9.7020.dist-info}/WHEEL +1 -1
- {meerk40t-0.9.3001.dist-info → meerk40t-0.9.7020.dist-info}/top_level.txt +0 -1
- {meerk40t-0.9.3001.dist-info → meerk40t-0.9.7020.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.7020.dist-info}/entry_points.txt +0 -0
@@ -1,113 +1,156 @@
|
|
1
|
-
from copy import copy
|
2
|
-
|
3
|
-
from meerk40t.core.node.node import Node
|
4
|
-
from meerk40t.
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
self.
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
self.
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
nd
|
25
|
-
nd["
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
self.
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
min(
|
53
|
-
|
54
|
-
max(
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
default_map.
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
def
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
if
|
108
|
-
if
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
1
|
+
from copy import copy
|
2
|
+
|
3
|
+
from meerk40t.core.node.node import Node
|
4
|
+
from meerk40t.core.units import UNITS_PER_INCH
|
5
|
+
from meerk40t.svgelements import Matrix
|
6
|
+
|
7
|
+
|
8
|
+
class ImageRasterNode(Node):
|
9
|
+
"""
|
10
|
+
ImageRasterNode is a basic image type. Its information is backed by a raster.
|
11
|
+
"""
|
12
|
+
|
13
|
+
def __init__(self, **kwargs):
|
14
|
+
self.image = None
|
15
|
+
self.matrix = None
|
16
|
+
super().__init__(type="image raster", **kwargs)
|
17
|
+
self._formatter = "{element_type} {id} {width}x{height} @{dpi}"
|
18
|
+
if self.matrix is None:
|
19
|
+
self.matrix = Matrix()
|
20
|
+
self._can_rotate = False
|
21
|
+
self._can_skew = False
|
22
|
+
|
23
|
+
def __copy__(self):
|
24
|
+
nd = self.node_dict
|
25
|
+
nd["matrix"] = copy(self.matrix)
|
26
|
+
nd["image"] = copy(self.image)
|
27
|
+
return ImageRasterNode(**nd)
|
28
|
+
|
29
|
+
def __repr__(self):
|
30
|
+
return f"{self.__class__.__name__}('{self.type}', {str(self.image)}, {str(self._parent)})"
|
31
|
+
|
32
|
+
def as_image(self):
|
33
|
+
return self.image, self.bbox()
|
34
|
+
|
35
|
+
def preprocess(self, context, matrix, plan):
|
36
|
+
"""
|
37
|
+
Preprocess step during the cut planning stages.
|
38
|
+
|
39
|
+
We require a context to calculate the correct step values relative to the device
|
40
|
+
"""
|
41
|
+
self.matrix *= matrix
|
42
|
+
self.set_dirty_bounds()
|
43
|
+
|
44
|
+
def bbox(self, transformed=True, with_stroke=False):
|
45
|
+
image_width, image_height = self.image.size
|
46
|
+
matrix = self.matrix
|
47
|
+
x0, y0 = matrix.point_in_matrix_space((0, 0))
|
48
|
+
x1, y1 = matrix.point_in_matrix_space((image_width, image_height))
|
49
|
+
x2, y2 = matrix.point_in_matrix_space((0, image_height))
|
50
|
+
x3, y3 = matrix.point_in_matrix_space((image_width, 0))
|
51
|
+
return (
|
52
|
+
min(x0, x1, x2, x3),
|
53
|
+
min(y0, y1, y2, y3),
|
54
|
+
max(x0, x1, x2, x3),
|
55
|
+
max(y0, y1, y2, y3),
|
56
|
+
)
|
57
|
+
|
58
|
+
def default_map(self, default_map=None):
|
59
|
+
default_map = super().default_map(default_map=default_map)
|
60
|
+
default_map.update(self.__dict__)
|
61
|
+
image = self.image
|
62
|
+
|
63
|
+
pil_image, bounds = self.image, self.bounds
|
64
|
+
|
65
|
+
try:
|
66
|
+
default_map["width"] = image.width
|
67
|
+
default_map["height"] = image.height
|
68
|
+
default_map["offset_x"] = bounds[0]
|
69
|
+
default_map["offset_y"] = bounds[1]
|
70
|
+
except:
|
71
|
+
default_map["width"] = 0
|
72
|
+
default_map["height"] = 0
|
73
|
+
default_map["offset_x"] = 0
|
74
|
+
default_map["offset_y"] = 0
|
75
|
+
default_map["step_x"] = 1
|
76
|
+
default_map["step_y"] = 1
|
77
|
+
default_map["dpi"] = 1
|
78
|
+
return default_map
|
79
|
+
|
80
|
+
# Get steps from individual images
|
81
|
+
image_width, image_height = pil_image.size
|
82
|
+
expected_width = bounds[2] - bounds[0]
|
83
|
+
expected_height = bounds[3] - bounds[1]
|
84
|
+
step_x = expected_width / image_width
|
85
|
+
step_y = expected_height / image_height
|
86
|
+
default_map["step_x"] = step_x
|
87
|
+
default_map["step_y"] = step_y
|
88
|
+
dpi_x = float(UNITS_PER_INCH / step_x)
|
89
|
+
dpi_y = float(UNITS_PER_INCH / step_y)
|
90
|
+
default_map["dpi"] = round((dpi_x + dpi_y) / 2)
|
91
|
+
default_map["element_type"] = "Image"
|
92
|
+
return default_map
|
93
|
+
|
94
|
+
def can_drop(self, drag_node):
|
95
|
+
# Dragging element into element.
|
96
|
+
return bool(
|
97
|
+
hasattr(drag_node, "as_geometry") or
|
98
|
+
hasattr(drag_node, "as_image") or
|
99
|
+
(drag_node.type.startswith("op ") and drag_node.type != "op dots") or
|
100
|
+
drag_node.type in ("file", "group")
|
101
|
+
)
|
102
|
+
|
103
|
+
def drop(self, drag_node, modify=True, flag=False):
|
104
|
+
# Dragging element into element.
|
105
|
+
if not self.can_drop(drag_node):
|
106
|
+
return False
|
107
|
+
if hasattr(drag_node, "as_geometry") or hasattr(drag_node, "as_image") or drag_node.type in ("file", "group"):
|
108
|
+
if modify:
|
109
|
+
self.insert_sibling(drag_node)
|
110
|
+
return True
|
111
|
+
elif drag_node.type.startswith("op"):
|
112
|
+
# If we drag an operation to this node,
|
113
|
+
# then we will reverse the game
|
114
|
+
return drag_node.drop(self, modify=modify, flag=flag)
|
115
|
+
return False
|
116
|
+
|
117
|
+
def notify_scaled(self, *args, **kwargs):
|
118
|
+
super().notify_scaled(*args, **kwargs)
|
119
|
+
self.notify_update()
|
120
|
+
|
121
|
+
def revalidate_points(self):
|
122
|
+
bounds = self.bounds
|
123
|
+
if bounds is None:
|
124
|
+
return
|
125
|
+
if len(self._points) < 9:
|
126
|
+
self._points.extend([None] * (9 - len(self._points)))
|
127
|
+
self._points[0] = [bounds[0], bounds[1], "bounds top_left"]
|
128
|
+
self._points[1] = [bounds[2], bounds[1], "bounds top_right"]
|
129
|
+
self._points[2] = [bounds[0], bounds[3], "bounds bottom_left"]
|
130
|
+
self._points[3] = [bounds[2], bounds[3], "bounds bottom_right"]
|
131
|
+
cx = (bounds[0] + bounds[2]) / 2
|
132
|
+
cy = (bounds[1] + bounds[3]) / 2
|
133
|
+
self._points[4] = [cx, cy, "bounds center_center"]
|
134
|
+
self._points[5] = [cx, bounds[1], "bounds top_center"]
|
135
|
+
self._points[6] = [cx, bounds[3], "bounds bottom_center"]
|
136
|
+
self._points[7] = [bounds[0], cy, "bounds center_left"]
|
137
|
+
self._points[8] = [bounds[2], cy, "bounds center_right"]
|
138
|
+
|
139
|
+
def update_point(self, index, point):
|
140
|
+
return False
|
141
|
+
|
142
|
+
def add_point(self, point, index=None):
|
143
|
+
return False
|
144
|
+
|
145
|
+
@property
|
146
|
+
def opaque_image(self):
|
147
|
+
from PIL import Image
|
148
|
+
|
149
|
+
img = self.image
|
150
|
+
if img is not None:
|
151
|
+
if img.mode == "RGBA":
|
152
|
+
r, g, b, a = img.split()
|
153
|
+
background = Image.new("RGB", img.size, "white")
|
154
|
+
background.paste(img, mask=a)
|
155
|
+
img = background
|
156
|
+
return img
|
meerk40t/core/node/layernode.py
CHANGED
@@ -1,31 +1,31 @@
|
|
1
|
-
from meerk40t.core.node.node import Node
|
2
|
-
|
3
|
-
|
4
|
-
class LayerNode(Node):
|
5
|
-
"""
|
6
|
-
Bootstrapped type: 'layer'
|
7
|
-
"""
|
8
|
-
|
9
|
-
def __init__(self, **kwargs):
|
10
|
-
self.layer_name = None
|
11
|
-
super().__init__(type="layer", **kwargs)
|
12
|
-
self._formatter = "{element_type} {id} ({children} elems)"
|
13
|
-
|
14
|
-
def default_map(self, default_map=None):
|
15
|
-
default_map = super().default_map(default_map=default_map)
|
16
|
-
default_map["name"] = self.layer_name
|
17
|
-
default_map["element_type"] = "Layer"
|
18
|
-
default_map["children"] = str(len(self.count_children()))
|
19
|
-
return default_map
|
20
|
-
|
21
|
-
def notify_selected(self, node=None, **kwargs):
|
22
|
-
if node is self:
|
23
|
-
if hasattr(self.parent, "activate"):
|
24
|
-
self.parent.activate(self.layer_name)
|
25
|
-
|
26
|
-
def drop(self, drag_node, modify=True):
|
27
|
-
return False
|
28
|
-
|
29
|
-
@property
|
30
|
-
def bounds(self):
|
31
|
-
return None
|
1
|
+
from meerk40t.core.node.node import Node
|
2
|
+
|
3
|
+
|
4
|
+
class LayerNode(Node):
|
5
|
+
"""
|
6
|
+
Bootstrapped type: 'layer'
|
7
|
+
"""
|
8
|
+
|
9
|
+
def __init__(self, **kwargs):
|
10
|
+
self.layer_name = None
|
11
|
+
super().__init__(type="layer", **kwargs)
|
12
|
+
self._formatter = "{element_type} {id} ({children} elems)"
|
13
|
+
|
14
|
+
def default_map(self, default_map=None):
|
15
|
+
default_map = super().default_map(default_map=default_map)
|
16
|
+
default_map["name"] = self.layer_name
|
17
|
+
default_map["element_type"] = "Layer"
|
18
|
+
default_map["children"] = str(len(self.count_children()))
|
19
|
+
return default_map
|
20
|
+
|
21
|
+
def notify_selected(self, node=None, **kwargs):
|
22
|
+
if node is self:
|
23
|
+
if hasattr(self.parent, "activate"):
|
24
|
+
self.parent.activate(self.layer_name)
|
25
|
+
|
26
|
+
def drop(self, drag_node, modify=True, flag=False):
|
27
|
+
return False
|
28
|
+
|
29
|
+
@property
|
30
|
+
def bounds(self):
|
31
|
+
return None
|
meerk40t/core/node/mixins.py
CHANGED
@@ -1,107 +1,135 @@
|
|
1
|
-
"""
|
2
|
-
Mixins for nodes are aspects of code which can and should be used between multiple different nodes which convey some
|
3
|
-
basic functionality.
|
4
|
-
|
5
|
-
The use of ABC allows @abstractmethod decorators which require any subclass to implement the required method.
|
6
|
-
"""
|
7
|
-
|
8
|
-
from abc import ABC
|
9
|
-
from math import sqrt
|
10
|
-
|
11
|
-
|
12
|
-
class Stroked(ABC):
|
13
|
-
"""
|
14
|
-
Stroked nodes provide a stroke_scaled matrix controlled stroke mixin. Such that the stroke scaling can be enabled
|
15
|
-
and disabled, and it will increase or decrease the implied_stroke_width. If stroke scaling is disabled then the
|
16
|
-
stroke_width is independent to the scaling of the node (dictated by the .matrix attribute).
|
17
|
-
"""
|
18
|
-
|
19
|
-
def __init__(self, *args, **kwargs):
|
20
|
-
super().__init__()
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
@
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
self.
|
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
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
1
|
+
"""
|
2
|
+
Mixins for nodes are aspects of code which can and should be used between multiple different nodes which convey some
|
3
|
+
basic functionality.
|
4
|
+
|
5
|
+
The use of ABC allows @abstractmethod decorators which require any subclass to implement the required method.
|
6
|
+
"""
|
7
|
+
|
8
|
+
from abc import ABC
|
9
|
+
from math import sqrt
|
10
|
+
|
11
|
+
|
12
|
+
class Stroked(ABC):
|
13
|
+
"""
|
14
|
+
Stroked nodes provide a stroke_scaled matrix controlled stroke mixin. Such that the stroke scaling can be enabled
|
15
|
+
and disabled, and it will increase or decrease the implied_stroke_width. If stroke scaling is disabled then the
|
16
|
+
stroke_width is independent to the scaling of the node (dictated by the .matrix attribute).
|
17
|
+
"""
|
18
|
+
|
19
|
+
def __init__(self, *args, **kwargs):
|
20
|
+
super().__init__()
|
21
|
+
self._acts_as_keyhole = False
|
22
|
+
|
23
|
+
@property
|
24
|
+
def stroke_scaled(self):
|
25
|
+
return self.stroke_scale
|
26
|
+
|
27
|
+
@stroke_scaled.setter
|
28
|
+
def stroke_scaled(self, v):
|
29
|
+
"""
|
30
|
+
Setting stroke_scale directly will not resize the stroke-width based on current scaling. This function allows
|
31
|
+
the toggling of the stroke-scaling without the current stroke_width being affected.
|
32
|
+
|
33
|
+
@param v:
|
34
|
+
@return:
|
35
|
+
"""
|
36
|
+
if bool(v) == bool(self.stroke_scale):
|
37
|
+
# Unchanged.
|
38
|
+
return
|
39
|
+
if not v:
|
40
|
+
self.stroke_width *= self.stroke_factor
|
41
|
+
self.stroke_width_zero()
|
42
|
+
self.stroke_scale = v
|
43
|
+
|
44
|
+
@property
|
45
|
+
def implied_stroke_width(self):
|
46
|
+
"""
|
47
|
+
The implied stroke width is stroke_width if not scaled or the scaled stroke_width if scaled.
|
48
|
+
|
49
|
+
@return:
|
50
|
+
"""
|
51
|
+
if self.stroke_scale:
|
52
|
+
factor = self.stroke_factor
|
53
|
+
else:
|
54
|
+
factor = 1
|
55
|
+
if hasattr(self, "stroke"):
|
56
|
+
# print (f"Have stroke {self.stroke}, {type(self.stroke).__name__}")
|
57
|
+
if self.stroke is None or self.stroke.argb is None:
|
58
|
+
# print ("set to zero")
|
59
|
+
factor = 0
|
60
|
+
|
61
|
+
return self.stroke_width * factor
|
62
|
+
|
63
|
+
@property
|
64
|
+
def stroke_factor(self):
|
65
|
+
"""
|
66
|
+
The stroke factor is the ratio of the new to old stroke-width scale.
|
67
|
+
|
68
|
+
@return:
|
69
|
+
"""
|
70
|
+
matrix = self.matrix
|
71
|
+
stroke_one = sqrt(abs(matrix.determinant))
|
72
|
+
try:
|
73
|
+
return stroke_one / self._stroke_zero
|
74
|
+
except (AttributeError, ZeroDivisionError, TypeError):
|
75
|
+
return 1.0
|
76
|
+
|
77
|
+
def stroke_reify(self):
|
78
|
+
"""Set the stroke width to the real stroke width."""
|
79
|
+
if self.stroke_scale:
|
80
|
+
self.stroke_width *= self.stroke_factor
|
81
|
+
self.stroke_width_zero()
|
82
|
+
|
83
|
+
def stroke_width_zero(self):
|
84
|
+
"""
|
85
|
+
Ensures the current stroke scale is marked as stroke_zero.
|
86
|
+
@return:
|
87
|
+
"""
|
88
|
+
matrix = self.matrix
|
89
|
+
self._stroke_zero = sqrt(abs(matrix.determinant))
|
90
|
+
|
91
|
+
|
92
|
+
class FunctionalParameter(ABC):
|
93
|
+
"""
|
94
|
+
Functional Parameters mixin allows the use and utility of functional parameters for this node type.
|
95
|
+
"""
|
96
|
+
|
97
|
+
def __init__(self, *args, **kwargs):
|
98
|
+
self.mkparam = None
|
99
|
+
super().__init__()
|
100
|
+
|
101
|
+
@property
|
102
|
+
def functional_parameter(self):
|
103
|
+
return self.mkparam
|
104
|
+
|
105
|
+
@functional_parameter.setter
|
106
|
+
def functional_parameter(self, value):
|
107
|
+
if isinstance(value, (list, tuple)):
|
108
|
+
self.mkparam = value
|
109
|
+
|
110
|
+
|
111
|
+
class LabelDisplay(ABC):
|
112
|
+
"""
|
113
|
+
Any node inheriting this allow the display of the label on the scene
|
114
|
+
"""
|
115
|
+
|
116
|
+
def __init__(self, *args, **kwargs):
|
117
|
+
self.label_display = False
|
118
|
+
super().__init__()
|
119
|
+
|
120
|
+
|
121
|
+
class Suppressable(ABC):
|
122
|
+
"""
|
123
|
+
Any node inheriting this can be suppressed
|
124
|
+
"""
|
125
|
+
|
126
|
+
def __init__(self, *args, **kwargs):
|
127
|
+
self.hidden = False
|
128
|
+
if "hidden" in kwargs:
|
129
|
+
if isinstance(kwargs["hidden"], str):
|
130
|
+
if kwargs["hidden"].lower() == "true":
|
131
|
+
kwargs["hidden"] = True
|
132
|
+
else:
|
133
|
+
kwargs["hidden"] = False
|
134
|
+
self.hidden = kwargs["hidden"]
|
135
|
+
super().__init__()
|