meerk40t 0.9.2000__py2.py3-none-any.whl → 0.9.3001__py2.py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- meerk40t/balormk/balor_params.py +1 -43
- meerk40t/balormk/controller.py +1 -41
- meerk40t/balormk/device.py +16 -22
- meerk40t/balormk/driver.py +4 -4
- meerk40t/balormk/gui/balorconfig.py +2 -2
- meerk40t/balormk/gui/balorcontroller.py +13 -5
- meerk40t/balormk/gui/baloroperationproperties.py +0 -46
- meerk40t/balormk/gui/gui.py +17 -17
- meerk40t/camera/gui/camerapanel.py +18 -11
- meerk40t/core/cutcode/rastercut.py +3 -1
- meerk40t/core/cutplan.py +145 -14
- meerk40t/core/elements/clipboard.py +18 -9
- meerk40t/core/elements/element_treeops.py +320 -180
- meerk40t/core/elements/element_types.py +7 -2
- meerk40t/core/elements/elements.py +53 -27
- meerk40t/core/elements/geometry.py +8 -0
- meerk40t/core/elements/offset_clpr.py +129 -4
- meerk40t/core/elements/offset_mk.py +3 -1
- meerk40t/core/elements/shapes.py +28 -25
- meerk40t/core/laserjob.py +7 -0
- meerk40t/core/node/bootstrap.py +4 -0
- meerk40t/core/node/effect_hatch.py +85 -96
- meerk40t/core/node/effect_wobble.py +309 -0
- meerk40t/core/node/elem_image.py +49 -19
- meerk40t/core/node/elem_line.py +60 -0
- meerk40t/core/node/elem_rect.py +5 -3
- meerk40t/core/node/image_processed.py +766 -0
- meerk40t/core/node/image_raster.py +113 -0
- meerk40t/core/node/node.py +120 -1
- meerk40t/core/node/op_cut.py +2 -8
- meerk40t/core/node/op_dots.py +0 -8
- meerk40t/core/node/op_engrave.py +2 -18
- meerk40t/core/node/op_image.py +22 -35
- meerk40t/core/node/op_raster.py +0 -9
- meerk40t/core/planner.py +32 -2
- meerk40t/core/svg_io.py +699 -461
- meerk40t/core/treeop.py +191 -0
- meerk40t/core/undos.py +15 -1
- meerk40t/core/units.py +14 -4
- meerk40t/device/dummydevice.py +3 -2
- meerk40t/device/gui/defaultactions.py +43 -55
- meerk40t/device/gui/formatterpanel.py +58 -49
- meerk40t/device/gui/warningpanel.py +12 -12
- meerk40t/device/mixins.py +13 -0
- meerk40t/dxf/dxf_io.py +9 -5
- meerk40t/extra/ezd.py +28 -26
- meerk40t/extra/imageactions.py +300 -308
- meerk40t/extra/lbrn.py +19 -2
- meerk40t/fill/fills.py +6 -6
- meerk40t/fill/patternfill.py +1061 -1061
- meerk40t/fill/patterns.py +2 -6
- meerk40t/grbl/controller.py +168 -52
- meerk40t/grbl/device.py +23 -18
- meerk40t/grbl/driver.py +39 -0
- meerk40t/grbl/emulator.py +79 -19
- meerk40t/grbl/gcodejob.py +10 -0
- meerk40t/grbl/gui/grblconfiguration.py +2 -2
- meerk40t/grbl/gui/grblcontroller.py +24 -8
- meerk40t/grbl/gui/grblhardwareconfig.py +153 -0
- meerk40t/grbl/gui/gui.py +17 -14
- meerk40t/grbl/mock_connection.py +15 -34
- meerk40t/grbl/plugin.py +0 -4
- meerk40t/grbl/serial_connection.py +2 -1
- meerk40t/gui/about.py +8 -5
- meerk40t/gui/alignment.py +10 -6
- meerk40t/gui/basicops.py +27 -17
- meerk40t/gui/bufferview.py +2 -2
- meerk40t/gui/choicepropertypanel.py +101 -13
- meerk40t/gui/consolepanel.py +12 -9
- meerk40t/gui/devicepanel.py +38 -25
- meerk40t/gui/executejob.py +6 -4
- meerk40t/gui/help_assets/help_assets.py +13 -10
- meerk40t/gui/hersheymanager.py +8 -6
- meerk40t/gui/icons.py +1951 -3065
- meerk40t/gui/imagesplitter.py +14 -7
- meerk40t/gui/keymap.py +3 -3
- meerk40t/gui/laserpanel.py +151 -84
- meerk40t/gui/laserrender.py +61 -70
- meerk40t/gui/lasertoolpanel.py +8 -7
- meerk40t/gui/materialtest.py +3 -3
- meerk40t/gui/mkdebug.py +254 -1
- meerk40t/gui/navigationpanels.py +321 -180
- meerk40t/gui/notes.py +3 -3
- meerk40t/gui/opassignment.py +12 -12
- meerk40t/gui/operation_info.py +13 -13
- meerk40t/gui/plugin.py +5 -0
- meerk40t/gui/position.py +20 -18
- meerk40t/gui/preferences.py +21 -6
- meerk40t/gui/propertypanels/attributes.py +70 -22
- meerk40t/gui/propertypanels/blobproperty.py +2 -2
- meerk40t/gui/propertypanels/consoleproperty.py +2 -2
- meerk40t/gui/propertypanels/groupproperties.py +3 -3
- meerk40t/gui/propertypanels/hatchproperty.py +11 -18
- meerk40t/gui/propertypanels/imageproperty.py +4 -3
- meerk40t/gui/propertypanels/opbranchproperties.py +1 -1
- meerk40t/gui/propertypanels/pathproperty.py +2 -2
- meerk40t/gui/propertypanels/pointproperty.py +2 -2
- meerk40t/gui/propertypanels/propertywindow.py +4 -4
- meerk40t/gui/propertypanels/textproperty.py +3 -3
- meerk40t/gui/propertypanels/wobbleproperty.py +204 -0
- meerk40t/gui/ribbon.py +367 -259
- meerk40t/gui/scene/scene.py +31 -5
- meerk40t/gui/scenewidgets/elementswidget.py +12 -4
- meerk40t/gui/scenewidgets/gridwidget.py +2 -2
- meerk40t/gui/scenewidgets/laserpathwidget.py +7 -2
- meerk40t/gui/scenewidgets/machineoriginwidget.py +6 -2
- meerk40t/gui/scenewidgets/relocatewidget.py +1 -1
- meerk40t/gui/scenewidgets/reticlewidget.py +9 -0
- meerk40t/gui/scenewidgets/selectionwidget.py +12 -7
- meerk40t/gui/simpleui.py +95 -8
- meerk40t/gui/simulation.py +44 -36
- meerk40t/gui/spoolerpanel.py +124 -26
- meerk40t/gui/statusbarwidgets/defaultoperations.py +18 -6
- meerk40t/gui/statusbarwidgets/infowidget.py +2 -2
- meerk40t/gui/statusbarwidgets/opassignwidget.py +12 -12
- meerk40t/gui/statusbarwidgets/shapepropwidget.py +45 -18
- meerk40t/gui/statusbarwidgets/statusbar.py +11 -4
- meerk40t/gui/themes.py +78 -0
- meerk40t/gui/toolwidgets/toolcircle.py +2 -1
- meerk40t/gui/toolwidgets/toolellipse.py +2 -1
- meerk40t/gui/toolwidgets/toolimagecut.py +132 -0
- meerk40t/gui/toolwidgets/toolline.py +144 -0
- meerk40t/gui/toolwidgets/toolnodeedit.py +72 -145
- meerk40t/gui/toolwidgets/toolpoint.py +1 -1
- meerk40t/gui/toolwidgets/toolpolygon.py +8 -55
- meerk40t/gui/toolwidgets/toolrect.py +2 -1
- meerk40t/gui/usbconnect.py +2 -2
- meerk40t/gui/utilitywidgets/cyclocycloidwidget.py +2 -2
- meerk40t/gui/utilitywidgets/harmonograph.py +7 -7
- meerk40t/gui/utilitywidgets/scalewidget.py +1 -1
- meerk40t/gui/wordlisteditor.py +33 -18
- meerk40t/gui/wxmeerk40t.py +166 -66
- meerk40t/gui/wxmmain.py +236 -157
- meerk40t/gui/wxmribbon.py +49 -25
- meerk40t/gui/wxmscene.py +49 -38
- meerk40t/gui/wxmtree.py +216 -85
- meerk40t/gui/wxutils.py +62 -4
- meerk40t/image/imagetools.py +443 -15
- meerk40t/internal_plugins.py +2 -10
- meerk40t/kernel/kernel.py +12 -4
- meerk40t/lihuiyu/controller.py +7 -7
- meerk40t/lihuiyu/device.py +3 -1
- meerk40t/lihuiyu/driver.py +3 -0
- meerk40t/lihuiyu/gui/gui.py +8 -8
- meerk40t/lihuiyu/gui/lhyaccelgui.py +2 -2
- meerk40t/lihuiyu/gui/lhycontrollergui.py +73 -27
- meerk40t/lihuiyu/gui/lhydrivergui.py +2 -2
- meerk40t/lihuiyu/gui/tcpcontroller.py +22 -9
- meerk40t/main.py +6 -1
- meerk40t/moshi/controller.py +5 -5
- meerk40t/moshi/device.py +5 -2
- meerk40t/moshi/driver.py +4 -0
- meerk40t/moshi/gui/gui.py +8 -8
- meerk40t/moshi/gui/moshicontrollergui.py +24 -8
- meerk40t/moshi/gui/moshidrivergui.py +2 -2
- meerk40t/newly/controller.py +2 -0
- meerk40t/newly/device.py +9 -2
- meerk40t/newly/driver.py +4 -0
- meerk40t/newly/gui/gui.py +16 -17
- meerk40t/newly/gui/newlyconfig.py +2 -2
- meerk40t/newly/gui/newlycontroller.py +13 -5
- meerk40t/rotary/gui/gui.py +2 -2
- meerk40t/rotary/gui/rotarysettings.py +2 -2
- meerk40t/ruida/device.py +3 -0
- meerk40t/ruida/driver.py +4 -0
- meerk40t/ruida/gui/gui.py +6 -6
- meerk40t/ruida/gui/ruidaconfig.py +2 -2
- meerk40t/ruida/gui/ruidacontroller.py +13 -5
- meerk40t/svgelements.py +9 -9
- meerk40t/tools/geomstr.py +849 -153
- meerk40t/tools/kerftest.py +8 -4
- meerk40t/tools/livinghinges.py +15 -8
- {meerk40t-0.9.2000.dist-info → meerk40t-0.9.3001.dist-info}/METADATA +21 -16
- {meerk40t-0.9.2000.dist-info → meerk40t-0.9.3001.dist-info}/RECORD +185 -177
- {meerk40t-0.9.2000.dist-info → meerk40t-0.9.3001.dist-info}/entry_points.txt +0 -1
- test/test_core_elements.py +8 -24
- test/test_file_svg.py +88 -0
- test/test_fill.py +9 -9
- test/test_geomstr.py +258 -8
- test/test_kernel.py +4 -0
- test/test_tools_rasterplotter.py +29 -0
- meerk40t/extra/embroider.py +0 -56
- meerk40t/extra/pathoptimize.py +0 -249
- {meerk40t-0.9.2000.dist-info → meerk40t-0.9.3001.dist-info}/LICENSE +0 -0
- {meerk40t-0.9.2000.dist-info → meerk40t-0.9.3001.dist-info}/WHEEL +0 -0
- {meerk40t-0.9.2000.dist-info → meerk40t-0.9.3001.dist-info}/top_level.txt +0 -0
- {meerk40t-0.9.2000.dist-info → meerk40t-0.9.3001.dist-info}/zip-safe +0 -0
@@ -160,7 +160,8 @@ class CircleTool(ToolWidget):
|
|
160
160
|
self.p2 = None
|
161
161
|
self.scene.pane.tool_active = False
|
162
162
|
self.scene.request_refresh()
|
163
|
-
|
163
|
+
# Allow other widgets (like the selection widget to take over)
|
164
|
+
response = RESPONSE_CHAIN
|
164
165
|
elif event_type == "leftup":
|
165
166
|
self.scene.pane.tool_active = False
|
166
167
|
try:
|
@@ -138,7 +138,8 @@ class EllipseTool(ToolWidget):
|
|
138
138
|
self.p2 = None
|
139
139
|
self.scene.pane.tool_active = False
|
140
140
|
self.scene.request_refresh()
|
141
|
-
|
141
|
+
# Allow other widgets (like the selection widget to take over)
|
142
|
+
response = RESPONSE_CHAIN
|
142
143
|
elif event_type == "leftup":
|
143
144
|
self.scene.pane.tool_active = False
|
144
145
|
try:
|
@@ -0,0 +1,132 @@
|
|
1
|
+
import math
|
2
|
+
|
3
|
+
import wx
|
4
|
+
|
5
|
+
from meerk40t.gui.laserrender import swizzlecolor
|
6
|
+
from meerk40t.gui.scene.sceneconst import (
|
7
|
+
RESPONSE_ABORT,
|
8
|
+
RESPONSE_CHAIN,
|
9
|
+
RESPONSE_CONSUME,
|
10
|
+
)
|
11
|
+
from meerk40t.gui.toolwidgets.toolwidget import ToolWidget
|
12
|
+
from meerk40t.tools.geomstr import Geomstr
|
13
|
+
|
14
|
+
_ = wx.GetTranslation
|
15
|
+
|
16
|
+
|
17
|
+
class ImageCutTool(ToolWidget):
|
18
|
+
"""
|
19
|
+
ImageCut Tool.
|
20
|
+
|
21
|
+
Draws a line with click and drag, uses that line to slice an image.
|
22
|
+
"""
|
23
|
+
|
24
|
+
def __init__(self, scene):
|
25
|
+
ToolWidget.__init__(self, scene)
|
26
|
+
self.start_position = None
|
27
|
+
self.p1 = None
|
28
|
+
self.p2 = None
|
29
|
+
|
30
|
+
def process_draw(self, gc: wx.GraphicsContext):
|
31
|
+
if self.p1 is not None and self.p2 is not None:
|
32
|
+
matrix = gc.GetTransform().Get()
|
33
|
+
# pixel = 1.0 / matrix[0]
|
34
|
+
x0 = self.p1.real
|
35
|
+
y0 = self.p1.imag
|
36
|
+
x1 = self.p2.real
|
37
|
+
y1 = self.p2.imag
|
38
|
+
elements = self.scene.context.elements
|
39
|
+
if elements.default_stroke is None:
|
40
|
+
self.pen.SetColour(wx.BLUE)
|
41
|
+
else:
|
42
|
+
self.pen.SetColour(wx.Colour(swizzlecolor(elements.default_stroke)))
|
43
|
+
gc.SetPen(self.pen)
|
44
|
+
gc.StrokeLine(
|
45
|
+
x0,
|
46
|
+
y0,
|
47
|
+
x1,
|
48
|
+
y1,
|
49
|
+
)
|
50
|
+
s = f"Draw line from {x0}, {y0} to {x0}, {y0}"
|
51
|
+
self.scene.context.signal("statusmsg", s)
|
52
|
+
|
53
|
+
def event(
|
54
|
+
self,
|
55
|
+
window_pos=None,
|
56
|
+
space_pos=None,
|
57
|
+
event_type=None,
|
58
|
+
nearest_snap=None,
|
59
|
+
modifiers=None,
|
60
|
+
keycode=None,
|
61
|
+
**kwargs,
|
62
|
+
):
|
63
|
+
response = RESPONSE_CHAIN
|
64
|
+
update_required = False
|
65
|
+
if event_type == "leftdown":
|
66
|
+
self.scene.pane.tool_active = True
|
67
|
+
if nearest_snap is None:
|
68
|
+
sx, sy = self.scene.get_snap_point(
|
69
|
+
space_pos[0], space_pos[1], modifiers
|
70
|
+
)
|
71
|
+
self.p1 = complex(sx, sy)
|
72
|
+
else:
|
73
|
+
self.p1 = complex(nearest_snap[0], nearest_snap[1])
|
74
|
+
response = RESPONSE_CONSUME
|
75
|
+
elif event_type == "move":
|
76
|
+
if self.p1 is not None:
|
77
|
+
self.p2 = complex(space_pos[0], space_pos[1])
|
78
|
+
if "shift" in modifiers:
|
79
|
+
r = abs(self.p1 - self.p2)
|
80
|
+
a = Geomstr.angle(None, self.p1, self.p2)
|
81
|
+
delta = math.tau / 32
|
82
|
+
|
83
|
+
for i in range(-4, 4):
|
84
|
+
s = i * math.tau / 8 - delta
|
85
|
+
e = i * math.tau / 8 + delta
|
86
|
+
if s <= a <= e:
|
87
|
+
self.p2 = Geomstr.polar(None, self.p1, i * math.tau / 8, r)
|
88
|
+
else:
|
89
|
+
if nearest_snap is not None:
|
90
|
+
self.p2 = complex(nearest_snap[0], nearest_snap[1])
|
91
|
+
self.scene.request_refresh()
|
92
|
+
response = RESPONSE_CONSUME
|
93
|
+
elif event_type == "leftclick":
|
94
|
+
# Dear user: that's too quick for my taste - take your time...
|
95
|
+
self.p1 = None
|
96
|
+
self.p2 = None
|
97
|
+
self.scene.pane.tool_active = False
|
98
|
+
self.scene.request_refresh()
|
99
|
+
# Allow other widgets (like the selection widget to take over)
|
100
|
+
response = RESPONSE_CHAIN
|
101
|
+
elif event_type == "leftup":
|
102
|
+
self.scene.pane.tool_active = False
|
103
|
+
try:
|
104
|
+
if self.p1 is None or self.p2 is None:
|
105
|
+
return RESPONSE_ABORT
|
106
|
+
x1 = self.p1.real
|
107
|
+
y1 = self.p1.imag
|
108
|
+
x2 = self.p2.real
|
109
|
+
y2 = self.p2.imag
|
110
|
+
elements = self.scene.context.elements
|
111
|
+
elements(f"image linecut {x1} {y1} {x2} {y2}")
|
112
|
+
self.p1 = None
|
113
|
+
self.p2 = None
|
114
|
+
except IndexError:
|
115
|
+
pass
|
116
|
+
self.scene.request_refresh()
|
117
|
+
self.scene.context.signal("statusmsg", "")
|
118
|
+
response = RESPONSE_ABORT
|
119
|
+
elif event_type == "lost" or (event_type == "key_up" and modifiers == "escape"):
|
120
|
+
if self.scene.pane.tool_active:
|
121
|
+
self.scene.pane.tool_active = False
|
122
|
+
self.scene.request_refresh()
|
123
|
+
response = RESPONSE_CONSUME
|
124
|
+
else:
|
125
|
+
response = RESPONSE_CHAIN
|
126
|
+
self.p1 = None
|
127
|
+
self.p2 = None
|
128
|
+
self.scene.context.signal("statusmsg", "")
|
129
|
+
elif update_required:
|
130
|
+
self.scene.request_refresh()
|
131
|
+
response = RESPONSE_CONSUME
|
132
|
+
return response
|
@@ -0,0 +1,144 @@
|
|
1
|
+
import math
|
2
|
+
|
3
|
+
import wx
|
4
|
+
|
5
|
+
from meerk40t.gui.laserrender import swizzlecolor
|
6
|
+
from meerk40t.gui.scene.sceneconst import (
|
7
|
+
RESPONSE_ABORT,
|
8
|
+
RESPONSE_CHAIN,
|
9
|
+
RESPONSE_CONSUME,
|
10
|
+
)
|
11
|
+
from meerk40t.gui.toolwidgets.toolwidget import ToolWidget
|
12
|
+
from meerk40t.tools.geomstr import Geomstr
|
13
|
+
|
14
|
+
_ = wx.GetTranslation
|
15
|
+
|
16
|
+
|
17
|
+
class LineTool(ToolWidget):
|
18
|
+
"""
|
19
|
+
Line Drawing Tool.
|
20
|
+
|
21
|
+
Adds Line with click and drag.
|
22
|
+
"""
|
23
|
+
|
24
|
+
def __init__(self, scene):
|
25
|
+
ToolWidget.__init__(self, scene)
|
26
|
+
self.start_position = None
|
27
|
+
self.p1 = None
|
28
|
+
self.p2 = None
|
29
|
+
|
30
|
+
def process_draw(self, gc: wx.GraphicsContext):
|
31
|
+
if self.p1 is not None and self.p2 is not None:
|
32
|
+
matrix = gc.GetTransform().Get()
|
33
|
+
# pixel = 1.0 / matrix[0]
|
34
|
+
x0 = self.p1.real
|
35
|
+
y0 = self.p1.imag
|
36
|
+
x1 = self.p2.real
|
37
|
+
y1 = self.p2.imag
|
38
|
+
elements = self.scene.context.elements
|
39
|
+
if elements.default_stroke is None:
|
40
|
+
self.pen.SetColour(wx.BLUE)
|
41
|
+
else:
|
42
|
+
self.pen.SetColour(wx.Colour(swizzlecolor(elements.default_stroke)))
|
43
|
+
gc.SetPen(self.pen)
|
44
|
+
gc.StrokeLine(
|
45
|
+
x0,
|
46
|
+
y0,
|
47
|
+
x1,
|
48
|
+
y1,
|
49
|
+
)
|
50
|
+
s = f"Draw line from {x0}, {y0} to {x0}, {y0}"
|
51
|
+
self.scene.context.signal("statusmsg", s)
|
52
|
+
|
53
|
+
def event(
|
54
|
+
self,
|
55
|
+
window_pos=None,
|
56
|
+
space_pos=None,
|
57
|
+
event_type=None,
|
58
|
+
nearest_snap=None,
|
59
|
+
modifiers=None,
|
60
|
+
keycode=None,
|
61
|
+
**kwargs,
|
62
|
+
):
|
63
|
+
response = RESPONSE_CHAIN
|
64
|
+
update_required = False
|
65
|
+
if event_type == "leftdown":
|
66
|
+
self.scene.pane.tool_active = True
|
67
|
+
if nearest_snap is None:
|
68
|
+
sx, sy = self.scene.get_snap_point(
|
69
|
+
space_pos[0], space_pos[1], modifiers
|
70
|
+
)
|
71
|
+
self.p1 = complex(sx, sy)
|
72
|
+
else:
|
73
|
+
self.p1 = complex(nearest_snap[0], nearest_snap[1])
|
74
|
+
response = RESPONSE_CONSUME
|
75
|
+
elif event_type == "move":
|
76
|
+
if self.p1 is not None:
|
77
|
+
self.p2 = complex(space_pos[0], space_pos[1])
|
78
|
+
if "shift" in modifiers:
|
79
|
+
r = abs(self.p1 - self.p2)
|
80
|
+
a = Geomstr.angle(None, self.p1, self.p2)
|
81
|
+
delta = math.tau / 32
|
82
|
+
|
83
|
+
for i in range(-4, 4):
|
84
|
+
s = i * math.tau / 8 - delta
|
85
|
+
e = i * math.tau / 8 + delta
|
86
|
+
if s <= a <= e:
|
87
|
+
self.p2 = Geomstr.polar(None, self.p1, i * math.tau / 8, r)
|
88
|
+
else:
|
89
|
+
if nearest_snap is not None:
|
90
|
+
self.p2 = complex(nearest_snap[0], nearest_snap[1])
|
91
|
+
self.scene.request_refresh()
|
92
|
+
response = RESPONSE_CONSUME
|
93
|
+
elif event_type == "leftclick":
|
94
|
+
# Dear user: that's too quick for my taste - take your time...
|
95
|
+
self.p1 = None
|
96
|
+
self.p2 = None
|
97
|
+
self.scene.pane.tool_active = False
|
98
|
+
self.scene.request_refresh()
|
99
|
+
# Allow other widgets (like the selection widget to take over)
|
100
|
+
response = RESPONSE_CHAIN
|
101
|
+
elif event_type == "leftup":
|
102
|
+
self.scene.pane.tool_active = False
|
103
|
+
try:
|
104
|
+
if self.p1 is None or self.p2 is None:
|
105
|
+
return RESPONSE_ABORT
|
106
|
+
x1 = self.p1.real
|
107
|
+
y1 = self.p1.imag
|
108
|
+
x2 = self.p2.real
|
109
|
+
y2 = self.p2.imag
|
110
|
+
elements = self.scene.context.elements
|
111
|
+
node = elements.elem_branch.add(
|
112
|
+
x1=x1,
|
113
|
+
y1=y1,
|
114
|
+
x2=x2,
|
115
|
+
y2=y2,
|
116
|
+
stroke_width=elements.default_strokewidth,
|
117
|
+
stroke=elements.default_stroke,
|
118
|
+
fill=elements.default_fill,
|
119
|
+
type="elem line",
|
120
|
+
)
|
121
|
+
if elements.classify_new:
|
122
|
+
elements.classify([node])
|
123
|
+
self.notify_created(node)
|
124
|
+
self.p1 = None
|
125
|
+
self.p2 = None
|
126
|
+
except IndexError:
|
127
|
+
pass
|
128
|
+
self.scene.request_refresh()
|
129
|
+
self.scene.context.signal("statusmsg", "")
|
130
|
+
response = RESPONSE_ABORT
|
131
|
+
elif event_type == "lost" or (event_type == "key_up" and modifiers == "escape"):
|
132
|
+
if self.scene.pane.tool_active:
|
133
|
+
self.scene.pane.tool_active = False
|
134
|
+
self.scene.request_refresh()
|
135
|
+
response = RESPONSE_CONSUME
|
136
|
+
else:
|
137
|
+
response = RESPONSE_CHAIN
|
138
|
+
self.p1 = None
|
139
|
+
self.p2 = None
|
140
|
+
self.scene.context.signal("statusmsg", "")
|
141
|
+
elif update_required:
|
142
|
+
self.scene.request_refresh()
|
143
|
+
response = RESPONSE_CONSUME
|
144
|
+
return response
|