X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/9d37f9642887a5602d7c0b59527f213c32dd501a..025fa9a96bba741d6825ce8f78df37dc07dc6062:/wxPython/demo/DrawXXXList.py diff --git a/wxPython/demo/DrawXXXList.py b/wxPython/demo/DrawXXXList.py index 46afed8951..f22ec2e2d2 100644 --- a/wxPython/demo/DrawXXXList.py +++ b/wxPython/demo/DrawXXXList.py @@ -46,6 +46,43 @@ def makeRandomLines(num, w, h): return pnts +def makeRandomRectangles(num, W, H): + rects = [] + for i in range(num): + w = whrandom.randint(10, W/2) + h = whrandom.randint(10, H/2) + x = whrandom.randint(0, W - w) + y = whrandom.randint(0, H - h) + rects.append( (x, y, w, h) ) + return rects + + +def makeRandomText(num): + Np = 8 # number of characters in text + text = [] + for i in range(num): + word = [] + for i in range(Np): + c = chr( whrandom.randint(48, 122) ) + word.append( c ) + text.append( "".join(word) ) + return text + + +def makeRandomPolygons(num, W, H): + Np = 8 # number of points per polygon + polys = [] + for i in range(num): + poly = [] + for i in range(Np): + x = whrandom.randint(0, W) + y = whrandom.randint(0, H) + poly.append( (x,y) ) + polys.append( poly ) + return polys + + + def makeRandomPens(num, cache): pens = [] for i in range(num): @@ -57,58 +94,278 @@ def makeRandomPens(num, cache): return pens -class TestPanel(wxPanel): - def __init__(self, parent, size, log): - wxPanel.__init__(self, parent, -1, size=size) - self.log = log - self.SetBackgroundColour(wxWHITE) +def makeRandomBrushes(num, cache): + brushes = [] + for i in range(num): + c = whrandom.choice(colours) + if not cache.has_key(c): + cache[c] = wxBrush(c) + brushes.append( cache[c] ) + return brushes - w = size.width - h = size.height - pencache = {} - # make some lists of random points - self.pnts1 = makeRandomPoints(1000, w, h) - self.pnts2 = makeRandomPoints(1000, w, h) - self.pnts3 = makeRandomPoints(1000, w, h) - self.pens1 = makeRandomPens(1000, pencache) +def makeRandomColors(num): + colors = [] + for i in range(num): + c = whrandom.choice(colours) + colors.append(wxNamedColor(c)) + return colors - # and now some lines - self.lines1 = makeRandomLines(500, w, h) - self.lines2 = makeRandomLines(500, w, h) - self.lines3 = makeRandomLines(500, w, h) - self.pens2 = makeRandomPens(500, pencache) - EVT_PAINT(self, self.OnPaint) +pencache = {} +brushcache = {} +points = None +lines = None +rectangles = None +polygons = None +text = None +pens = None +brushes = None +colors1 = None +colors2 = None + + +def Init(w, h, n): + global pencache + global brushcache + global points + global lines + global rectangles + global polygons + global text + global pens + global brushes + global colors1 + global colors2 + + # make some lists of random shapes + points = makeRandomPoints(n, w, h) + try: + import Numeric + Apoints = Numeric.array(points) + except: + pass + lines = makeRandomLines(n, w, h) + rectangles = makeRandomRectangles(n, w, h) + polygons = makeRandomPolygons(n, w, h) + text = makeRandomText(n) + + # make some random pens and brushes + pens = makeRandomPens(n, pencache) + brushes = makeRandomBrushes(n, brushcache) + # make some random color lists + colors1 = makeRandomColors(n) + colors2 = makeRandomColors(n) + + + +def TestPoints(dc,log): + dc.BeginDrawing() + start = time.time() + dc.SetPen(wxPen("BLACK", 4)) + + dc.DrawPointList(points) + dc.DrawPointList(points, wxPen("RED", 2)) + dc.DrawPointList(points, pens) + + dc.EndDrawing() + log.write("DrawTime: %s seconds with DrawPointList\n" % (time.time() - start)) + + +def TestArrayPoints(dc,log): + try: + import Numeric - def OnPaint(self, evt): - dc = wxPaintDC(self) dc.BeginDrawing() start = time.time() - dc.SetPen(wxPen("BLACK", 1)) - dc.DrawPointList(self.pnts1) - dc.DrawPointList(self.pnts2, wxPen("RED", 2)) - dc.DrawPointList(self.pnts3, self.pens1) + for i in range(1): + dc.DrawPointList(Apoints) + #dc.DrawPointList(Apoints, wxPen("RED", 2)) + #dc.DrawPointList(Apoints, pens) + dc.EndDrawing() + log.write("DrawTime: %s seconds with DrawPointList an Numpy Array\n" % (time.time() - start)) + except ImportError: + log.write("Couldn't import Numeric") + pass + + +def TestLines(dc,log): + dc.BeginDrawing() + start = time.time() + + dc.SetPen(wxPen("BLACK", 2)) + dc.DrawLineList(lines) + dc.DrawLineList(lines, wxPen("RED", 2)) + dc.DrawLineList(lines, pens) + + dc.EndDrawing() + log.write("DrawTime: %s seconds with DrawLineList\n" % (time.time() - start)) + + +def TestRectangles(dc,log): + dc.BeginDrawing() + start = time.time() + + dc.SetPen( wxPen("BLACK",1) ) + dc.SetBrush( wxBrush("RED") ) + dc.DrawRectangleList(rectangles) + dc.DrawRectangleList(rectangles,pens) + dc.DrawRectangleList(rectangles,pens[0],brushes) + dc.DrawRectangleList(rectangles,pens,brushes[0]) + dc.DrawRectangleList(rectangles,None,brushes) +## for i in range(10): +## #dc.DrawRectangleList(rectangles,pens,brushes) +## dc.DrawRectangleList(rectangles) + + dc.EndDrawing() + log.write("DrawTime: %s seconds with DrawRectanglesList\n" % (time.time() - start)) + + +def TestEllipses(dc,log): + dc.BeginDrawing() + start = time.time() + + dc.SetPen( wxPen("BLACK",1) ) + dc.SetBrush( wxBrush("RED") ) + + dc.DrawEllipseList(rectangles) + dc.DrawEllipseList(rectangles,pens) + dc.DrawEllipseList(rectangles,pens[0],brushes) + dc.DrawEllipseList(rectangles,pens,brushes[0]) + dc.DrawEllipseList(rectangles,None,brushes) + dc.DrawEllipseList(rectangles,pens,brushes) + + dc.EndDrawing() + log.write("DrawTime: %s seconds with DrawEllipsesList\n" % (time.time() - start)) + + +def TestRectanglesArray(dc,log): + try: + import Numeric + Apoints = Numeric.array(rectangles) + + dc.BeginDrawing() + start = time.time() dc.SetPen(wxPen("BLACK", 1)) - dc.DrawLineList(self.lines1) - dc.DrawLineList(self.lines2, wxPen("RED", 2)) - dc.DrawLineList(self.lines3, self.pens2) + dc.DrawRectangleList(rectangles) + dc.DrawRectangleList(rectangles,pens) + dc.DrawRectangleList(rectangles,pens[0],brushes) + dc.DrawRectangleList(rectangles,pens,brushes[0]) + dc.DrawRectangleList(rectangles,None,brushes) +## for i in range(10): +## #dc.DrawRectangleList(rectangles,pens,brushes) +## dc.DrawRectangleList(rectangles) dc.EndDrawing() - self.log.write("DrawTime: %s seconds\n" % (time.time() - start)) - self.log.write("GetBoundingBox: %s\n" % (dc.GetBoundingBox(), )) + log.write("DrawTime: %s seconds with DrawRectangleList and Numpy Array\n" % (time.time() - start)) + except ImportError: + log.write("Couldn't import Numeric") + pass + + +def TestRectanglesLoop(dc,log): + dc.BeginDrawing() + + start = time.time() + dc.DrawRectangleList(rectangles,pens,brushes) + log.write("DrawTime: %s seconds with DrawRectanglesList\n" % (time.time() - start)) + + start = time.time() + for i in range(len(rectangles)): + dc.SetPen( pens[i] ) + dc.SetBrush( brushes[i] ) + dc.DrawRectangle(rectangles[i][0],rectangles[i][1],rectangles[i][2],rectangles[i][3]) + dc.EndDrawing() + log.write("DrawTime: %s seconds with Python loop\n" % (time.time() - start)) + + +def TestPolygons(dc,log): + dc.BeginDrawing() + + start = time.time() + dc.SetPen(wxPen("BLACK", 1)) + dc.DrawPolygonList(polygons) + dc.DrawPolygonList(polygons,pens) + dc.DrawPolygonList(polygons,pens[0],brushes) + dc.DrawPolygonList(polygons,pens,brushes[0]) + dc.DrawPolygonList(polygons,None,brushes) + log.write("DrawTime: %s seconds with DrawPolygonList\n" % (time.time() - start)) + + dc.EndDrawing() + + +def TestText(dc,log): + dc.BeginDrawing() + + start = time.time() + + # NOTE: you need to set BackgroundMode for the background colors to be used. + dc.SetBackgroundMode(wxSOLID) + foreground = colors1 + background = colors2 + dc.DrawTextList(text, points, foreground, background) + + log.write("DrawTime: %s seconds with DrawTextList\n" % (time.time() - start)) + + dc.EndDrawing() + + + +class TestNB(wxNotebook): + def __init__(self, parent, id, log): + style = wxNB_BOTTOM + if wxPlatform == "__WXMAC__": + style = 0 + wxNotebook.__init__(self, parent, id, style=style) + self.log = log + + win = DrawPanel(self, TestEllipses, log) + self.AddPage(win, 'Ellipses') + + win = DrawPanel(self, TestText, log) + self.AddPage(win, 'Text') + + win = DrawPanel(self, TestPolygons, log) + self.AddPage(win, 'Polygons') + + win = DrawPanel(self, TestPoints, log) + self.AddPage(win, 'Points') + + win = DrawPanel(self, TestLines, log) + self.AddPage(win, 'Lines') + + win = DrawPanel(self, TestRectangles, log) + self.AddPage(win, 'Rectangles') + + +class DrawPanel(wxPanel): + def __init__(self, parent, drawFun, log): + wxPanel.__init__(self, parent, -1) + self.SetBackgroundColour(wxWHITE) + + self.log = log + self.drawFun = drawFun + EVT_PAINT(self, self.OnPaint) + + + def OnPaint(self, evt): + dc = wxPaintDC(self) + dc.Clear() + self.drawFun(dc,self.log) + #---------------------------------------------------------------------- def runTest(frame, nb, log): w = nb.GetClientSize().width h = nb.GetClientSize().height - if w < 300: w = 300 - if h < 300: h = 300 - win = TestPanel(nb, wxSize(w, h), log) + if w < 600: w = 600 + if h < 400: h = 400 + Init(w, h, 200) + win = TestNB(nb, -1, log) return win #---------------------------------------------------------------------- @@ -129,7 +386,33 @@ drawing routines. Currently they are: DrawLineList(sequence, pens=None) Where sequence is a tuple, list, whatever of 4 element tuples - (x1,y1, x2,y2) andd pens is either None, a single pen or a list + (x1,y1, x2,y2) and pens is either None, a single pen or a list of pens. +
+ DrawRectangleList(rectangles, pens=None, brushes=None) ++ + +
+ DrawEllipseList(ellipses, pens=None, brushes=None) ++ + +
+ DrawPolygonList(polygons, pens=None, brushes=None) ++ + +
+ DrawTextList(textList, coords, foregrounds = None, backgrounds = None) ++ """ + + +if __name__ == '__main__': + import sys,os + import run + run.main(['', os.path.basename(sys.argv[0])]) +