]>
git.saurik.com Git - wxWidgets.git/blob - wxPython/demo/DrawXXXList.py
   7 #---------------------------------------------------------------------- 
  29 #---------------------------------------------------------------------- 
  31 def makeRandomPoints(num
, w
, h
): 
  35         x 
= random
.randint(0, w
) 
  36         y 
= random
.randint(0, h
) 
  42 def makeRandomLines(num
, w
, h
): 
  46         x1 
= random
.randint(0, w
) 
  47         y1 
= random
.randint(0, h
) 
  48         x2 
= random
.randint(0, w
) 
  49         y2 
= random
.randint(0, h
) 
  50         pnts
.append( (x1
,y1
, x2
,y2
) ) 
  55 def makeRandomRectangles(num
, W
, H
): 
  59         w 
= random
.randint(10, W
/2) 
  60         h 
= random
.randint(10, H
/2) 
  61         x 
= random
.randint(0, W 
- w
) 
  62         y 
= random
.randint(0, H 
- h
) 
  63         rects
.append( (x
, y
, w
, h
) ) 
  68 def makeRandomText(num
): 
  69     Np 
= 8 # number of characters in text 
  76             c 
= chr( random
.randint(48, 122) ) 
  79         text
.append( "".join(word
) ) 
  84 def makeRandomPolygons(num
, W
, H
): 
  85     Np 
= 8 # number of points per polygon 
  92             x 
= random
.randint(0, W
) 
  93             y 
= random
.randint(0, H
) 
 101 def makeRandomPens(num
, cache
): 
 105         c 
= random
.choice(colours
) 
 106         t 
= random
.randint(1, 4) 
 108         if not cache
.has_key( (c
, t
) ): 
 109             cache
[(c
, t
)] = wx
.Pen(c
, t
) 
 111         pens
.append( cache
[(c
, t
)] ) 
 116 def makeRandomBrushes(num
, cache
): 
 120         c 
= random
.choice(colours
) 
 122         if not cache
.has_key(c
): 
 123             cache
[c
] = wx
.Brush(c
) 
 125         brushes
.append( cache
[c
] ) 
 130 def makeRandomColors(num
): 
 134         c 
= random
.choice(colours
) 
 135         colors
.append(wx
.NamedColour(c
)) 
 166     # make some lists of random shapes 
 167     points 
= makeRandomPoints(n
, w
, h
) 
 171         Apoints 
= Numeric
.array(points
) 
 175     lines 
= makeRandomLines(n
, w
, h
) 
 176     rectangles 
= makeRandomRectangles(n
, w
, h
) 
 177     polygons 
= makeRandomPolygons(n
, w
, h
) 
 178     text 
= makeRandomText(n
) 
 180     # make some random pens and brushes 
 181     pens  
= makeRandomPens(n
, pencache
) 
 182     brushes 
= makeRandomBrushes(n
, brushcache
) 
 183     # make some random color lists 
 184     colors1 
= makeRandomColors(n
) 
 185     colors2 
= makeRandomColors(n
) 
 189 def TestPoints(dc
,log
): 
 192     dc
.SetPen(wx
.Pen("BLACK", 4)) 
 194     dc
.DrawPointList(points
) 
 195     dc
.DrawPointList(points
, wx
.Pen("RED", 2)) 
 196     dc
.DrawPointList(points
, pens
) 
 199     log
.write("DrawTime: %s seconds with DrawPointList\n" % (time
.time() - start
)) 
 202 def TestArrayPoints(dc
,log
): 
 208         dc
.SetPen(wx
.Pen("BLACK", 1)) 
 211             dc
.DrawPointList(Apoints
) 
 213         #dc.DrawPointList(Apoints, wx.Pen("RED", 2)) 
 214         #dc.DrawPointList(Apoints, pens) 
 216         log
.write("DrawTime: %s seconds with DrawPointList an Numpy Array\n" % (time
.time() - start
)) 
 218         log
