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
示例#2
0
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])