From f430e0a594ed453d7cfa32546cd1cc5f75c8a8c2 Mon Sep 17 00:00:00 2001 From: Felix Brendel Date: Tue, 18 Aug 2020 14:01:33 +0200 Subject: [PATCH] labels now work, added readme --- .gitignore | 2 - examples/example1.png | Bin 0 -> 53325 bytes examples/example2.png | Bin 0 -> 27024 bytes readme.org | 48 ++++++++++ traitograph.py | 203 ++++++++++++++++++++++++++++-------------- 5 files changed, 184 insertions(+), 69 deletions(-) delete mode 100644 .gitignore create mode 100644 examples/example1.png create mode 100644 examples/example2.png create mode 100644 readme.org diff --git a/.gitignore b/.gitignore deleted file mode 100644 index 2aa979c..0000000 --- a/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -*.png -*.org diff --git a/examples/example1.png b/examples/example1.png new file mode 100644 index 0000000000000000000000000000000000000000..1349a01255da55b8d793f942a9957a7b2fccd3ef GIT binary patch literal 53325 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 literal 0 HcmV?d00001 diff --git a/readme.org b/readme.org new file mode 100644 index 0000000..d1102c1 --- /dev/null +++ b/readme.org @@ -0,0 +1,48 @@ +#+TITLE: Trait-o-graph + +A simple tool to generate circular diagrams that are meant to depict traits of +real or fictional characters. + +* Examples +#+BEGIN_SRC sh :exports code :results none +python traitograph.py --labels curious organized energetic friendly confident --values 5 4 3 4 2 --max-value 7 -o examples/example1.png +#+END_SRC + + +[[./examples/example1.png]] + +#+BEGIN_SRC sh :exports code :results none +python traitograph.py \ + --labels sanguine phlegmatic choleric melancholic \ + --values 5 3 2 4 --max-value 5 -o examples/example2.png \ + --dot-size 5 --foreground 255 255 255 --background 46 52 64 \ + --trait-color 80 130 150 100 --line-spacing 60 +#+END_SRC + +[[./examples/example2.png]] + +* Requirements +- Python 3.6+ +- pygame + +* Supported image formats +- bmp (uncompressed) +- tga (uncompressed) +- png +- jpeg + +* Command line arguments + +| Option | Short form | Type | Default | Description | +|-------------------+------------+-------------+-----------------+-------------------------------------------------| +| =--labels= | =-l= | list of str | | The names of the character traits | +| =--values= | =-v= | list of int | | The values for the character traits | +| =--max-value= | =-m= | int | | The maximum value for any trait | +| =--out-file= | =-o= | str | =chart.png= | The file to which the image will be written | +| =--foreground= | =-fg= | rgb | =0 0 0= | The foreground color of the chart | +| =--background= | =-bg= | rgb | =255 255 255= | The background color of the chart | +| =--trait-color= | =-tc= | rgba | =0 190 190 100= | The color of the colored part of the chart | +| =--outer-padding= | =-op= | pixel size | =20= | The additional padding applied to the chart | +| =--line-spacing= | =-ls= | pixel size | =40= | The distance between the lines | +| =--dot-size= | =-ds= | pixel size | =2= | The size of the dots | +| =--display= | =-d= | bool | =False= | If True, additionally show the plot in a window | diff --git a/traitograph.py b/traitograph.py index 1546c3f..7a2be39 100644 --- a/traitograph.py +++ b/traitograph.py @@ -2,19 +2,17 @@ import argparse sample_usage = """example: - python traitograph.py --names a b c --values 1 2 3 --max-value 4 - python traitograph.py -o "character.png" --names n1 n2 n3 n4 --values 1 3 2 3 --max-value 4 - python traitograph.py --names curious organized energetic friendly confident --values 5 4 3 4 2 --max-value 7 -d True + python traitograph.py --labels a b c --values 1 2 3 --max-value 4 + python traitograph.py -o "character.png" --labels n1 n2 n3 n4 --values 1 3 2 3 --max-value 4 + python traitograph.py --labels curious organized energetic friendly confident --values 5 4 3 4 2 --max-value 7 -d True """ parser = argparse.ArgumentParser(description="Generate a chart showing character traits.", epilog=sample_usage, formatter_class=argparse.RawDescriptionHelpFormatter) -parser.add_argument("--out-file", "-o", dest="out_file_name", - metavar="out_file", default="chart.png", - help="The file in which the image will be written. (Defaults to \"chart.png\")") -parser.add_argument("--names", "-n", dest="names", - required=True, nargs="+", metavar="name", + +parser.add_argument("--labels", "-l", dest="labels", + required=True, nargs="+", metavar="label", help="The names of the character traits") parser.add_argument("--values", "-v", dest="values", required=True, nargs="+", type=int, metavar="value", @@ -22,13 +20,16 @@ parser.add_argument("--values", "-v", dest="values", parser.add_argument("--max-value", "-m", dest="max_value", required=True, type=int, metavar="max", help="The maximum value for any trait") +parser.add_argument("--out-file", "-o", dest="out_file_name", + metavar="out_file", default="chart.png", + help="The file to which the image will be written. (Defaults to \"chart.png\")") parser.add_argument("--foreground", "-fg", dest="foreground", nargs=3, type=int, default=[0,0,0], metavar="channel", help="The foreground color of the chart. (Values from 0 to 255 -- defaults to [0,0,0])") -parser.add_argument("--backgournd", "-bg", dest="background", +parser.add_argument("--background", "-bg", dest="background", nargs=3, type=int, default=[255,255,255], metavar="channel", help="The background color of the chart. (Values from 0 to 255 -- defaults to [255,255,255])") -parser.add_argument("--trait-color", "-lc", dest="trait_color", +parser.add_argument("--trait-color", "-tc", dest="trait_color", nargs=4, type=int, default=[0,190,190,100], metavar="channel", help="The color of the colored part of the chart. (Values from 0 to 255 -- defaults to [0,190,190,100])") parser.add_argument("--outer-padding", "-op", dest="outer_padding", @@ -36,7 +37,7 @@ parser.add_argument("--outer-padding", "-op", dest="outer_padding", help="The additional padding applied around the chart. (Defaults to 20)") parser.add_argument("--line-spacing", "-ls", dest="line_spacing", type=int, default=40, metavar="pixel_count", - help="The additional padding applied around the chart. (Defaults to 40)") + help="The distance between the lines. (Defaults to 40)") parser.add_argument("--dot-size", "-ds", dest="dot_size", type=int, default=2, metavar="dot_size", help="The size of the dots. (Defaults to 2)") @@ -51,36 +52,119 @@ os.environ["PYGAME_HIDE_SUPPORT_PROMPT"] = "hide" import pygame from pygame import gfxdraw -# to have the first vertex at the top rather than the bottom, otherwise -# odd-numbered n-gons look like they are upside down -circle_offset = math.pi -def generate_n_gon_points(n, center, radii): - alpha_step = math.tau / n +def generate_angles(n): + return [i * math.tau / n for i in range(n)] + +def generate_n_gon_points(n, center, radii): if type(radii) == int: - radii = [radii for i in range(n)] + radii = [radii] * n else: assert(len(radii) == n) - # go clockwise, so flip the sign in the sin and cos, functions (I know - # unnecessary for cos, but looks better when aligned :) - return [(int(math.sin(-i * alpha_step + circle_offset) * radii[i] + center[0]), # x coordintate - int(math.cos(-i * alpha_step + circle_offset) * radii[i] + center[1])) # y coordintate - for i in range(n)] + # to have the first vertex at the top rather than the bottom, otherwise + # odd-numbered n-gons look like they are upside down: + circle_offset = math.pi + + # go clockwise, so flip the sign in the sin and cos, functions (I know it's + # unnecessary for cos, but it looks better when aligned :) + return [(int(math.sin(-angle + circle_offset) * radius + center[0]), # x coordintate + int(math.cos(-angle + circle_offset) * radius + center[1])) # y coordintate + for angle, radius in zip(generate_angles(n), radii)] + + +def draw_trait_polygon(surface, plot_center): + transparent_overlay = pygame.Surface(surface.get_size(), pygame.SRCALPHA) + radii = [value * args.line_spacing for value in args.values] + trait_points = generate_n_gon_points(len(radii), plot_center, radii) + + trait_color_full_alpha = args.trait_color[:3] + for point in trait_points: + gfxdraw.filled_circle(surface, point[0], point[1], args.dot_size, trait_color_full_alpha) + gfxdraw.aacircle(surface, point[0], point[1], args.dot_size, trait_color_full_alpha) + + pygame.draw.aalines(surface, trait_color_full_alpha, True, trait_points) + # draw the transparent polygon + pygame.draw.polygon(transparent_overlay, args.trait_color, trait_points) + surface.blit(transparent_overlay, (0,0)) + + +def generate_labels(points, surface): + label_surfaces = [font.render(label, True, args.foreground) for label in args.labels] + label_offsets = [] + + tolerance = 0.05 + + min_x = 0 + min_y = 0 + max_x, max_y = surface.get_size() -def generate_plot_surface(dimension_count, values, max_value, line_spacing, foreground, background, trait_color, dot_size): + # calcualte the offsets for all the labels, depeneding on the position + # around the plot + for label_surface, point, alpha in zip(label_surfaces, points, generate_angles(len(points))): + label_width, label_height = label_surface.get_size() + + # these offsets are for offsetting the actual label, so that it has soem + # distance form the point it is supposed to stick to + vertical_text_offset = 5 + horizontal_text_offset = 10 + + if abs(alpha) < tolerance: # label is at top + offset = (-label_width//2, -label_height - vertical_text_offset) + elif abs(alpha-math.pi) < tolerance: # label is at bottom + offset = (-label_width//2, + vertical_text_offset) + elif abs(alpha-math.tau/4) < tolerance: # label is at right + offset = (horizontal_text_offset, -label_height//2) + elif abs(alpha-3*math.tau/4) < tolerance: # label is at left + offset = (-label_width-horizontal_text_offset, -label_height//2) + elif 0 < alpha < math.tau/4: # label is at top right + offset = (horizontal_text_offset//2, -label_height-vertical_text_offset//2) + elif math.tau/4 < alpha < math.tau/2: # label is at bottom right + offset = (horizontal_text_offset//2, vertical_text_offset//2) + elif math.tau/2 < alpha < 3*math.tau/4: # label is at bottom left + offset = (-label_width-horizontal_text_offset//2, vertical_text_offset//2) + else: # label is at top left + offset = (-label_width-horizontal_text_offset//2, -label_height-vertical_text_offset//2) + + min_x = min(min_x, point[0] + offset[0]) + max_x = max(max_x, point[0] + offset[0] + label_width) + + min_y = min(min_y, point[1] + offset[1]) + max_y = max(max_y, point[1] + offset[1] + label_height) + + label_offsets.append(offset) + + # calculate new surface size + padding = 10 + width = max_x - min_x + 2*padding + height = max_y - min_y + 2*padding + + new_surface = pygame.Surface((width, height)) + new_surface.fill(args.background) + + # blit the original plot + new_surface.blit(surface, (-min_x + padding,-min_y + padding)) + + # blit all the labels + for label_offset, label_surface, point in zip(label_offsets, label_surfaces, points): + new_surface.blit(label_surface, (point[0] + label_offset[0] - min_x + padding, point[1] + label_offset[1] -min_y + padding)) + return new_surface + + +def generate_plot(): # figure out exactly, how big the surface needs to be, by looking at the # outer most points - radius = line_spacing * max_value - points = generate_n_gon_points(dimension_count, (0,0), radius) + dimension_count = len(args.labels) + radius = args.line_spacing * args.max_value + points = generate_n_gon_points(dimension_count, (0, 0), radius) max_x = max((point[0] for point in points)) min_x = -max_x # symmetry: fist point is always straight up min_y = -radius # fist point is always straight up max_y = max((point[1] for point in points)) - padding = dot_size//2 + 4 + padding = args.dot_size//2 + 4 surface_size = (max_x - min_x + 2*(padding), max_y - min_y + 2*(padding)) @@ -89,63 +173,49 @@ def generate_plot_surface(dimension_count, values, max_value, line_spacing, fore # generate the surface surface = pygame.Surface(surface_size) - surface.fill(background) + surface.fill(args.background) - transparent_overlay = pygame.Surface(surface_size, pygame.SRCALPHA) - transparent_overlay.set_alpha(100) #TODO(Felix): make this adjustable - - font = pygame.font.Font(pygame.font.get_default_font(), int(line_spacing*0.4)) - for i in range(max_value): + radius = args.line_spacing + for i in range(args.max_value): points = generate_n_gon_points(dimension_count, plot_center, radius) - - pygame.draw.aalines(surface, foreground, True, points) + + pygame.draw.aalines(surface, args.foreground, True, points) for point in points: - gfxdraw.filled_circle(surface, point[0], point[1], dot_size, foreground) - gfxdraw.aacircle(surface, point[0], point[1], dot_size, foreground) + gfxdraw.filled_circle(surface, point[0], point[1], args.dot_size, args.foreground) + gfxdraw.aacircle(surface, point[0], point[1], args.dot_size, args.foreground) - textsurface = font.render(f"{max_value-i}", True, foreground) + textsurface = font.render(f"{i+1}", True, args.foreground) text_location = (points[0][0] - textsurface.get_size()[0] // 2, - points[0][1] + int(line_spacing * 0.2)) - surface.blit(textsurface,text_location) + points[0][1] + int(args.line_spacing * 0.2)) + surface.blit(textsurface, text_location) - radius -= line_spacing + radius += args.line_spacing # draw in the trait polygon - radii = [value * line_spacing for value in values] - trait_points = generate_n_gon_points(dimension_count, plot_center, radii) - print(trait_points) - - trait_color_full_alpha = trait_color[:3] - for point in trait_points: - gfxdraw.filled_circle(surface, point[0], point[1], 4, trait_color_full_alpha) - - pygame.draw.aalines(surface, trait_color_full_alpha, True, trait_points) + draw_trait_polygon(surface, plot_center) - # draw the transparent polygon - pygame.draw.polygon(transparent_overlay, trait_color, trait_points) - surface.blit(transparent_overlay, (0,0)) - - return surface + # generate the labels + return generate_labels(points, surface) -def plot(names, values, max_value, foreground, background, trait_color, out_file_name, display, outer_padding, line_spacing, dot_size): - number_dimensions = len(names) - assert(number_dimensions == len(values)) - assert(max_value > 0) +if __name__ == "__main__": + assert(len(args.labels) == len(args.values)) + assert(args.max_value > 0) pygame.init() + font = pygame.font.Font(pygame.font.get_default_font(), int(args.line_spacing*0.4)) + + surface = generate_plot() - plot_surface = generate_plot_surface(number_dimensions, values, max_value, line_spacing, foreground, background, trait_color, dot_size) + pygame.image.save(surface, args.out_file_name) - final_surface = plot_surface - pygame.image.save(final_surface, out_file_name) + if args.display: + window = pygame.display.set_mode(surface.get_size()) + pygame.display.set_caption("Trait-o-graph") + window.blit(surface, (0, 0)) - if display: - window = pygame.display.set_mode(final_surface.get_size()) - pygame.display.set_caption("Traitograph") - window.blit(final_surface, (0,0)) pygame.display.update() running = True while running: @@ -154,6 +224,5 @@ def plot(names, values, max_value, foreground, background, trait_color, out_file running = False else: print("done") - pygame.quit() -plot(**vars(args)) + pygame.quit()