import wx,time class window(wx.Frame): def __init__(self,f,size=(600,600),bedsize=(200,200)): wx.Frame.__init__(self,None,title="Layer view (Use arrow keys to switch layers)",size=(size[0],size[1])) self.p=gviz(self,size=size,bedsize=bedsize) s=time.time() for i in f: self.p.addgcode(i) #print time.time()-s self.p.Bind(wx.EVT_KEY_DOWN,self.key) self.Bind(wx.EVT_KEY_DOWN,self.key) self.p.Bind(wx.EVT_MOUSEWHEEL,self.zoom) self.Bind(wx.EVT_MOUSEWHEEL,self.zoom) def key(self, event): x=event.GetKeyCode() #print x if x==wx.WXK_UP: self.p.layerup() if x==wx.WXK_DOWN: self.p.layerdown() #print p.lines.keys() def zoom(self, event): z=event.GetWheelRotation() if event.ShiftDown(): if z > 0: self.p.layerdown() elif z < 0: self.p.layerup() else: if z > 0: self.p.zoom(event.GetX(),event.GetY(),1.2) elif z < 0: self.p.zoom(event.GetX(),event.GetY(),1/1.2) class gviz(wx.Panel): def __init__(self,parent,size=(200,200),bedsize=(200,200)): wx.Panel.__init__(self,parent,-1,size=(size[0],size[1])) self.size=size self.bedsize=bedsize self.lastpos=[0,0,0,0,0] self.hilightpos=self.lastpos[:] self.Bind(wx.EVT_PAINT,self.paint) self.lines={} self.pens={} self.layers=[] self.layerindex=0 self.scale=[min(float(size[0])/bedsize[0],float(size[1])/bedsize[1])]*2 self.translate=[0.0, 0.0] self.mainpen=wx.Pen(wx.Colour(0,0,0)) self.hlpen=wx.Pen(wx.Colour(200,50,50)) self.fades=[wx.Pen(wx.Colour(150+20*i,150+20*i,150+20*i)) for i in xrange(6)] self.showall=0 self.hilight=[] self.dirty=1 self.blitmap=wx.EmptyBitmap(self.GetClientSize()[0],self.GetClientSize()[1],-1) def clear(self): self.lastpos=[0,0,0,0,0] self.lines={} self.pens={} self.layers=[] self.layerindex=0 self.showall=0 self.dirty=1 self.blitmap=wx.EmptyBitmap(self.GetClientSize()[0],self.GetClientSize()[1],-1) self.repaint() def layerup(self): if(self.layerindex+10): self.layerindex-=1 self.repaint() self.Refresh() def setlayer(self,layer): try: self.layerindex=self.layers.index(layer) self.repaint() wx.CallAfter(self.Refresh) self.showall=0 except: pass def zoom(self,x,y,factor): self.scale = [s * factor for s in self.scale] self.translate = [ x - (x-self.translate[0]) * factor, y - (y-self.translate[1]) * factor] #self.dirty=1 self.repaint() self.Refresh() def repaint(self): self.blitmap=wx.EmptyBitmap(self.GetClientSize()[0],self.GetClientSize()[1],-1) dc=wx.MemoryDC() dc.SelectObject(self.blitmap) dc.SetBackground(wx.Brush((250,250,200))) dc.Clear() if not self.showall: dc.SetBrush(wx.Brush((43,144,255))) dc.DrawRectangle(self.size[0]-15,0,15,self.size[1]) dc.SetBrush(wx.Brush((0,255,0))) if len(self.layers): dc.DrawRectangle(self.size[0]-14,(1.0-(1.0*(self.layerindex+1))/len(self.layers))*self.size[1],13,self.size[1]-1) def scaler(x): return (self.scale[0]*x[0]+self.translate[0], self.scale[1]*x[1]+self.translate[1], self.scale[0]*x[2]+self.translate[0], self.scale[1]*x[3]+self.translate[1],) if self.showall: l=[] for i in self.layers: dc.DrawLineList(l,self.fades[0]) l=map(scaler,self.lines[i]) dc.DrawLineList(l,self.pens[i]) return if self.layerindex