kopia lustrzana https://github.com/hholzgra/ocitysmap
				
				
				
			Implement a renderers registry in the renderers module
OCitySMap now provides a quick public API to get the list of all implemented layout renderers, or to get one directly by name. Renderer classes are returned, not instances. Signed-off-by: Maxime Petazzoni <maxime.petazzoni@bulix.org>stable
							rodzic
							
								
									5b51658254
								
							
						
					
					
						commit
						a7b9382bd7
					
				| 
						 | 
					@ -232,7 +232,8 @@ class OCitySMap:
 | 
				
			||||||
        l.debug('Rendering in temporary directory %s' % tmpdir)
 | 
					        l.debug('Rendering in temporary directory %s' % tmpdir)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        # TODO: For now, hardcode plain renderer
 | 
					        # TODO: For now, hardcode plain renderer
 | 
				
			||||||
        renderer = renderers.PlainRenderer(config, tmpdir)
 | 
					        renderer_cls = renderers.get_renderer_class_by_name(renderer_name)
 | 
				
			||||||
 | 
					        renderer = renderer_cls(config, tmpdir)
 | 
				
			||||||
        renderer.create_map_canvas()
 | 
					        renderer.create_map_canvas()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if config.osmid:
 | 
					        if config.osmid:
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -115,7 +115,8 @@ class Renderer:
 | 
				
			||||||
    def render(self, surface, street_index):
 | 
					    def render(self, surface, street_index):
 | 
				
			||||||
        raise NotImplementedError
 | 
					        raise NotImplementedError
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def get_compatible_paper_sizes(self, bounding_box, zoom_level,
 | 
					    @staticmethod
 | 
				
			||||||
 | 
					    def get_compatible_paper_sizes(bounding_box, zoom_level,
 | 
				
			||||||
                                   resolution_km_in_mm):
 | 
					                                   resolution_km_in_mm):
 | 
				
			||||||
        raise NotImplementedError
 | 
					        raise NotImplementedError
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -237,7 +238,8 @@ class PlainRenderer(Renderer):
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        ctx.restore()
 | 
					        ctx.restore()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def get_compatible_paper_sizes(self, bounding_box, zoom_level,
 | 
					    @staticmethod
 | 
				
			||||||
 | 
					    def get_compatible_paper_sizes(bounding_box, zoom_level,
 | 
				
			||||||
                                   resolution_km_in_mm):
 | 
					                                   resolution_km_in_mm):
 | 
				
			||||||
        """Returns a list of paper sizes that can accomodate the provided
 | 
					        """Returns a list of paper sizes that can accomodate the provided
 | 
				
			||||||
        bounding box at the given zoom level and print resolution."""
 | 
					        bounding box at the given zoom level and print resolution."""
 | 
				
			||||||
| 
						 | 
					@ -255,18 +257,19 @@ class PlainRenderer(Renderer):
 | 
				
			||||||
            Renderer.PAPER_SIZES)
 | 
					            Renderer.PAPER_SIZES)
 | 
				
			||||||
        return valid_sizes
 | 
					        return valid_sizes
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class MapWithIndexRenderer(Renderer):
 | 
					# The renderers registry
 | 
				
			||||||
    pass
 | 
					_RENDERERS = [PlainRenderer]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class MapWithRightIndexRenderer(MapWithIndexRenderer):
 | 
					def get_renderer_class_by_name(name):
 | 
				
			||||||
    pass
 | 
					    """Retrieves a renderer class, by name."""
 | 
				
			||||||
 | 
					    for renderer in _RENDERERS:
 | 
				
			||||||
class MapWithBottomIndexRenderer(MapWithIndexRenderer):
 | 
					        if renderer.name == name:
 | 
				
			||||||
    pass
 | 
					            return renderer
 | 
				
			||||||
 | 
					    raise LookupError, 'The requested renderer %s was not found!' % name
 | 
				
			||||||
class BookletRenderer(Renderer):
 | 
					 | 
				
			||||||
    pass
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					def get_renderers():
 | 
				
			||||||
 | 
					    """Returns the list of available renderers' names."""
 | 
				
			||||||
 | 
					    return [cls.name for cls in _RENDERERS]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
if __name__ == '__main__':
 | 
					if __name__ == '__main__':
 | 
				
			||||||
    import coords
 | 
					    import coords
 | 
				
			||||||
| 
						 | 
					@ -277,10 +280,11 @@ if __name__ == '__main__':
 | 
				
			||||||
    bbox = coords.BoundingBox(48.7158, 2.0179, 48.6960, 2.0694)
 | 
					    bbox = coords.BoundingBox(48.7158, 2.0179, 48.6960, 2.0694)
 | 
				
			||||||
    zoom = 16
 | 
					    zoom = 16
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    plain = PlainRenderer()
 | 
					    renderer_cls = get_renderer_class_by_name('plain')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    papers = renderer_cls.get_compatible_paper_sizes(bbox, zoom,
 | 
				
			||||||
 | 
					                resolution_km_in_mm=110)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    papers = plain.get_compatible_paper_sizes(bbox, zoom,
 | 
					 | 
				
			||||||
                                              resolution_km_in_mm=110)
 | 
					 | 
				
			||||||
    print 'Compatible paper sizes:'
 | 
					    print 'Compatible paper sizes:'
 | 
				
			||||||
    for p in papers:
 | 
					    for p in papers:
 | 
				
			||||||
        print '  * %s (%.1fx%.1fcm)' % (p[0], p[1]/10.0, p[2]/10.0)
 | 
					        print '  * %s (%.1fx%.1fcm)' % (p[0], p[1]/10.0, p[2]/10.0)
 | 
				
			||||||
| 
						 | 
					@ -298,19 +302,19 @@ if __name__ == '__main__':
 | 
				
			||||||
        def __init__(self):
 | 
					        def __init__(self):
 | 
				
			||||||
            self.stylesheet = StylesheetMock()
 | 
					            self.stylesheet = StylesheetMock()
 | 
				
			||||||
            self.bounding_box = bbox
 | 
					            self.bounding_box = bbox
 | 
				
			||||||
            self.paper_width_mm = papers[0][2]
 | 
					            self.paper_width_mm = papers[0][1]
 | 
				
			||||||
            self.paper_height_mm = papers[0][1]
 | 
					            self.paper_height_mm = papers[0][2]
 | 
				
			||||||
            self.min_km_in_mm = 110
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    config = RenderingConfigurationMock()
 | 
					    config = RenderingConfigurationMock()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    plain = renderer_cls(config, '/tmp')
 | 
				
			||||||
    surface = cairo.PDFSurface('/tmp/plain.pdf',
 | 
					    surface = cairo.PDFSurface('/tmp/plain.pdf',
 | 
				
			||||||
                   Renderer.convert_mm_to_pt(config.paper_width_mm),
 | 
					                   Renderer.convert_mm_to_pt(config.paper_width_mm),
 | 
				
			||||||
                   Renderer.convert_mm_to_pt(config.paper_height_mm))
 | 
					                   Renderer.convert_mm_to_pt(config.paper_height_mm))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    canvas, _ = plain.create_map_canvas(config, '/tmp')
 | 
					    plain.create_map_canvas()
 | 
				
			||||||
    canvas.render()
 | 
					    plain.canvas.render()
 | 
				
			||||||
    plain.render(config, canvas, surface, None)
 | 
					    plain.render(surface, None)
 | 
				
			||||||
    surface.finish()
 | 
					    surface.finish()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Ładowanie…
	
		Reference in New Issue