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
@@ -1,40 +1,37 @@
|
|
1
|
-
"""
|
2
|
-
Placements are representations of a laserjob origin.
|
3
|
-
A project may contain multiple such placements, for every placement
|
4
|
-
a copy of the plan will be executed with the placement indicating
|
5
|
-
the relative position
|
6
|
-
"""
|
7
|
-
|
8
|
-
from meerk40t.core.node.node import Node
|
9
|
-
from meerk40t.svgelements import Matrix
|
10
|
-
|
11
|
-
|
12
|
-
class PlaceCurrentNode(Node):
|
13
|
-
"""
|
14
|
-
PlacePointNode is the bootstrapped node type for the 'place point' type.
|
15
|
-
"""
|
16
|
-
|
17
|
-
def __init__(self, **kwargs):
|
18
|
-
super().__init__(type="place current", **kwargs)
|
19
|
-
# Active?
|
20
|
-
self.output = True
|
21
|
-
self._formatter = "{enabled}{element_type}"
|
22
|
-
|
23
|
-
def placements(self, context, outline, matrix, plan):
|
24
|
-
if outline is None:
|
25
|
-
return
|
26
|
-
x, y = context.device.native
|
27
|
-
x -= outline[0][0]
|
28
|
-
y -= outline[0][1]
|
29
|
-
shift_matrix = Matrix.translate(x, y)
|
30
|
-
yield matrix * shift_matrix
|
31
|
-
|
32
|
-
def default_map(self, default_map=None):
|
33
|
-
default_map = super().default_map(default_map=default_map)
|
34
|
-
default_map["element_type"] = "Placement: Current Position"
|
35
|
-
default_map["enabled"] = "(Disabled) " if not self.output else ""
|
36
|
-
default_map.update(self.__dict__)
|
37
|
-
return default_map
|
38
|
-
|
39
|
-
def drop(self, drag_node, modify=True):
|
40
|
-
return False
|
1
|
+
"""
|
2
|
+
Placements are representations of a laserjob origin.
|
3
|
+
A project may contain multiple such placements, for every placement
|
4
|
+
a copy of the plan will be executed with the placement indicating
|
5
|
+
the relative position
|
6
|
+
"""
|
7
|
+
|
8
|
+
from meerk40t.core.node.node import Node
|
9
|
+
from meerk40t.svgelements import Matrix
|
10
|
+
|
11
|
+
|
12
|
+
class PlaceCurrentNode(Node):
|
13
|
+
"""
|
14
|
+
PlacePointNode is the bootstrapped node type for the 'place point' type.
|
15
|
+
"""
|
16
|
+
|
17
|
+
def __init__(self, **kwargs):
|
18
|
+
super().__init__(type="place current", **kwargs)
|
19
|
+
# Active?
|
20
|
+
self.output = True
|
21
|
+
self._formatter = "{enabled}{element_type}"
|
22
|
+
|
23
|
+
def placements(self, context, outline, matrix, plan):
|
24
|
+
if outline is None:
|
25
|
+
return
|
26
|
+
x, y = context.device.native
|
27
|
+
x -= outline[0][0]
|
28
|
+
y -= outline[0][1]
|
29
|
+
shift_matrix = Matrix.translate(x, y)
|
30
|
+
yield matrix * shift_matrix
|
31
|
+
|
32
|
+
def default_map(self, default_map=None):
|
33
|
+
default_map = super().default_map(default_map=default_map)
|
34
|
+
default_map["element_type"] = "Placement: Current Position"
|
35
|
+
default_map["enabled"] = "(Disabled) " if not self.output else ""
|
36
|
+
default_map.update(self.__dict__)
|
37
|
+
return default_map
|
@@ -1,126 +1,329 @@
|
|
1
|
-
"""
|
2
|
-
Placements are representations of a laserjob origin.
|
3
|
-
A project may contain multiple such placements, for every placement
|
4
|
-
a copy of the plan will be executed with the placement indicating
|
5
|
-
the relative position
|
6
|
-
"""
|
7
|
-
|
8
|
-
from
|
9
|
-
|
10
|
-
from meerk40t.
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
"""
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
self
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
if self.
|
62
|
-
self.
|
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
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
1
|
+
"""
|
2
|
+
Placements are representations of a laserjob origin.
|
3
|
+
A project may contain multiple such placements, for every placement
|
4
|
+
a copy of the plan will be executed with the placement indicating
|
5
|
+
the relative position
|
6
|
+
"""
|
7
|
+
import ast
|
8
|
+
from math import tau
|
9
|
+
|
10
|
+
from meerk40t.core.node.node import Node
|
11
|
+
from meerk40t.core.units import Angle, Length
|
12
|
+
from meerk40t.svgelements import Matrix
|
13
|
+
|
14
|
+
|
15
|
+
class PlacePointNode(Node):
|
16
|
+
"""
|
17
|
+
PlacePointNode is the bootstrapped node type for the 'place point' type.
|
18
|
+
"""
|
19
|
+
|
20
|
+
def __init__(
|
21
|
+
self,
|
22
|
+
x=0,
|
23
|
+
y=0,
|
24
|
+
rotation=0,
|
25
|
+
corner=0,
|
26
|
+
loops=1,
|
27
|
+
dx=0,
|
28
|
+
dy=0,
|
29
|
+
nx=1,
|
30
|
+
ny=1,
|
31
|
+
alternating_dx=0,
|
32
|
+
alternating_dy=0,
|
33
|
+
alternate_rot_x=False,
|
34
|
+
alternate_rot_y=False,
|
35
|
+
orientation=0,
|
36
|
+
start_index=0,
|
37
|
+
repetitions=0,
|
38
|
+
**kwargs,
|
39
|
+
):
|
40
|
+
self.x = x
|
41
|
+
self.y = y
|
42
|
+
self.dx = dx
|
43
|
+
self.dy = dy
|
44
|
+
self.nx = nx
|
45
|
+
self.ny = ny
|
46
|
+
self.start_index = start_index
|
47
|
+
self.repetitions = repetitions
|
48
|
+
"""
|
49
|
+
Orientation defines the sequence of placement points
|
50
|
+
0 = standard
|
51
|
+
1 = Boustrodephon - horizontal (snake movement along the rows)
|
52
|
+
2 = Boustrodephon - vertical (snake movement along the columns)
|
53
|
+
Example for 3 x 3 grid
|
54
|
+
Standard Horizontal Vertical
|
55
|
+
1 2 3 1 2 3 1 6 7
|
56
|
+
4 5 6 6 5 4 2 5 8
|
57
|
+
7 8 9 7 8 9 3 4 9
|
58
|
+
|
59
|
+
"""
|
60
|
+
self.orientation = orientation
|
61
|
+
if self.orientation is None or self.orientation not in (0, 1, 2):
|
62
|
+
self.orientation = 0
|
63
|
+
# Alternating are factors that decide if and by what amount
|
64
|
+
# every other line will be displaced (alternating dy)
|
65
|
+
# and/or every column will be displaced (alternating dx)
|
66
|
+
# These are factors between -1 and +1
|
67
|
+
self.alternating_dx = alternating_dx
|
68
|
+
self.alternating_dy = alternating_dy
|
69
|
+
self.alternate_rot_x = alternate_rot_x
|
70
|
+
self.alternate_rot_y = alternate_rot_y
|
71
|
+
self.rotation = rotation
|
72
|
+
self.corner = corner
|
73
|
+
self.loops = loops
|
74
|
+
self.output = True
|
75
|
+
super().__init__(type="place point", **kwargs)
|
76
|
+
self._formatter = (
|
77
|
+
"{enabled}{loops}{element_type}{grid} {corner} {x} {y} {rotation}"
|
78
|
+
)
|
79
|
+
self.validate()
|
80
|
+
|
81
|
+
def validate(self):
|
82
|
+
def _valid_bool(field):
|
83
|
+
if isinstance(field, str):
|
84
|
+
try:
|
85
|
+
value = bool(ast.literal_eval(field))
|
86
|
+
except (ValueError, SyntaxError):
|
87
|
+
value = False
|
88
|
+
else:
|
89
|
+
try:
|
90
|
+
value = bool(field)
|
91
|
+
except ValueError:
|
92
|
+
value = False
|
93
|
+
return value
|
94
|
+
|
95
|
+
def _valid_length(field):
|
96
|
+
try:
|
97
|
+
if isinstance(field, str):
|
98
|
+
value = float(Length(field))
|
99
|
+
elif isinstance(field, Length):
|
100
|
+
value = float(field)
|
101
|
+
else:
|
102
|
+
value = field
|
103
|
+
except ValueError:
|
104
|
+
value = 0
|
105
|
+
return value
|
106
|
+
|
107
|
+
def _valid_angle(field):
|
108
|
+
try:
|
109
|
+
if isinstance(field, str):
|
110
|
+
value = Angle(field).radians
|
111
|
+
elif isinstance(field, Angle):
|
112
|
+
value = field.radians
|
113
|
+
else:
|
114
|
+
value = field
|
115
|
+
except ValueError:
|
116
|
+
value = 0
|
117
|
+
return value
|
118
|
+
|
119
|
+
def _valid_int(field, minim=None, maxim=None):
|
120
|
+
# if field is None:
|
121
|
+
# if minim is None:
|
122
|
+
# value = 0
|
123
|
+
# else:
|
124
|
+
# value = minim
|
125
|
+
try:
|
126
|
+
value = int(field)
|
127
|
+
if minim is not None and value < minim:
|
128
|
+
value = minim
|
129
|
+
if maxim is not None and value > maxim:
|
130
|
+
value = maxim
|
131
|
+
except ValueError:
|
132
|
+
value = minim
|
133
|
+
return value
|
134
|
+
|
135
|
+
def _valid_float(field, minim=None, maxim=None):
|
136
|
+
# if field is None:
|
137
|
+
# if minim is None:
|
138
|
+
# value = 0
|
139
|
+
# else:
|
140
|
+
# value = minim
|
141
|
+
try:
|
142
|
+
value = float(field)
|
143
|
+
if minim is not None and value < minim:
|
144
|
+
value = minim
|
145
|
+
if maxim is not None and value > maxim:
|
146
|
+
value = maxim
|
147
|
+
except ValueError:
|
148
|
+
value = minim
|
149
|
+
return value
|
150
|
+
|
151
|
+
self.output = _valid_bool(self.output)
|
152
|
+
self.alternate_rot_x = _valid_bool(self.alternate_rot_x)
|
153
|
+
self.alternate_rot_y = _valid_bool(self.alternate_rot_y)
|
154
|
+
self.x = _valid_length(self.x)
|
155
|
+
self.y = _valid_length(self.y)
|
156
|
+
self.dx = _valid_length(self.dx)
|
157
|
+
self.dy = _valid_length(self.dy)
|
158
|
+
self.alternating_dx = _valid_float(self.alternating_dx)
|
159
|
+
self.alternating_dy = _valid_float(self.alternating_dy)
|
160
|
+
self.rotation = _valid_angle(self.rotation)
|
161
|
+
self.loops = _valid_int(self.loops, 1, None)
|
162
|
+
self.corner = _valid_int(self.corner, 0, 4)
|
163
|
+
self.nx = _valid_int(self.nx, 0, None)
|
164
|
+
self.ny = _valid_int(self.ny, 0, None)
|
165
|
+
self.start_index = _valid_int(self.start_index, 0, None)
|
166
|
+
self.repetitions = _valid_int(self.repetitions, 0, None)
|
167
|
+
|
168
|
+
def placements(self, context, outline, matrix, plan):
|
169
|
+
if outline is None:
|
170
|
+
# This job can't be placed.
|
171
|
+
return
|
172
|
+
scene_width = context.device.view.unit_width
|
173
|
+
scene_height = context.device.view.unit_height
|
174
|
+
unit_x = Length(self.x, relative_length=scene_width).units
|
175
|
+
unit_y = Length(self.y, relative_length=scene_height).units
|
176
|
+
org_x, org_y = matrix.point_in_matrix_space((unit_x, unit_y))
|
177
|
+
unit_x2 = Length(self.x + self.dx, relative_length=scene_width).units
|
178
|
+
unit_y2 = Length(self.y + self.dy, relative_length=scene_height).units
|
179
|
+
odx, ody = matrix.point_in_matrix_space((unit_x2, unit_y2))
|
180
|
+
dx = odx - org_x
|
181
|
+
dy = ody - org_y
|
182
|
+
|
183
|
+
ccx = sum([c[0] for c in outline]) / len(outline)
|
184
|
+
ccy = sum([c[1] for c in outline]) / len(outline)
|
185
|
+
if 0 <= self.corner <= 3:
|
186
|
+
cx, cy = outline[self.corner]
|
187
|
+
else:
|
188
|
+
cx = ccx
|
189
|
+
cy = ccy
|
190
|
+
# Create grid...
|
191
|
+
xloop = self.nx
|
192
|
+
if xloop == 0: # as much as we can fit
|
193
|
+
if abs(self.dx) < 1e-6:
|
194
|
+
xloop = 1
|
195
|
+
else:
|
196
|
+
x = self.x
|
197
|
+
while x + self.dx < scene_width:
|
198
|
+
x += self.dx
|
199
|
+
xloop += 1
|
200
|
+
yloop = self.ny
|
201
|
+
if yloop == 0: # as much as we can fit
|
202
|
+
if abs(self.dy) < 1e-6:
|
203
|
+
yloop = 1
|
204
|
+
else:
|
205
|
+
y = self.y
|
206
|
+
while y + self.dy < scene_height:
|
207
|
+
y += self.dy
|
208
|
+
yloop += 1
|
209
|
+
result = []
|
210
|
+
sorted_result = []
|
211
|
+
y = org_y - cy
|
212
|
+
# print (f"Generating {xloop}x{yloop}")
|
213
|
+
for ycount in range(yloop):
|
214
|
+
roty = 0
|
215
|
+
x = org_x - cx
|
216
|
+
xx = x
|
217
|
+
if ycount % 2 == 1:
|
218
|
+
if self.alternating_dx != 0:
|
219
|
+
xx += self.alternating_dx * abs(dx)
|
220
|
+
if self.alternate_rot_y:
|
221
|
+
roty = tau / 2
|
222
|
+
for xcount in range(xloop):
|
223
|
+
rotx = 0
|
224
|
+
yy = y
|
225
|
+
if xcount % 2 == 1:
|
226
|
+
if self.alternating_dy != 0:
|
227
|
+
yy += self.alternating_dy * abs(dy)
|
228
|
+
if self.alternate_rot_x:
|
229
|
+
rotx = tau / 2
|
230
|
+
shift_matrix = Matrix()
|
231
|
+
rotangle = rotx + roty
|
232
|
+
if self.rotation != 0:
|
233
|
+
shift_matrix.post_rotate(self.rotation, cx, cy)
|
234
|
+
if rotangle != 0:
|
235
|
+
shift_matrix.post_rotate(rotangle, ccx, ccy)
|
236
|
+
shift_matrix.post_translate(xx, yy)
|
237
|
+
result.append(matrix * shift_matrix)
|
238
|
+
xx += dx
|
239
|
+
y += dy
|
240
|
+
|
241
|
+
def idx_horizontal(row, col):
|
242
|
+
return row * xloop + col
|
243
|
+
|
244
|
+
def idx_vertical(col, row):
|
245
|
+
return row * xloop + col
|
246
|
+
|
247
|
+
if self.orientation == 2:
|
248
|
+
max_outer = xloop
|
249
|
+
max_inner = yloop
|
250
|
+
func = idx_vertical
|
251
|
+
hither = True
|
252
|
+
elif self.orientation == 1:
|
253
|
+
max_outer = yloop
|
254
|
+
max_inner = xloop
|
255
|
+
func = idx_horizontal
|
256
|
+
hither = True
|
257
|
+
else:
|
258
|
+
max_outer = yloop
|
259
|
+
max_inner = xloop
|
260
|
+
func = idx_horizontal
|
261
|
+
hither = False
|
262
|
+
|
263
|
+
p_idx = 0
|
264
|
+
p_count = 0
|
265
|
+
s_index = self.start_index
|
266
|
+
if s_index is None:
|
267
|
+
s_index = 0
|
268
|
+
if s_index > max_outer * max_inner - 1:
|
269
|
+
s_index = max_outer * max_inner - 1
|
270
|
+
s_count = self.repetitions
|
271
|
+
if s_count is None or s_count < 0:
|
272
|
+
s_count = 0
|
273
|
+
if s_count == 0:
|
274
|
+
s_count = max_inner * max_outer
|
275
|
+
|
276
|
+
for idx_outer in range(max_outer):
|
277
|
+
for idx_inner in range(max_inner):
|
278
|
+
if hither and idx_outer % 2 == 1:
|
279
|
+
sorted_idx = func(idx_outer, max_inner - 1 - idx_inner)
|
280
|
+
else:
|
281
|
+
sorted_idx = func(idx_outer, idx_inner)
|
282
|
+
# print (f"p_idx={p_idx}, p_count={p_count}, s_index={s_index}, s_count={s_count}")
|
283
|
+
if p_idx >= s_index and p_count < s_count:
|
284
|
+
sorted_result.append(result[sorted_idx])
|
285
|
+
p_count += 1
|
286
|
+
|
287
|
+
p_idx += 1
|
288
|
+
|
289
|
+
for mat in sorted_result:
|
290
|
+
yield mat
|
291
|
+
|
292
|
+
def default_map(self, default_map=None):
|
293
|
+
default_map = super().default_map(default_map=default_map)
|
294
|
+
default_map["element_type"] = "Placement"
|
295
|
+
default_map.update(self.__dict__)
|
296
|
+
try:
|
297
|
+
xlen = Length(self.x, digits=2)
|
298
|
+
# print (f"{float(xlen):.2f} = {xlen.length_cm}")
|
299
|
+
except ValueError:
|
300
|
+
xlen = Length(0, digits=2)
|
301
|
+
try:
|
302
|
+
ylen = Length(self.y, digits=2)
|
303
|
+
except ValueError:
|
304
|
+
ylen = Length(0, digits=2)
|
305
|
+
# print (self.x, self.y, type(self.x).__name__, type(self.y).__name__,)
|
306
|
+
default_map["position"] = f"{xlen.length_cm}, {ylen.length_cm}"
|
307
|
+
default_map["x"] = f"{xlen.length_cm}"
|
308
|
+
default_map["y"] = f"{ylen.length_cm}"
|
309
|
+
default_map["rotation"] = f"{Angle(self.rotation, digits=1).degrees}°"
|
310
|
+
default_map["loops"] = f"{str(self.loops) + 'X ' if self.loops > 1 else ''}"
|
311
|
+
if self.nx != 1 or self.ny != 1:
|
312
|
+
default_map["grid"] = f"{self.nx}x{self.ny}"
|
313
|
+
else:
|
314
|
+
default_map["grid"] = ""
|
315
|
+
|
316
|
+
if self.corner == 0:
|
317
|
+
default_map["corner"] = "`+ "
|
318
|
+
elif self.corner == 1:
|
319
|
+
default_map["corner"] = " +'"
|
320
|
+
elif self.corner == 2:
|
321
|
+
default_map["corner"] = " +."
|
322
|
+
elif self.corner == 3:
|
323
|
+
default_map["corner"] = ".+ "
|
324
|
+
else:
|
325
|
+
default_map["corner"] = " + "
|
326
|
+
default_map["enabled"] = "(Disabled) " if not self.output else ""
|
327
|
+
|
328
|
+
return default_map
|
329
|
+
|
meerk40t/core/node/refnode.py
CHANGED
@@ -1,47 +1,58 @@
|
|
1
|
-
from meerk40t.core.node.node import Node
|
2
|
-
|
3
|
-
|
4
|
-
class ReferenceNode(Node):
|
5
|
-
"""
|
6
|
-
ReferenceNode is the bootstrapped node type for the reference type.
|
7
|
-
"""
|
8
|
-
|
9
|
-
def __init__(self, **kwargs):
|
10
|
-
self.node = None
|
11
|
-
super().__init__(type="reference", **kwargs)
|
12
|
-
self._formatter = "*{reference}"
|
13
|
-
|
14
|
-
def __repr__(self):
|
15
|
-
return f"ReferenceNode('{self.type}', {str(self.node)}, {str(self._parent)})"
|
16
|
-
|
17
|
-
@property
|
18
|
-
def bounds(self):
|
19
|
-
return self.node.bounds
|
20
|
-
|
21
|
-
def bbox(self, transformed=True, with_stroke=False):
|
22
|
-
return self.node.bbox(transformed=transformed, with_stroke=with_stroke)
|
23
|
-
|
24
|
-
def default_map(self, default_map=None):
|
25
|
-
default_map = super().default_map(default_map=default_map)
|
26
|
-
default_map["element_type"] = "Reference"
|
27
|
-
default_map["reference"] = str(self.node)
|
28
|
-
default_map["ref_nid"] = str(self.node.id)
|
29
|
-
default_map["ref_id"] = str(self.id)
|
30
|
-
return default_map
|
31
|
-
|
32
|
-
def
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
1
|
+
from meerk40t.core.node.node import Node
|
2
|
+
|
3
|
+
|
4
|
+
class ReferenceNode(Node):
|
5
|
+
"""
|
6
|
+
ReferenceNode is the bootstrapped node type for the reference type.
|
7
|
+
"""
|
8
|
+
|
9
|
+
def __init__(self, **kwargs):
|
10
|
+
self.node = None
|
11
|
+
super().__init__(type="reference", **kwargs)
|
12
|
+
self._formatter = "*{reference}"
|
13
|
+
|
14
|
+
def __repr__(self):
|
15
|
+
return f"ReferenceNode('{self.type}', {str(self.node)}, {str(self._parent)})"
|
16
|
+
|
17
|
+
@property
|
18
|
+
def bounds(self):
|
19
|
+
return self.node.bounds
|
20
|
+
|
21
|
+
def bbox(self, transformed=True, with_stroke=False):
|
22
|
+
return self.node.bbox(transformed=transformed, with_stroke=with_stroke)
|
23
|
+
|
24
|
+
def default_map(self, default_map=None):
|
25
|
+
default_map = super().default_map(default_map=default_map)
|
26
|
+
default_map["element_type"] = "Reference"
|
27
|
+
default_map["reference"] = str(self.node)
|
28
|
+
default_map["ref_nid"] = str(self.node.id)
|
29
|
+
default_map["ref_id"] = str(self.id)
|
30
|
+
return default_map
|
31
|
+
|
32
|
+
def can_drop(self, drag_node):
|
33
|
+
# Dragging element into element.
|
34
|
+
return bool(
|
35
|
+
hasattr(drag_node, "as_geometry") or
|
36
|
+
hasattr(drag_node, "as_image") or
|
37
|
+
drag_node.type == "reference"
|
38
|
+
)
|
39
|
+
|
40
|
+
def drop(self, drag_node, modify=True, flag=False):
|
41
|
+
# Dragging element into element.
|
42
|
+
if not self.can_drop(drag_node):
|
43
|
+
return False
|
44
|
+
if hasattr(drag_node, "as_geometry") or hasattr(drag_node, "as_image"):
|
45
|
+
op = self.parent
|
46
|
+
drop_index = op.children.index(self)
|
47
|
+
if modify:
|
48
|
+
op.add_reference(drag_node, pos=drop_index)
|
49
|
+
return True
|
50
|
+
elif drag_node.type == "reference":
|
51
|
+
if modify:
|
52
|
+
self.insert_sibling(drag_node)
|
53
|
+
return True
|
54
|
+
return False
|
55
|
+
|
56
|
+
def notify_destroyed(self, node=None, **kwargs):
|
57
|
+
self.node._references.remove(self)
|
58
|
+
super().notify_destroyed()
|