Commit 068c9bbab43d43492384f10529a2b8ad71327d29
1 parent
49f5b7b7
Exists in
master
and in
26 other branches
Testings
Showing
1 changed file
with
58 additions
and
14 deletions
Show diff stats
invesalius/data/viewer_slice.py
... | ... | @@ -33,6 +33,8 @@ import styles |
33 | 33 | import wx |
34 | 34 | from wx.lib.pubsub import pub as Publisher |
35 | 35 | |
36 | +import Image, ImageDraw | |
37 | + | |
36 | 38 | try: |
37 | 39 | from agw import floatspin as FS |
38 | 40 | except ImportError: # if it's not there locally, try the wxPython lib. |
... | ... | @@ -152,7 +154,7 @@ class CanvasRendererCTX: |
152 | 154 | self.canvas_renderer = viewer.slice_data.canvas_renderer |
153 | 155 | self._size = self.canvas_renderer.GetSize() |
154 | 156 | self._init_canvas() |
155 | - viewer.slice_data.renderer.AddObserver("EndEvent", self.OnPaint) | |
157 | + viewer.slice_data.renderer.AddObserver("StartEvent", self.OnPaint2) | |
156 | 158 | |
157 | 159 | def _init_canvas(self): |
158 | 160 | w, h = self._size |
... | ... | @@ -172,14 +174,40 @@ class CanvasRendererCTX: |
172 | 174 | |
173 | 175 | self.canvas_renderer.AddActor2D(self.actor) |
174 | 176 | |
177 | + rgb = np.zeros((h, w, 3), dtype=np.uint8) | |
178 | + alpha = np.zeros((h, w, 1), dtype=np.uint8) | |
179 | + | |
175 | 180 | self.bitmap = wx.EmptyBitmapRGBA(w, h) |
181 | + self.image = wx.ImageFromBuffer(w, h, rgb, alpha) | |
182 | + | |
183 | + self._im = Image.frombuffer('RGBA', (h, w), self._array, "raw", "RGBA", 0, 1) | |
176 | 184 | |
177 | 185 | def _resize_canvas(self, w, h): |
178 | 186 | self._array = np.zeros((h, w, 4), dtype=np.uint8) |
179 | 187 | self._cv_image = converters.np_rgba_to_vtk(self._array) |
180 | 188 | self.mapper.SetInputData(self._cv_image) |
181 | 189 | self.mapper.Update() |
190 | + | |
191 | + rgb = np.zeros((h, w, 3), dtype=np.uint8) | |
192 | + alpha = np.zeros((h, w, 1), dtype=np.uint8) | |
193 | + | |
182 | 194 | self.bitmap = wx.EmptyBitmapRGBA(w, h) |
195 | + self.image = wx.ImageFromBuffer(w, h, rgb, alpha) | |
196 | + | |
197 | + self._im = Image.frombuffer('RGBA', (h, w), self._array, "raw", "RGBA", 0, 1) | |
198 | + | |
199 | + def OnPaint2(self, evt, obj): | |
200 | + size = self.canvas_renderer.GetSize() | |
201 | + w, h = size | |
202 | + if self._size != size: | |
203 | + self._size = size | |
204 | + self._resize_canvas(w, h) | |
205 | + | |
206 | + draw = ImageDraw.Draw(self._im) | |
207 | + draw.rectangle((30, 30, 500, 500), fill=(0, 255, 0, 255)) | |
208 | + | |
209 | + print ">>", self._array.max() | |
210 | + self._cv_image.Modified() | |
183 | 211 | |
184 | 212 | def OnPaint(self, evt, obj): |
185 | 213 | size = self.canvas_renderer.GetSize() |
... | ... | @@ -188,26 +216,42 @@ class CanvasRendererCTX: |
188 | 216 | self._size = size |
189 | 217 | self._resize_canvas(w, h) |
190 | 218 | |
191 | - pen = wx.Pen(wx.Colour(255, 0, 0, 255), 10, wx.SOLID) | |
192 | - memorydc = wx.MemoryDC(self.bitmap) | |
219 | + | |
220 | + self.image.Clear() | |
221 | + gc = wx.GraphicsContext.Create(self.image) | |
222 | + gc.SetAntialiasMode(0) | |
223 | + # memorydc = wx.MemoryDC(self.bitmap) | |
193 | 224 | # memorydc.SelectObject(self.bitmap) |
194 | - memorydc.SetPen(pen) | |
195 | - memorydc.SetBrush(wx.Brush(wx.Colour(255, 255, 0, 255))) | |
225 | + | |
226 | + pen = wx.Pen(wx.Colour(255, 0, 0, 128), 1, wx.SOLID) | |
227 | + brush = wx.Brush(wx.Colour(0, 255, 0, 128)) | |
228 | + gc.SetPen(pen) | |
229 | + gc.SetBrush(brush) | |
230 | + | |
231 | + | |
232 | + path = gc.CreatePath() | |
233 | + path.AddArc(w/2.0, h/2.0, self.viewer.slice_data.number, 0, np.pi * 2) | |
234 | + gc.StrokePath(path) | |
235 | + gc.FillPath(path) | |
196 | 236 | # self.memorydc.Clear() |
197 | 237 | # self.memorydc.BeginDrawing() |
198 | - memorydc.DrawCircle(100, 100, self.viewer.slice_data.number * 5) | |
199 | - memorydc.DrawCircle(500, 500, 500) | |
200 | - memorydc.DrawRectangle(0, 0, w, h) | |
201 | - # self.memorydc.EndDrawing() | |
202 | - memorydc.SelectObject(wx.NullBitmap) | |
203 | - # self.bitmap.CopyToBuffer(self._array, wx.BitmapBufferFormat_RGBA) | |
238 | + # gc.DrawCircle(100, 100, self.viewer.slice_data.number * 5) | |
239 | + # memorydc.DrawCircle(500, 500, 500) | |
240 | + # memorydc.DrawRectangle(0, 0, w, h) | |
241 | + # # self.memorydc.EndDrawing() | |
242 | + # memorydc.SelectObject(wx.NullBitmap) | |
243 | + # # self.bitmap.CopyToBuffer(self._array, wx.BitmapBufferFormat_RGBA) | |
244 | + gc.Destroy() | |
245 | + | |
246 | + self.bitmap = self.image.ConvertToBitmap() | |
247 | + self.bitmap.CopyToBuffer(self._array, wx.BitmapBufferFormat_RGBA) | |
204 | 248 | |
205 | 249 | self._cv_image.Modified() |
206 | 250 | |
207 | - self.canvas_renderer.Render() | |
251 | + # self.canvas_renderer.Render() | |
208 | 252 | |
209 | - img = self.bitmap.ConvertToImage() | |
210 | - img.SaveFile('/tmp/manolo.png', wx.BITMAP_TYPE_PNG) | |
253 | + # img = self.bitmap.ConvertToImage() | |
254 | + # img.SaveFile('/tmp/manolo.png', wx.BITMAP_TYPE_PNG) | |
211 | 255 | |
212 | 256 | class Viewer(wx.Panel): |
213 | 257 | ... | ... |