def doHopalong(self): self.statusBar.text = "Drawing, please wait..." canvas = self.components.bufOff a = float(self.components.fldA.text) b = float(self.components.fldB.text) c = float(self.components.fldC.text) iterations = int(self.components.fldIterations.text) xOffset = float(self.components.fldXOffset.text) yOffset = float(self.components.fldYOffset.text) scale = float(self.components.fldScale.text) numColors = int(self.components.fldColors.text) totalPointsDrawn = 0 starttime = util.time() canvas.clear() for color, points in self.hopalong(a, b, c, iterations, xOffset, yOffset, scale, numColors): canvas.foregroundColor = color canvas.drawPointList(points) totalPointsDrawn += len(points) wx.SafeYield(self) if not self.drawing: break elapsed = util.time() - starttime self.statusBar.text = "hopalong time: %f seconds (%d points drawn)" % ( elapsed, totalPointsDrawn) self.drawing = False self.components.btnDraw.enabled = True self.components.btnCancel.enabled = False
def on_btnAnimate_mouseClick(self, event): event.target.enabled = False canvas = self.components.bufOff canvas.autoRefresh = False self.animate = True avgfps = 0 frame = 0 seconds = util.time() # number of frames to display a second # on faster boxes this will throttle the number # of frames calculated and displayed, but on slower # boxes it won't prevent slowdown fps = 30 # amount of time that should pass before drawing another frame timePerFrame = 1.0 / fps #print timePerFrame # hack to force a difference # between time and startTime # to avoid a division by zero exception on fast machines # aka my Windows box ;-) startTime = util.time() - 0.001 while self.animate: newSeconds = util.time() if newSeconds - seconds >= timePerFrame: seconds = newSeconds canvas.clear() for ball in self.sprites: ball.move() canvas.refresh() frame += 1 self.statusBar.text = "Average FPS: %.4f Balls: %d" % (frame / (seconds - startTime), len(self.sprites)) # give the user a chance to click Stop wx.SafeYield(self, True)
def on_btnStart_mouseClick(self, event): self.components.btnStart.enabled = False self.components.btnStep.enabled = False self.keepDrawing = True startTime = util.time() self.doRunLife() print "Draw time: %f" % (util.time() - startTime)
def on_doAutomata_command(self, event): automata = event.target.name if automata == 'menuAutomataLife': result = dialog.textEntryDialog(self, 'Steps (-1 means continuous):', 'Number of steps', '-1') if result.accepted: steps = int(result.text) self.keepDrawing = True startTime = util.time() self.doRunLife(steps) print "Draw time: %f" % (util.time() - startTime)
def on_btnAnimate_mouseClick(self, event): event.target.enabled = False self.animate = True self.frame = 0 self.startTime = util.time() self.fps = 10 timePerFrame = 1000 / self.fps self.timer.start(timePerFrame)
def on_btnAnimate_timer(self, event): self.components.bufOff.clear() for b in self.sprites: b.move() # don't need to use redraw() on Mac because # we are using a timer and giving the screen # a chance to update it itself normally self.components.bufOff.refresh() self.frame += 1 self.seconds = util.time() self.statusBar.text = "Average FPS: %.4f Boids: %d" % ( self.frame / (self.seconds - self.startTime), len(self.sprites))