diff --git a/gviz.py b/gviz.py index 97cb1b0..d5e3bfb 100755 --- a/gviz.py +++ b/gviz.py @@ -58,12 +58,14 @@ class gviz(wx.Panel): self.size=size self.bedsize=bedsize self.grid=grid - self.lastpos=[0,0,0,0,0] + self.lastpos=[0,0,0,0,0,0,0] self.hilightpos=self.lastpos[:] self.Bind(wx.EVT_PAINT,self.paint) self.Bind(wx.EVT_SIZE,lambda *e:(wx.CallAfter(self.repaint),wx.CallAfter(self.Refresh))) self.lines={} self.pens={} + self.arcs={} + self.arcpens={} self.layers=[] self.layerindex=0 self.filament_width=extrusion_width # set it to 0 to disable scaling lines with zoom @@ -71,17 +73,19 @@ class gviz(wx.Panel): penwidth = max(1.0,self.filament_width*((self.scale[0]+self.scale[1])/2.0)) self.translate=[0.0,0.0] self.mainpen=wx.Pen(wx.Colour(0,0,0),penwidth) + self.arcpen=wx.Pen(wx.Colour(255,0,0),penwidth) self.travelpen=wx.Pen(wx.Colour(10,80,80),penwidth) self.hlpen=wx.Pen(wx.Colour(200,50,50),penwidth) self.fades=[wx.Pen(wx.Colour(250-0.6**i*100,250-0.6**i*100,200-0.4**i*50),penwidth) for i in xrange(6)] self.penslist=[self.mainpen,self.travelpen,self.hlpen]+self.fades self.showall=0 self.hilight=[] + self.hilightarcs=[] 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.lastpos=[0,0,0,0,0,0,0] self.lines={} self.pens={} self.layers=[] @@ -143,27 +147,48 @@ class gviz(wx.Panel): 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],) + + def _drawlines(lines,pens): + 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],) + scaled_lines = map(_scaler,lines) + dc.DrawLineList(scaled_lines, pens) + + def _drawarcs(arcs,pens): + 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], + self.scale[0]*x[4]+self.translate[0], + self.scale[1]*x[5]+self.translate[1],) + scaled_arcs = map(_scaler,arcs) + for i in range(len(scaled_arcs)): + dc.SetPen(pens[i] if type(pens).__name__ == 'list' else pens) + dc.SetBrush(wx.TRANSPARENT_BRUSH) + dc.DrawArc(*scaled_arcs[i]) + 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]) + _drawlines(self.lines[i], self.pens[i]) + _drawarcs(self.arcs[i], self.arcpens[i]) return if self.layerindex