.write("Couldn't import Numeric") 
 222 def TestLines(dc
,log
): 
 226     dc
.SetPen(wx
.Pen("BLACK", 2)) 
 227     dc
.DrawLineList(lines
) 
 228     dc
.DrawLineList(lines
, wx
.Pen("RED", 2)) 
 229     dc
.DrawLineList(lines
, pens
) 
 232     log
.write("DrawTime: %s seconds with DrawLineList\n" % (time
.time() - start
)) 
 235 def TestRectangles(dc
,log
): 
 239     dc
.SetPen( wx
.Pen("BLACK",1) ) 
 240     dc
.SetBrush( wx
.Brush("RED") ) 
 242     dc
.DrawRectangleList(rectangles
) 
 243     dc
.DrawRectangleList(rectangles
,pens
) 
 244     dc
.DrawRectangleList(rectangles
,pens
[0],brushes
) 
 245     dc
.DrawRectangleList(rectangles
,pens
,brushes
[0]) 
 246     dc
.DrawRectangleList(rectangles
,None,brushes
) 
 247 ##    for i in range(10): 
 248 ##        #dc.DrawRectangleList(rectangles,pens,brushes) 
 249 ##        dc.DrawRectangleList(rectangles) 
 252     log
.write("DrawTime: %s seconds with DrawRectanglesList\n" % (time
.time() - start
)) 
 255 def TestEllipses(dc
,log
): 
 259     dc
.SetPen( wx
.Pen("BLACK",1) ) 
 260     dc
.SetBrush( wx
.Brush("RED") ) 
 262     dc
.DrawEllipseList(rectangles
) 
 263     dc
.DrawEllipseList(rectangles
,pens
) 
 264     dc
.DrawEllipseList(rectangles
,pens
[0],brushes
) 
 265     dc
.DrawEllipseList(rectangles
,pens
,brushes
[0]) 
 266     dc
.DrawEllipseList(rectangles
,None,brushes
) 
 267     dc
.DrawEllipseList(rectangles
,pens
,brushes
) 
 270     log
.write("DrawTime: %s seconds with DrawEllipsesList\n" % (time
.time() - start
)) 
 273 def TestRectanglesArray(dc
,log
): 
 276         Apoints 
= Numeric
.array(rectangles
) 
 280         dc
.SetPen(wx
.Pen("BLACK", 1)) 
 281         dc
.DrawRectangleList(rectangles
) 
 282         dc
.DrawRectangleList(rectangles
,pens
) 
 283         dc
.DrawRectangleList(rectangles
,pens
[0],brushes
) 
 284         dc
.DrawRectangleList(rectangles
,pens
,brushes
[0]) 
 285         dc
.DrawRectangleList(rectangles
,None,brushes
) 
 286 ##        for i in range(10): 
 287 ##            #dc.DrawRectangleList(rectangles,pens,brushes) 
 288 ##            dc.DrawRectangleList(rectangles) 
 291         log
.write("DrawTime: %s seconds with DrawRectangleList and Numpy Array\n" % (time
.time() - start
)) 
 293         log
.write("Couldn't import Numeric") 
 297 def TestRectanglesLoop(dc
,log
): 
 301     dc
.DrawRectangleList(rectangles
,pens
,brushes
) 
 302     log
.write("DrawTime: %s seconds with DrawRectanglesList\n" % (time
.time() - start
)) 
 306     for i 
in range(len(rectangles
)): 
 308         dc
.SetBrush( brushes
[i
]  ) 
 309         dc
.DrawRectangle(rectangles
[i
][0],rectangles
[i
][1],rectangles
[i
][2],rectangles
[i
][3]) 
 312     log
.write("DrawTime: %s seconds with Python loop\n" % (time
.time() - start
)) 
 315 def TestPolygons(dc
,log
): 
 319     dc
.SetPen(wx
.Pen("BLACK", 1)) 
 320     dc
