1''' 2Code for raster displays using wxPython. 3''' 4 5from __future__ import absolute_import, division, print_function, unicode_literals 6 7import logging 8import wx 9from spectral.graphics.graphics import SpyWindow 10 11logger = logging.getLogger('spectral') 12 13class RasterWindow(wx.Frame, SpyWindow): 14 ''' 15 RasterWindow is the primary wxWindows object for displaying SPy 16 images. The frames also handle left double-click events by 17 displaying an x-y plot of the spectrum for the associated pixel. 18 ''' 19 def __init__(self, parent, index, rgb, **kwargs): 20 if 'title' in kwargs: 21 title = kwargs['title'] 22 else: 23 title = 'SPy Image' 24# wxFrame.__init__(self, parent, index, "SPy Frame") 25# wxScrolledWindow.__init__(self, parent, index, style = wxSUNKEN_BORDER) 26 27 img = wx.EmptyImage(rgb.shape[0], rgb.shape[1]) 28 img = wx.EmptyImage(rgb.shape[1], rgb.shape[0]) 29 img.SetData(rgb.tostring()) 30 self.bmp = img.ConvertToBitmap() 31 self.kwargs = kwargs 32 wx.Frame.__init__(self, parent, index, title, 33 wx.DefaultPosition) 34 self.SetClientSizeWH(self.bmp.GetWidth(), self.bmp.GetHeight()) 35 wx.EVT_PAINT(self, self.on_paint) 36 wx.EVT_LEFT_DCLICK(self, self.left_double_click) 37 38 def on_paint(self, e): 39 dc = wx.PaintDC(self) 40 self.paint(dc) 41 42 def paint(self, dc): 43 44 dc.BeginDrawing() 45 dc.DrawBitmap(self.bmp, 0, 0) 46 # dc.Blit(0,0, bmp.GetWidth(), bmp.GetHeight(), mDC, 0, 0) 47 dc.EndDrawing() 48 49 def left_double_click(self, evt): 50 from spectral import settings 51 if "data source" in self.kwargs: 52 logger.info('{}'.format((evt.GetY(), evt.GetX()))), 53 settings.plotter.plot(self.kwargs["data source"], 54 [evt.GetY(), evt.GetX()], 55 source=self.kwargs["data source"]) 56