Пример #1
0
    def _task_callback(self, task):

        tile = task.result()
        
        key = Tile.tile_key(0, tile.level, tile.row, tile.column)
        texture = self._texture_cache.acquire(key)
        if texture is None:
            texture = self._create_texture(tile, key)
        self._textures.append(texture)
        self._glwidget.update()
Пример #2
0
    def update(self):

        level = self._glwidget._zoom_manager.level # Fixme
        texture_cache = self._texture_cache
        cached_pyramid = self._cached_pyramid
        
        self._logger.debug('Update Mosaic Painter @{}'.format(level))
        
        # always compute tile list
        old_tile_list = self._tile_list
        pyramid_level = self._cached_pyramid._pyramid[level]
        # Fixme: return rotated area
        # compute intersection
        mosaic_interval = pyramid_level.projection_interval_to_mosaic(self._viewport_area.area)
        self._tile_list = list(mosaic_interval.iter())
        self._logger.debug('Viewport\n' + str(self._tile_list))
        (tiles_to_release,
         tiles_to_keep,
         tiles_to_acquire) = split_list(old_tile_list, self._tile_list)
        
        # Reset
        self._textures = []
        print(self._texture_dict)
        for tile_index in tiles_to_keep:
            row, column = tile_index
            key = Tile.tile_key(0, level, row, column)
            self._textures.append(self._texture_dict[key])
        self._glwidget.update()
        
        # Get new tiles
        if tiles_to_acquire:
            tasks = [asyncio.async(cached_pyramid.acquire(level, row, column))
                     for row, column in tiles_to_acquire]
            # for task in tasks:
            #     task.add_done_callback(self._task_callback)
            self._logger.debug('Run loop')
Пример #3
0
                     for row, column in tiles_to_acquire]
            # for task in tasks:
            #     task.add_done_callback(self._task_callback)
            self._logger.debug('Run loop')
            #!# with self._loop:
            self._loop.run_until_complete(asyncio.wait(tasks))
            self._logger.debug('loop done')
            for task in tasks:
                self._task_callback(task)
        
        # Recycle the cache
        for tile_index in tiles_to_release:
            # Fixme: key
            row, column = tile_index
            cached_pyramid.release(level, row, column)
            key = Tile.tile_key(0, level, row, column)
            texture_cache.release(key)
        self.recycle()
        
        self._texture_dict = {texture.key():texture for texture in self._textures}
        
        self._logger.debug('Update Mosaic Painter Done')

    ##############################################

    def _task_callback(self, task):

        tile = task.result()
        
        key = Tile.tile_key(0, tile.level, tile.row, tile.column)
        texture = self._texture_cache.acquire(key)