Exemplo n.º 1
0
def main():
    points = poisson_disc(0, 0, 12, 8.5, 0.4, 64)
    index = Index(points)
    paths = []
    for x1, y1 in points:
        index.remove((x1, y1))
        x2, y2 = index.nearest((x1, y1))
        index.insert((x1, y1))
        d = math.hypot(x2 - x1, y2 - y1)
        paths.append(star(x1, y1, d / 2))
    drawing = axi.Drawing(paths)
    drawing = drawing.remove_paths_outside(12, 8.5)
    drawing = drawing.sort_paths()
    im = drawing.render()
    im.write_to_png('out.png')
    axi.draw(drawing)
Exemplo n.º 2
0
def main():
    mm = 25.4
    w = 11 * mm
    h = 8.5 * mm
    p = 0.5 * mm
    s = 0.25 * mm
    points = poisson_disc(p, p, w - p * 2, h - p * 2, s, 32)
    points = xy.sort_points(points)
    print len(points)
    device = xy.Device()
    time.sleep(3)
    device.pen_up()
    device.home()
    for cx, cy in points:
        r = (0.03125 + random.random() * 0.0625) * mm
        device.draw(circle(cx, cy, r, 36))
    device.home()
Exemplo n.º 3
0
def render(seed=None):
    random.seed(seed)
    width = height = 512
    scale = 2
    surface = cairo.ImageSurface(cairo.FORMAT_RGB24, width * scale,
                                 height * scale)
    dc = cairo.Context(surface)
    dc.set_line_cap(cairo.LINE_CAP_ROUND)
    dc.set_line_join(cairo.LINE_JOIN_ROUND)
    dc.scale(scale, scale)
    layer = make_layer()
    # layer.save('layer.png', 0, 0, width, height)
    points = poisson_disc(0, 0, width, height, 8, 16)
    shape1 = layer.alpha_shape(points, 0.1, 1, 0.1).buffer(-4).buffer(4)
    shape2 = layer.alpha_shape(points, 0.3, 1, 0.1).buffer(-8).buffer(4)
    shape3 = layer.alpha_shape(points, 0.12, 0.28, 0.1).buffer(-12).buffer(4)
    points = [
        x for x in points
        if shape1.contains(Point(*x)) and layer.get(*x) >= 0.25
    ]
    path = find_path(layer, points, 16)
    mark = path[0]
    # water background
    dc.set_source_rgb(*Color('#2185C5').rgb)
    dc.paint()
    # shallow water
    n = 5
    shape = shape1.simplify(8).buffer(32).buffer(-16)
    shapes = [shape]
    for _ in range(n):
        shape = shape.simplify(8).buffer(64).buffer(-32)
        shape = xkcdify(shape, 2, 8)
        shapes.append(shape)
    shapes.reverse()
    c1 = Color('#4FA9E1')
    c2 = Color('#2185C5')
    for c, shape in zip(c2.range_to(c1, n), shapes):
        dc.set_source_rgb(*c.rgb)
        render_shape(dc, shape)
        dc.fill()
    # height
    dc.save()
    dc.set_source_rgb(*Color('#CFC291').rgb)
    for _ in range(5):
        render_shape(dc, shape1)
        dc.fill()
        dc.translate(0, 1)
    dc.restore()
    # sandy land
    dc.set_source_rgb(*Color('#FFFFA6').rgb)
    render_shape(dc, shape1)
    dc.fill()
    # grassy land
    dc.set_source_rgb(*Color('#BDF271').rgb)
    render_shape(dc, shape2)
    dc.fill()
    # dark sand
    dc.set_source_rgb(*Color('#CFC291').rgb)
    render_shape(dc, shape3)
    dc.fill()
    # path
    dc.set_source_rgb(*Color('#DC3522').rgb)
    render_curve(dc, path, 4)
    dc.set_dash([4])
    dc.stroke()
    dc.set_dash([])
    # mark
    dc.set_source_rgb(*Color('#DC3522').rgb)
    render_mark(dc, *mark)
    dc.set_line_width(4)
    dc.stroke()
    # compass
    dc.save()
    dc.translate(48, height - 64)
    dc.rotate(random.random() * math.pi / 4 - math.pi / 8)
    render_compass(dc)
    dc.restore()
    return surface
