from . import parameters from . import geometry from . import color_scheme def get_svg_iter(width, height, params={}, log_choices=False): # Pull the seed from the parameters. seed = params.pop("seed", None) if params or log_choices: params = parameters.OverridableParameters(seed, params) else: params = parameters.RandomParameters(seed) params.size = width + 1j * height yield '<svg xmlns="http://www.w3.org/2000/svg" width="%i" height="%i">' % (width, height) colormap = color_scheme.get_color_scheme(params) for shape, color_index in geometry.get_geometry(params): # Don't spend time om invisible polys minc, maxc = geometry.get_bb(shape) if maxc.real < 0 or maxc.imag < 0 or \ minc.real > width or minc.imag > width: continue # Determine color for this polygon color = colormap(geometry.get_centroid(shape), color_index) # Generate the SVG path path = "M%.2f %.2f " % (shape[0].real, shape[0].imag) path += " ".join("L%.2f %.2f" % (coord.real, coord.imag) for coord in shape) yield '<path d="%s Z" fill="#%s" stroke="#%s"/>' % (path, color, color) if log_choices: for key, value in params.results.items(): yield '\n<!-- %s=%s -->' % (key, value) yield '</svg>' def get_svg(width, height, params={}): return "".join(get_svg_iter(width, height, params)) def cmdline(): import argparse parser = argparse.ArgumentParser(description='Generate an svg wallpaper') parser.add_argument('--width', type=int, default=1024, help='The width of the wallpaper') parser.add_argument('--height', type=int, default=786, help='The height of the wallpaper') parser.add_argument('--seed', help='Seed for the randomizer') parser.add_argument('--log-choices', help='Log the choices made', action='store_true') parser.add_argument('--output', type=argparse.FileType('w'), default='-') args = parser.parse_args() for element in get_svg_iter(args.width, args.height, {"seed": args.seed}, log_choices=args.log_choices): args.output.write(element)