class DiagramTest(threading.Thread): ''' Generate a mono and mult thread test for Voronoi Diagram Previewer ''' STARTING = 1 RUNNING = 2 STOPPING = 3 num_threads = 0 lock = threading.Lock() _big_delay = 0.25 def __init__(self, sites, delay): with DiagramTest.lock: self.id = DiagramTest.num_threads DiagramTest.num_threads += 1 self.diagram = Delaunay(test = True) self.site_set = SiteSet(sites) self.delay = delay self.big_delay = DiagramTest._big_delay \ if delay < DiagramTest._big_delay \ else delay self.state = DiagramTest.STARTING threading.Thread.__init__(self) self.counter = 0 def start(self): threading.Thread.start(self) def stop(self): self.state = DiagramTest.STOPPING def must_exit(self): self.counter += 1 threading.Event().wait(self.delay) return self.state != DiagramTest.RUNNING or self.diagram.has_error() def must_exit_delay(self, delay): self.counter += 1 threading.Event().wait(delay) return self.state != DiagramTest.RUNNING or self.diagram.has_error() def run(self): self.state = DiagramTest.RUNNING while True: if self.must_exit(): break while self.site_set.can_pick(): self.diagram.include(self.site_set.pick()) if self.must_exit(): break while self.site_set.has_picked(): self.diagram.remove(self.site_set.unpick()) if self.must_exit(): break if self.must_exit(): break # keep running until receive a stop sign while self.state == DiagramTest.RUNNING: pass
d.add(Point2D(100, 100)) for site in sites: d.add(site) # test site deletion: preview = Preview(d) preview.interactive(True) preview.set_title("Simulation of remove(site)") preview.draw_voronoi() preview.draw_triangulation() preview.draw_circumcircles() preview.show() preview.clear() preview.process_events() time.sleep(5) deleted = [] while (preview.is_running()) and (len(sites) > 0): i = random.randint(0, len(sites) - 1) if i in deleted: continue deleted.append(i) preview.draw_voronoi() preview.draw_voronoi_cell(sites[i]) preview.show() preview.clear() preview.process_events() time.sleep(1) d.remove(sites[i])