Exemplo n.º 4
0
def render(seed=None):
    random.seed(seed)
    width = height = 512
    scale = 2
    surface = cairo.ImageSurface(cairo.FORMAT_RGB24,
        width * scale, height * scale)
    dc = cairo.Context(surface)
    dc.set_line_cap(cairo.LINE_CAP_ROUND)
    dc.set_line_join(cairo.LINE_JOIN_ROUND)
    dc.scale(scale, scale)
    layer = make_layer()
    # layer.save('layer.png', 0, 0, width, height)
    points = poisson_disc(0, 0, width, height, 8, 16)
    shape1 = layer.alpha_shape(points, 0.1, 1, 0.1).buffer(-4).buffer(4)
    shape2 = layer.alpha_shape(points, 0.3, 1, 0.1).buffer(-8).buffer(4)
    shape3 = layer.alpha_shape(points, 0.12, 0.28, 0.1).buffer(-12).buffer(4)
    points = [x for x in points
        if shape1.contains(Point(*x)) and layer.get(*x) >= 0.25]
    path = find_path(layer, points, 16)
    mark = path[0]
    # water background
    dc.set_source_rgb(*Color('#2185C5').rgb)
    dc.paint()
    # shallow water
    n = 5
    shape = shape1.simplify(8).buffer(32).buffer(-16)
    shapes = [shape]
    for _ in range(n):
        shape = shape.simplify(8).buffer(64).buffer(-32)
        shape = xkcdify(shape, 2, 8)
        shapes.append(shape)
    shapes.reverse()
    c1 = Color('#4FA9E1')
    c2 = Color('#2185C5')
    for c, shape in zip(c2.range_to(c1, n), shapes):
        dc.set_source_rgb(*c.rgb)
        render_shape(dc, shape)
        dc.fill()
    # height
    dc.save()
    dc.set_source_rgb(*Color('#CFC291').rgb)
    for _ in range(5):
        render_shape(dc, shape1)
        dc.fill()
        dc.translate(0, 1)
    dc.restore()
    # sandy land
    dc.set_source_rgb(*Color('#FFFFA6').rgb)
    render_shape(dc, shape1)
    dc.fill()
    # grassy land
    dc.set_source_rgb(*Color('#BDF271').rgb)
    render_shape(dc, shape2)
    dc.fill()
    # dark sand
    dc.set_source_rgb(*Color('#CFC291').rgb)
    render_shape(dc, shape3)
    dc.fill()
    # path
    dc.set_source_rgb(*Color('#DC3522').rgb)
    render_curve(dc, path, 4)
    dc.set_dash([4])
    dc.stroke()
    dc.set_dash([])
    # mark
    dc.set_source_rgb(*Color('#DC3522').rgb)
    render_mark(dc, *mark)
    dc.set_line_width(4)
    dc.stroke()
    # compass
    dc.save()
    dc.translate(48, height - 64)
    dc.rotate(random.random() * math.pi / 4 - math.pi / 8)
    render_compass(dc)
    dc.restore()
    return surface
Exemplo n.º 5
0
from poisson_disc import poisson_disc
import random
import xy

# Generate the poisson_disc with paired points, and produce a drawing object from it
random.seed(1337)
r = 0.70
n = 12
points, pairs = poisson_disc(0, 0, 120, 120, r, n)
drawing = xy.Drawing(pairs)
print 'Raw number of paths: %s' % len(drawing.paths)

# Merge the lines and see how much it's reduced
drawing = drawing.linemerge()
print 'Paths after linemerge: %s' % len(drawing.paths)

# Sort the paths and join them, optimized for the xy plotter
paths = drawing.paths
paths = xy.sort_paths_greedy(paths)
paths = xy.join_paths(paths)
print 'Paths after xy optimization: %s' % len(paths)

for tolerance in [0, 1]:
    print('Simplyfiying based on tolerance %s' % tolerance)
    simplified_paths = paths
    if tolerance:
        simplified_paths = xy.simplify_paths(paths, tolerance=tolerance)

    print('Drawing...')
    drawing = xy.Drawing(simplified_paths)
    im = drawing.render()
Exemplo n.º 6
0
Arquivo: test.py Projeto: yychiang/xy
from poisson_disc import poisson_disc
import random
import xy

random.seed(1182)
points, pairs = poisson_disc(0, 0, 315, 315, 1, 16)
drawing = xy.Drawing(pairs)
print len(drawing.paths)
drawing = drawing.linemerge()
print len(drawing.paths)
drawing.render().write_to_png('test.png')
paths = drawing.paths
paths = xy.sort_paths_greedy(paths)
paths = xy.join_paths(paths)
print len(paths)
xy.draw(paths)