class Image(ReadonlyRegisterBase, ReadonlyRegisterMatrix): def doRead(self): time.sleep(0.001) self.val = to_array(self.calc(), 'd') return self.val def getWidth(self): return len(self.take(-1)[0]) def getHeight(self): return len(self.take(-1)) class SinusoidImage(Image): def calc(self): (width, height) = (200, 100) ret = [] x = random.random(); base = [] for i in range (width): base.append( math.sin(x)) x = x + 0.05 for i in range (height): noise = (random.random() - 0.5)/5.0 ret.append([x+noise for x in base]) return ret def calc(self): (width, height) = (200, 100) ret = [] for i in range (height): ret.append([0] * width) return ret add_device(SinusoidImage("im1"), True) p=show_panel(im1) p.setAsyncUpdates(True) im1.polling=200 add_device(RegisterMatrixSource("src1", im1), True) p=show_panel(src1)