]>
Commit | Line | Data |
---|---|---|
9d37f964 RD |
1 | |
2 | from wxPython.wx import * | |
3 | import whrandom, time | |
4 | ||
5 | #---------------------------------------------------------------------- | |
6 | ||
7 | colours = [ | |
8 | "BLACK", | |
9 | "BLUE", | |
10 | "BLUE VIOLET", | |
11 | "BROWN", | |
12 | "CYAN", | |
13 | "DARK GREY", | |
14 | "DARK GREEN", | |
15 | "GOLD", | |
16 | "GREY", | |
17 | "GREEN", | |
18 | "MAGENTA", | |
19 | "NAVY", | |
20 | "PINK", | |
21 | "RED", | |
22 | "SKY BLUE", | |
23 | "VIOLET", | |
24 | "YELLOW", | |
25 | ] | |
26 | ||
27 | #---------------------------------------------------------------------- | |
28 | ||
29 | def makeRandomPoints(num, w, h): | |
30 | pnts = [] | |
31 | for i in range(num): | |
32 | x = whrandom.randint(0, w) | |
33 | y = whrandom.randint(0, h) | |
34 | pnts.append( (x,y) ) | |
35 | return pnts | |
36 | ||
37 | ||
38 | def makeRandomLines(num, w, h): | |
39 | pnts = [] | |
40 | for i in range(num): | |
41 | x1 = whrandom.randint(0, w) | |
42 | y1 = whrandom.randint(0, h) | |
43 | x2 = whrandom.randint(0, w) | |
44 | y2 = whrandom.randint(0, h) | |
45 | pnts.append( (x1,y1, x2,y2) ) | |
46 | return pnts | |
47 | ||
48 | ||
49 | def makeRandomPens(num, cache): | |
50 | pens = [] | |
51 | for i in range(num): | |
52 | c = whrandom.choice(colours) | |
53 | t = whrandom.randint(1, 4) | |
54 | if not cache.has_key( (c, t) ): | |
55 | cache[(c, t)] = wxPen(c, t) | |
56 | pens.append( cache[(c, t)] ) | |
57 | return pens | |
58 | ||
59 | ||
60 | class TestPanel(wxPanel): | |
61 | def __init__(self, parent, size, log): | |
62 | wxPanel.__init__(self, parent, -1, size=size) | |
63 | self.log = log | |
64 | self.SetBackgroundColour(wxWHITE) | |
65 | ||
66 | w = size.width | |
67 | h = size.height | |
68 | pencache = {} | |
69 | ||
70 | # make some lists of random points | |
71 | self.pnts1 = makeRandomPoints(1000, w, h) | |
72 | self.pnts2 = makeRandomPoints(1000, w, h) | |
73 | self.pnts3 = makeRandomPoints(1000, w, h) | |
74 | self.pens1 = makeRandomPens(1000, pencache) | |
75 | ||
76 | # and now some lines | |
77 | self.lines1 = makeRandomLines(500, w, h) | |
78 | self.lines2 = makeRandomLines(500, w, h) | |
79 | self.lines3 = makeRandomLines(500, w, h) | |
80 | self.pens2 = makeRandomPens(500, pencache) | |
81 | ||
82 | EVT_PAINT(self, self.OnPaint) | |
83 | ||
84 | ||
85 | def OnPaint(self, evt): | |
86 | dc = wxPaintDC(self) | |
87 | dc.BeginDrawing() | |
88 | start = time.time() | |
89 | ||
90 | dc.SetPen(wxPen("BLACK", 1)) | |
91 | dc.DrawPointList(self.pnts1) | |
92 | dc.DrawPointList(self.pnts2, wxPen("RED", 2)) | |
93 | dc.DrawPointList(self.pnts3, self.pens1) | |
94 | ||
95 | dc.SetPen(wxPen("BLACK", 1)) | |
96 | dc.DrawLineList(self.lines1) | |
97 | dc.DrawLineList(self.lines2, wxPen("RED", 2)) | |
98 | dc.DrawLineList(self.lines3, self.pens2) | |
99 | ||
100 | dc.EndDrawing() | |
101 | self.log.write("DrawTime: %s seconds\n" % (time.time() - start)) | |
102 | self.log.write("GetBoundingBox: %s\n" % (dc.GetBoundingBox(), )) | |
103 | ||
104 | #---------------------------------------------------------------------- | |
105 | ||
106 | def runTest(frame, nb, log): | |
107 | w = nb.GetClientSize().width | |
108 | h = nb.GetClientSize().height | |
109 | if w < 300: w = 300 | |
110 | if h < 300: h = 300 | |
0e947004 RD |
111 | win = wxPanel(nb, -1) |
112 | tp = TestPanel(win, wxSize(w, h), log) | |
113 | def OnPanelSize(evt, tp=tp): | |
114 | tp.SetSize(evt.GetSize()) | |
115 | EVT_SIZE(win, OnPanelSize) | |
9d37f964 RD |
116 | return win |
117 | ||
118 | #---------------------------------------------------------------------- | |
119 | ||
120 | ||
121 | overview = """\ | |
122 | ||
123 | Some methods have been added to wxDC to help with optimization of | |
124 | drawing routines. Currently they are: | |
125 | ||
126 | <pre> | |
127 | DrawPointList(sequence, pens=None) | |
128 | </pre> | |
129 | Where sequence is a tuple, list, whatever of 2 element tuples | |
130 | (x, y) and pens is either None, a single pen or a list of pens. | |
131 | ||
132 | <pre> | |
133 | DrawLineList(sequence, pens=None) | |
134 | </pre> | |
135 | Where sequence is a tuple, list, whatever of 4 element tuples | |
136 | (x1,y1, x2,y2) andd pens is either None, a single pen or a list | |
137 | of pens. | |
138 | ||
139 | """ |