portrait-of-a-community
clone your own copy | download snapshot

Snapshots | iceberg

Inside this repository

sheetGenerator.py
text/x-python

Download raw (3.1 KB)

import svgwrite



def draw_corner (width, height, direction=1):
    d = []
    
    d.append('l{0},{1}'.format(direction * width, height))
    d.append('l{0},{1}'.format(direction * width, -1 * height))
    d.append('l{0},{1}'.format(-1 * direction * width, -1 * height))
    d.append('l{0},{1}'.format(-1 * direction * width, height))
    d.append('m{0},{1}'.format(direction * width * 2, 0))
    
    return ' '.join(d)

sheet = svgwrite.Drawing('sheet.svg', size=('297mm','420mm'))
sheet.viewbox(0,0,297,420)

group_labels = sheet.g()
group_lines = sheet.g()


x = 1
for name in ['a', 'b', 'c']:
    tspan = sheet.tspan(name)
    text = sheet.text('', insert=(x*10,10), style='text-anchor:middle;font-family:OSP-DIN')
    text.add(tspan)
    group_labels.add(text)
    x+=1


labelWidth = 80
labelHeight = 40
corner_width = 10
corner_height = 10

labels = 4

endWidth = 30

left = []
right = []

right.append('m{0},{1}'.format(0, 0))
left.append('m{0},{1}'.format(labels * labelWidth, labelHeight))

for row in range(0,10):
    direction_right = -1 if (row % 2) else 1
    direction_left = direction_right * -1
    
    right.append('l{0},{1}'.format(direction_right * (labelWidth - corner_width), 0))
    right.append(draw_corner(corner_width, corner_height, direction_right));
    
    left.append('l{0},{1}'.format(direction_left * (labelWidth - corner_width), 0))
    left.append(draw_corner(corner_width, corner_height, direction_left));
    
    for label in range(1, (labels - 1)):
        right.append('l{0},{1}'.format(direction_right * (labelWidth - (corner_width * 2)), 0))
        right.append(draw_corner(corner_width, corner_height, direction_right));
        
        left.append('l{0},{1}'.format(direction_left * (labelWidth - (corner_width * 2)), 0))
        left.append(draw_corner(corner_width, corner_height, direction_left));
        
    right.append('l{0},{1}'.format(direction_right * (labelWidth - corner_width), 0))
    left.append('l{0},{1}'.format(direction_left * (labelWidth - corner_width), 0))
    
    if direction_right > 0:
        # Ending
        right.append('l{0},{1}'.format(direction_right * endWidth, 0))
        right.append('l{0},{1}'.format(0, labelHeight * 2))
        right.append('l{0},{1}'.format(-1 * direction_right * endWidth, 0))
        
        left.append('l{0},{1}'.format(direction_left * endWidth, 0))
        left.append('l{0},{1}'.format(0, labelHeight * 2))
        left.append('l{0},{1}'.format(-1 * direction_left * endWidth, 0))
    else:
        right.append('m{0},{1}'.format(endWidth * -1, labelHeight * -3))
        right.append('l{0},{1}'.format(0, labelHeight * 2))
        right.append('m{0},{1}'.format(endWidth, labelHeight * 3))
        
        left.append('m{0},{1}'.format(endWidth, labelHeight * -1))
        left.append('l{0},{1}'.format(0, labelHeight * 2))
        left.append('m{0},{1}'.format(endWidth * -1, labelHeight))
        
        
        
group_lines.add(sheet.path(' '.join(left), style='stroke-width:1;stroke:red;fill:none'))
group_lines.add(sheet.path(' '.join(right), style='stroke-width:1;stroke:red;fill:none'))

sheet.add(group_labels)
sheet.add(group_lines)

sheet.save()