From: Neil H. <ne...@sc...> - 2002-09-20 08:11:31
|
I have been playing around with the turtle sample and the bitmap canvas to allow a reasonable compromise between performance and watching the demonstrations as they are drawing. The idea is to avoid doing a full blit of the backing surface to the display after every drawing operation but rather after every n drawing operations and also when drawing is completed. The code added to bitmapcanvas.py looks like this (along with initialisation of _autoCounter): def FlushRefresh(self): if self.autoRefresh and (self._autoCounter > 0): dc = wx.wxClientDC(self) dc.Blit(0, 0, self._size[0],self._size[1], self._bufImage, 0, 0) self._autoCounter = 0 def AutomaticRefresh(self): if self.autoRefresh: self._autoCounter += 1 if self._autoCounter > 50: self.FlushRefresh() Then all the individual drawing methods call self.AutomaticRefresh() rather than having their own blit code. In turtle.py, the current calls to refresh are dropped but an idle event is added: def on_idle(self, event): self.components.bufOff.FlushRefresh() Setting the number of drawing operations between flushes to 50 results in ChaosScript2and3.txt taking 6.3 seconds rather than 5.3 seconds without auto-refresh on my machine. Continuous auto-refresh takes 120 seconds. I can commit this to CVS if it looks OK. Neil |