]> git.saurik.com Git - wxWidgets.git/blobdiff - wxPython/demo/DrawXXXList.py
Added some optimization methods to wxPython's wxDC
[wxWidgets.git] / wxPython / demo / DrawXXXList.py
diff --git a/wxPython/demo/DrawXXXList.py b/wxPython/demo/DrawXXXList.py
new file mode 100644 (file)
index 0000000..46afed8
--- /dev/null
@@ -0,0 +1,135 @@
+
+from wxPython.wx import *
+import whrandom, time
+
+#----------------------------------------------------------------------
+
+colours = [
+    "BLACK",
+    "BLUE",
+    "BLUE VIOLET",
+    "BROWN",
+    "CYAN",
+    "DARK GREY",
+    "DARK GREEN",
+    "GOLD",
+    "GREY",
+    "GREEN",
+    "MAGENTA",
+    "NAVY",
+    "PINK",
+    "RED",
+    "SKY BLUE",
+    "VIOLET",
+    "YELLOW",
+    ]
+
+#----------------------------------------------------------------------
+
+def makeRandomPoints(num, w, h):
+    pnts = []
+    for i in range(num):
+        x = whrandom.randint(0, w)
+        y = whrandom.randint(0, h)
+        pnts.append( (x,y) )
+    return pnts
+
+
+def makeRandomLines(num, w, h):
+    pnts = []
+    for i in range(num):
+        x1 = whrandom.randint(0, w)
+        y1 = whrandom.randint(0, h)
+        x2 = whrandom.randint(0, w)
+        y2 = whrandom.randint(0, h)
+        pnts.append( (x1,y1, x2,y2) )
+    return pnts
+
+
+def makeRandomPens(num, cache):
+    pens = []
+    for i in range(num):
+        c = whrandom.choice(colours)
+        t = whrandom.randint(1, 4)
+        if not cache.has_key( (c, t) ):
+            cache[(c, t)] = wxPen(c, t)
+        pens.append( cache[(c, t)] )
+    return pens
+
+
+class TestPanel(wxPanel):
+    def __init__(self, parent, size, log):
+        wxPanel.__init__(self, parent, -1, size=size)
+        self.log = log
+        self.SetBackgroundColour(wxWHITE)
+
+        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)
+
+        # 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)
+
+
+    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)
+
+        dc.SetPen(wxPen("BLACK", 1))
+        dc.DrawLineList(self.lines1)
+        dc.DrawLineList(self.lines2, wxPen("RED", 2))
+        dc.DrawLineList(self.lines3, self.pens2)
+
+        dc.EndDrawing()
+        self.log.write("DrawTime: %s seconds\n" % (time.time() - start))
+        self.log.write("GetBoundingBox: %s\n" % (dc.GetBoundingBox(), ))
+
+#----------------------------------------------------------------------
+
+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)
+    return win
+
+#----------------------------------------------------------------------
+
+
+overview = """\
+
+Some methods have been added to wxDC to help with optimization of
+drawing routines.  Currently they are:
+
+<pre>
+    DrawPointList(sequence, pens=None)
+</pre>
+    Where sequence is a tuple, list, whatever of 2 element tuples
+    (x, y) and pens is either None, a single pen or a list of pens.
+
+<pre>
+    DrawLineList(sequence, pens=None)
+</pre>
+     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
+     of pens.
+
+"""