printrun-src/printrun/excluder.py

Wed, 20 Jan 2021 10:15:13 +0100

author
mdd
date
Wed, 20 Jan 2021 10:15:13 +0100
changeset 46
cce0af6351f0
parent 15
0bbb006204fc
permissions
-rw-r--r--

updated and added new files for printrun

15
0bbb006204fc Added printrun sourcecode from
mbayer
parents:
diff changeset
1 # This file is part of the Printrun suite.
0bbb006204fc Added printrun sourcecode from
mbayer
parents:
diff changeset
2 #
0bbb006204fc Added printrun sourcecode from
mbayer
parents:
diff changeset
3 # Printrun is free software: you can redistribute it and/or modify
0bbb006204fc Added printrun sourcecode from
mbayer
parents:
diff changeset
4 # it under the terms of the GNU General Public License as published by
0bbb006204fc Added printrun sourcecode from
mbayer
parents:
diff changeset
5 # the Free Software Foundation, either version 3 of the License, or
0bbb006204fc Added printrun sourcecode from
mbayer
parents:
diff changeset
6 # (at your option) any later version.
0bbb006204fc Added printrun sourcecode from
mbayer
parents:
diff changeset
7 #
0bbb006204fc Added printrun sourcecode from
mbayer
parents:
diff changeset
8 # Printrun is distributed in the hope that it will be useful,
0bbb006204fc Added printrun sourcecode from
mbayer
parents:
diff changeset
9 # but WITHOUT ANY WARRANTY; without even the implied warranty of
0bbb006204fc Added printrun sourcecode from
mbayer
parents:
diff changeset
10 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
0bbb006204fc Added printrun sourcecode from
mbayer
parents:
diff changeset
11 # GNU General Public License for more details.
0bbb006204fc Added printrun sourcecode from
mbayer
parents:
diff changeset
12 #
0bbb006204fc Added printrun sourcecode from
mbayer
parents:
diff changeset
13 # You should have received a copy of the GNU General Public License
0bbb006204fc Added printrun sourcecode from
mbayer
parents:
diff changeset
14 # along with Printrun. If not, see <http://www.gnu.org/licenses/>.
0bbb006204fc Added printrun sourcecode from
mbayer
parents:
diff changeset
15
0bbb006204fc Added printrun sourcecode from
mbayer
parents:
diff changeset
16 import wx
0bbb006204fc Added printrun sourcecode from
mbayer
parents:
diff changeset
17 from printrun import gviz
0bbb006204fc Added printrun sourcecode from
mbayer
parents:
diff changeset
18
0bbb006204fc Added printrun sourcecode from
mbayer
parents:
diff changeset
19 from .utils import imagefile, install_locale
0bbb006204fc Added printrun sourcecode from
mbayer
parents:
diff changeset
20 install_locale('pronterface')
0bbb006204fc Added printrun sourcecode from
mbayer
parents:
diff changeset
21
0bbb006204fc Added printrun sourcecode from
mbayer
parents:
diff changeset
22 class ExcluderWindow(gviz.GvizWindow):
0bbb006204fc Added printrun sourcecode from
mbayer
parents:
diff changeset
23
0bbb006204fc Added printrun sourcecode from
mbayer
parents:
diff changeset
24 def __init__(self, excluder, *args, **kwargs):
0bbb006204fc Added printrun sourcecode from
mbayer
parents:
diff changeset
25 super(ExcluderWindow, self).__init__(*args, **kwargs)
0bbb006204fc Added printrun sourcecode from
mbayer
parents:
diff changeset
26 self.SetTitle(_("Part excluder: draw rectangles where print instructions should be ignored"))
46
cce0af6351f0 updated and added new files for printrun
mdd
parents: 15
diff changeset
27 self.toolbar.AddTool(128, " " + _("Reset selection"),
cce0af6351f0 updated and added new files for printrun
mdd
parents: 15
diff changeset
28 wx.Image(imagefile('reset.png'), wx.BITMAP_TYPE_PNG).ConvertToBitmap(),
cce0af6351f0 updated and added new files for printrun
mdd
parents: 15
diff changeset
29 _("Reset selection"))
15
0bbb006204fc Added printrun sourcecode from
mbayer
parents:
diff changeset
30 self.Bind(wx.EVT_TOOL, self.reset_selection, id = 128)
0bbb006204fc Added printrun sourcecode from
mbayer
parents:
diff changeset
31 self.parent = excluder
0bbb006204fc Added printrun sourcecode from
mbayer
parents:
diff changeset
32 self.p.paint_overlay = self.paint_selection
0bbb006204fc Added printrun sourcecode from
mbayer
parents:
diff changeset
33 self.p.layerup()
0bbb006204fc Added printrun sourcecode from
mbayer
parents:
diff changeset
34
0bbb006204fc Added printrun sourcecode from
mbayer
parents:
diff changeset
35 def real_to_gcode(self, x, y):
0bbb006204fc Added printrun sourcecode from
mbayer
parents:
diff changeset
36 return (x + self.p.build_dimensions[3],
0bbb006204fc Added printrun sourcecode from
mbayer
parents:
diff changeset
37 self.p.build_dimensions[4] + self.p.build_dimensions[1] - y)
0bbb006204fc Added printrun sourcecode from
mbayer
parents:
diff changeset
38
0bbb006204fc Added printrun sourcecode from
mbayer
parents:
diff changeset
39 def gcode_to_real(self, x, y):
0bbb006204fc Added printrun sourcecode from
mbayer
parents:
diff changeset
40 return (x - self.p.build_dimensions[3],
0bbb006204fc Added printrun sourcecode from
mbayer
parents:
diff changeset
41 self.p.build_dimensions[1] - (y - self.p.build_dimensions[4]))
0bbb006204fc Added printrun sourcecode from
mbayer
parents:
diff changeset
42
0bbb006204fc Added printrun sourcecode from
mbayer
parents:
diff changeset
43 def mouse(self, event):
0bbb006204fc Added printrun sourcecode from
mbayer
parents:
diff changeset
44 if event.ButtonUp(wx.MOUSE_BTN_LEFT) \
0bbb006204fc Added printrun sourcecode from
mbayer
parents:
diff changeset
45 or event.ButtonUp(wx.MOUSE_BTN_RIGHT):
0bbb006204fc Added printrun sourcecode from
mbayer
parents:
diff changeset
46 self.initpos = None
0bbb006204fc Added printrun sourcecode from
mbayer
parents:
diff changeset
47 elif event.Dragging() and event.RightIsDown():
46
cce0af6351f0 updated and added new files for printrun
mdd
parents: 15
diff changeset
48 e = event.GetPosition()
15
0bbb006204fc Added printrun sourcecode from
mbayer
parents:
diff changeset
49 if not self.initpos or not hasattr(self, "basetrans"):
0bbb006204fc Added printrun sourcecode from
mbayer
parents:
diff changeset
50 self.initpos = e
0bbb006204fc Added printrun sourcecode from
mbayer
parents:
diff changeset
51 self.basetrans = self.p.translate
0bbb006204fc Added printrun sourcecode from
mbayer
parents:
diff changeset
52 self.p.translate = [self.basetrans[0] + (e[0] - self.initpos[0]),
0bbb006204fc Added printrun sourcecode from
mbayer
parents:
diff changeset
53 self.basetrans[1] + (e[1] - self.initpos[1])]
0bbb006204fc Added printrun sourcecode from
mbayer
parents:
diff changeset
54 self.p.dirty = 1
0bbb006204fc Added printrun sourcecode from
mbayer
parents:
diff changeset
55 wx.CallAfter(self.p.Refresh)
0bbb006204fc Added printrun sourcecode from
mbayer
parents:
diff changeset
56 elif event.Dragging() and event.LeftIsDown():
46
cce0af6351f0 updated and added new files for printrun
mdd
parents: 15
diff changeset
57 x, y = event.GetPosition()
15
0bbb006204fc Added printrun sourcecode from
mbayer
parents:
diff changeset
58 if not self.initpos:
0bbb006204fc Added printrun sourcecode from
mbayer
parents:
diff changeset
59 self.basetrans = self.p.translate
0bbb006204fc Added printrun sourcecode from
mbayer
parents:
diff changeset
60 x = (x - self.basetrans[0]) / self.p.scale[0]
0bbb006204fc Added printrun sourcecode from
mbayer
parents:
diff changeset
61 y = (y - self.basetrans[1]) / self.p.scale[1]
0bbb006204fc Added printrun sourcecode from
mbayer
parents:
diff changeset
62 x, y = self.real_to_gcode(x, y)
0bbb006204fc Added printrun sourcecode from
mbayer
parents:
diff changeset
63 if not self.initpos:
0bbb006204fc Added printrun sourcecode from
mbayer
parents:
diff changeset
64 self.initpos = (x, y)
0bbb006204fc Added printrun sourcecode from
mbayer
parents:
diff changeset
65 self.parent.rectangles.append((0, 0, 0, 0))
0bbb006204fc Added printrun sourcecode from
mbayer
parents:
diff changeset
66 else:
0bbb006204fc Added printrun sourcecode from
mbayer
parents:
diff changeset
67 pos = (x, y)
0bbb006204fc Added printrun sourcecode from
mbayer
parents:
diff changeset
68 x0 = min(self.initpos[0], pos[0])
0bbb006204fc Added printrun sourcecode from
mbayer
parents:
diff changeset
69 y0 = min(self.initpos[1], pos[1])
0bbb006204fc Added printrun sourcecode from
mbayer
parents:
diff changeset
70 x1 = max(self.initpos[0], pos[0])
0bbb006204fc Added printrun sourcecode from
mbayer
parents:
diff changeset
71 y1 = max(self.initpos[1], pos[1])
0bbb006204fc Added printrun sourcecode from
mbayer
parents:
diff changeset
72 self.parent.rectangles[-1] = (x0, y0, x1, y1)
0bbb006204fc Added printrun sourcecode from
mbayer
parents:
diff changeset
73 wx.CallAfter(self.p.Refresh)
0bbb006204fc Added printrun sourcecode from
mbayer
parents:
diff changeset
74 else:
0bbb006204fc Added printrun sourcecode from
mbayer
parents:
diff changeset
75 event.Skip()
0bbb006204fc Added printrun sourcecode from
mbayer
parents:
diff changeset
76
0bbb006204fc Added printrun sourcecode from
mbayer
parents:
diff changeset
77 def _line_scaler(self, orig):
0bbb006204fc Added printrun sourcecode from
mbayer
parents:
diff changeset
78 x0, y0 = self.gcode_to_real(orig[0], orig[1])
0bbb006204fc Added printrun sourcecode from
mbayer
parents:
diff changeset
79 x0 = self.p.scale[0] * x0 + self.p.translate[0]
0bbb006204fc Added printrun sourcecode from
mbayer
parents:
diff changeset
80 y0 = self.p.scale[1] * y0 + self.p.translate[1]
0bbb006204fc Added printrun sourcecode from
mbayer
parents:
diff changeset
81 x1, y1 = self.gcode_to_real(orig[2], orig[3])
0bbb006204fc Added printrun sourcecode from
mbayer
parents:
diff changeset
82 x1 = self.p.scale[0] * x1 + self.p.translate[0]
0bbb006204fc Added printrun sourcecode from
mbayer
parents:
diff changeset
83 y1 = self.p.scale[1] * y1 + self.p.translate[1]
0bbb006204fc Added printrun sourcecode from
mbayer
parents:
diff changeset
84 width = max(x0, x1) - min(x0, x1) + 1
0bbb006204fc Added printrun sourcecode from
mbayer
parents:
diff changeset
85 height = max(y0, y1) - min(y0, y1) + 1
0bbb006204fc Added printrun sourcecode from
mbayer
parents:
diff changeset
86 return (min(x0, x1), min(y0, y1), width, height,)
0bbb006204fc Added printrun sourcecode from
mbayer
parents:
diff changeset
87
0bbb006204fc Added printrun sourcecode from
mbayer
parents:
diff changeset
88 def paint_selection(self, dc):
0bbb006204fc Added printrun sourcecode from
mbayer
parents:
diff changeset
89 dc = wx.GCDC(dc)
0bbb006204fc Added printrun sourcecode from
mbayer
parents:
diff changeset
90 dc.SetPen(wx.TRANSPARENT_PEN)
0bbb006204fc Added printrun sourcecode from
mbayer
parents:
diff changeset
91 dc.DrawRectangleList([self._line_scaler(rect)
0bbb006204fc Added printrun sourcecode from
mbayer
parents:
diff changeset
92 for rect in self.parent.rectangles],
0bbb006204fc Added printrun sourcecode from
mbayer
parents:
diff changeset
93 None, wx.Brush((200, 200, 200, 150)))
0bbb006204fc Added printrun sourcecode from
mbayer
parents:
diff changeset
94
0bbb006204fc Added printrun sourcecode from
mbayer
parents:
diff changeset
95 def reset_selection(self, event):
0bbb006204fc Added printrun sourcecode from
mbayer
parents:
diff changeset
96 self.parent.rectangles = []
0bbb006204fc Added printrun sourcecode from
mbayer
parents:
diff changeset
97 wx.CallAfter(self.p.Refresh)
0bbb006204fc Added printrun sourcecode from
mbayer
parents:
diff changeset
98
46
cce0af6351f0 updated and added new files for printrun
mdd
parents: 15
diff changeset
99 class Excluder:
15
0bbb006204fc Added printrun sourcecode from
mbayer
parents:
diff changeset
100
0bbb006204fc Added printrun sourcecode from
mbayer
parents:
diff changeset
101 def __init__(self):
0bbb006204fc Added printrun sourcecode from
mbayer
parents:
diff changeset
102 self.rectangles = []
0bbb006204fc Added printrun sourcecode from
mbayer
parents:
diff changeset
103 self.window = None
0bbb006204fc Added printrun sourcecode from
mbayer
parents:
diff changeset
104
0bbb006204fc Added printrun sourcecode from
mbayer
parents:
diff changeset
105 def pop_window(self, gcode, *args, **kwargs):
0bbb006204fc Added printrun sourcecode from
mbayer
parents:
diff changeset
106 if not self.window:
0bbb006204fc Added printrun sourcecode from
mbayer
parents:
diff changeset
107 self.window = ExcluderWindow(self, *args, **kwargs)
0bbb006204fc Added printrun sourcecode from
mbayer
parents:
diff changeset
108 self.window.p.addfile(gcode, True)
0bbb006204fc Added printrun sourcecode from
mbayer
parents:
diff changeset
109 self.window.Bind(wx.EVT_CLOSE, self.close_window)
0bbb006204fc Added printrun sourcecode from
mbayer
parents:
diff changeset
110 self.window.Show()
0bbb006204fc Added printrun sourcecode from
mbayer
parents:
diff changeset
111 else:
0bbb006204fc Added printrun sourcecode from
mbayer
parents:
diff changeset
112 self.window.Show()
0bbb006204fc Added printrun sourcecode from
mbayer
parents:
diff changeset
113 self.window.Raise()
0bbb006204fc Added printrun sourcecode from
mbayer
parents:
diff changeset
114
0bbb006204fc Added printrun sourcecode from
mbayer
parents:
diff changeset
115 def close_window(self, event = None):
0bbb006204fc Added printrun sourcecode from
mbayer
parents:
diff changeset
116 if self.window:
0bbb006204fc Added printrun sourcecode from
mbayer
parents:
diff changeset
117 self.window.Destroy()
0bbb006204fc Added printrun sourcecode from
mbayer
parents:
diff changeset
118 self.window = None
0bbb006204fc Added printrun sourcecode from
mbayer
parents:
diff changeset
119
0bbb006204fc Added printrun sourcecode from
mbayer
parents:
diff changeset
120 if __name__ == '__main__':
0bbb006204fc Added printrun sourcecode from
mbayer
parents:
diff changeset
121 import sys
46
cce0af6351f0 updated and added new files for printrun
mdd
parents: 15
diff changeset
122 from . import gcoder
15
0bbb006204fc Added printrun sourcecode from
mbayer
parents:
diff changeset
123 gcode = gcoder.GCode(open(sys.argv[1]))
0bbb006204fc Added printrun sourcecode from
mbayer
parents:
diff changeset
124 app = wx.App(False)
0bbb006204fc Added printrun sourcecode from
mbayer
parents:
diff changeset
125 ex = Excluder()
0bbb006204fc Added printrun sourcecode from
mbayer
parents:
diff changeset
126 ex.pop_window(gcode)
0bbb006204fc Added printrun sourcecode from
mbayer
parents:
diff changeset
127 app.MainLoop()

mercurial