.DrawPolygonList(polygons
) 
 321     dc
.DrawPolygonList(polygons
,pens
) 
 322     dc
.DrawPolygonList(polygons
,pens
[0],brushes
) 
 323     dc
.DrawPolygonList(polygons
,pens
,brushes
[0]) 
 324     dc
.DrawPolygonList(polygons
,None,brushes
) 
 325     log
.write("DrawTime: %s seconds with DrawPolygonList\n" % (time
.time() - start
)) 
 330 def TestText(dc
,log
): 
 335     # NOTE: you need to set BackgroundMode for the background colors to be used. 
 336     dc
.SetBackgroundMode(wx
.SOLID
) 
 339     dc
.DrawTextList(text
, points
, foreground
, background
) 
 341     log
.write("DrawTime: %s seconds with DrawTextList\n" % (time
.time() - start
)) 
 347 class TestNB(wx
.Notebook
): 
 348     def __init__(self
, parent
, id, log
): 
 351         if wx
.Platform 
== "__WXMAC__": 
 354         wx
.Notebook
.__init
__(self
, parent
, id, style
=style
) 
 357         # Initialize our various samples and add them to the notebook. 
 358         win 
= DrawPanel(self
, TestEllipses
, log
) 
 359         self
.AddPage(win
, 'Ellipses') 
 361         win 
= DrawPanel(self
, TestText
, log
) 
 362         self
.AddPage(win
, 'Text') 
 364         win 
= DrawPanel(self
, TestPolygons
, log
) 
 365         self
.AddPage(win
, 'Polygons') 
 367         win 
= DrawPanel(self
, TestPoints
, log
) 
 368         self
.AddPage(win
, 'Points') 
 370         win 
= DrawPanel(self
, TestLines
, log
) 
 371         self
.AddPage(win
, 'Lines') 
 373         win 
= DrawPanel(self
, TestRectangles
, log
) 
 374         self
.AddPage(win
, 'Rectangles') 
 376 # Class used for all the various sample pages; the mechanics are the same 
 377 # for each one with regards to the notebook. The only difference is 
 378 # the function we use to draw on it. 
 379 class DrawPanel(wx
.Panel
): 
 380     def __init__(self
, parent
, drawFun
, log
): 
 381         wx
.Panel
.__init
__(self
, parent
, -1) 
 382         self
.SetBackgroundColour(wx
.WHITE
) 
 385         self
.drawFun 
= drawFun
 
 386         self
.Bind(wx
.EVT_PAINT
, self
.OnPaint
) 
 389     def OnPaint(self
, evt
): 
 390         dc 
= wx
.PaintDC(self
) 
 392         self
.drawFun(dc
,self
.log
) 
 395 #---------------------------------------------------------------------- 
 397 def runTest(frame
, nb
, log
): 
 398     w 
= nb
.GetClientSize().width
 
 399     h 
= nb
.GetClientSize().height
 
 403     win 
= TestNB(nb
, -1, log
) 
 406 #---------------------------------------------------------------------- 
 411 Some methods have been added to wx.DC to help with optimization of 
 412 drawing routines.  Currently they are: 
 415     DrawPointList(sequence, pens=None) 
 417     Where sequence is a tuple, list, whatever of 2 element tuples 
 418     (x, y) and pens is either None, a single pen or a list of pens. 
 421     DrawLineList(sequence, pens=None) 
 423      Where sequence is a tuple, list, whatever of 4 element tuples 
 424      (x1,y1, x2,y2) and pens is either None, a single pen or a list 
 428     DrawRectangleList(rectangles, pens=None, brushes=None) 
 433     DrawEllipseList(ellipses, pens=None, brushes=None) 
 438     DrawPolygonList(polygons, pens=None, brushes=None) 
 443     DrawTextList(textList, coords, foregrounds = None, backgrounds = None) 
 449 if __name__ 
== '__main__': 
 452     run
.main(['', os
.path
.basename(sys
.argv
[0])])