summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorElena ``of Valhalla'' Grandi <valhalla@trueelena.org>2024-02-11 11:34:58 +0100
committerElena ``of Valhalla'' Grandi <valhalla@trueelena.org>2024-02-11 11:36:03 +0100
commite03dfd3b813929067e5b5c30752e336ea2be1f70 (patch)
treec0e0051a087bf00359fbbfe2f26f982d0307a035
parent507f0c2e2d5119d0c133b338ee186c2b7c806d93 (diff)
Start writing a colour chart
-rw-r--r--forms/chart_data/amanda.yaml150
-rwxr-xr-xforms/colour_chart.py72
2 files changed, 222 insertions, 0 deletions
diff --git a/forms/chart_data/amanda.yaml b/forms/chart_data/amanda.yaml
new file mode 100644
index 0000000..ee0c7ec
--- /dev/null
+++ b/forms/chart_data/amanda.yaml
@@ -0,0 +1,150 @@
+title: "Amanda 100% silk"
+colours:
+ - label: "4000"
+ bg: 0 0 0
+ - label: "2000"
+ bg: 255 255 255
+ - label: "3000"
+ bg: 222 218 211
+ - label: "0115"
+ bg: 214 176 55
+ - label: "0118"
+ bg: 213 151 11
+ - label: "0892"
+ bg: 220 159 42
+ - label: "0121"
+ bg: 209 126 7
+ - label: "0122"
+ bg: 234 128 11
+ - label: "1334"
+ bg: 227 104 45
+ - label: "0450"
+ bg: 216 44 14
+ - label: "0790"
+ bg: 201 10 9
+ - label: "0501"
+ bg: 196 14 20
+ - label: "0503"
+ bg: 174 4 13
+ - label: "0504"
+ bg: 155 30 34
+ - label: "0105"
+ bg: 135 3 12
+ - label: "0918"
+ bg: 106 6 16
+ - label: "0917"
+ bg: 143 25 32
+ - label: "1400"
+ bg: 202 27 33
+ - label: "1391"
+ bg: 204 29 43
+ - label: "0104"
+ bg: 217 49 37
+ - label: "0081"
+ bg: 230 190 181
+ - label: "0075"
+ bg: 224 164 156
+ - label: "0637"
+ bg: 198 131 123
+ - label: "0638"
+ bg: 186 103 102
+ - label: "0916"
+ bg: 183 91 84
+ - label: "0284"
+ bg: 165 112 111
+ - label: "0163"
+ bg: 215 174 175
+ - label: ""
+ bg:
+ - label: ""
+ bg:
+ - label: ""
+ bg:
+ - label: ""
+ bg:
+ - label: ""
+ bg:
+ - label: ""
+ bg:
+ - label: ""
+ bg:
+ - label: ""
+ bg:
+ - label: ""
+ bg:
+ - label: ""
+ bg:
+ - label: ""
+ bg:
+ - label: ""
+ bg:
+ - label: ""
+ bg:
+ - label: ""
+ bg:
+ - label: ""
+ bg:
+ - label: ""
+ bg:
+ - label: ""
+ bg:
+ - label: ""
+ bg:
+ - label: ""
+ bg:
+ - label: ""
+ bg:
+ - label: ""
+ bg:
+ - label: ""
+ bg:
+ - label: ""
+ bg:
+ - label: ""
+ bg:
+ - label: ""
+ bg:
+ - label: ""
+ bg:
+ - label: ""
+ bg:
+ - label: ""
+ bg:
+ - label: ""
+ bg:
+ - label: ""
+ bg:
+ - label: ""
+ bg:
+ - label: ""
+ bg:
+ - label: ""
+ bg:
+ - label: ""
+ bg:
+ - label: ""
+ bg:
+ - label: ""
+ bg:
+ - label: ""
+ bg:
+ - label: ""
+ bg:
+ - label: ""
+ bg:
+ - label: ""
+ bg:
+ - label: ""
+ bg:
+ - label: ""
+ bg:
+ - label: ""
+ bg:
+ - label: ""
+ bg:
+ - label: ""
+ bg:
+ - label: ""
+ bg:
+ - label: ""
+ bg:
diff --git a/forms/colour_chart.py b/forms/colour_chart.py
new file mode 100755
index 0000000..30d97d7
--- /dev/null
+++ b/forms/colour_chart.py
@@ -0,0 +1,72 @@
+#!/usr/bin/env python3
+
+import argparse
+import math
+
+import fpdf
+import strictyaml
+
+
+class Chart:
+ COLUMNS=4
+ ROWS=16
+
+ def __init__(self):
+ self.parser = self.get_parser()
+ self.args = self.parser.parse_args()
+ self.data = strictyaml.load(self.args.chart_data.read()).data
+
+ def get_parser(self):
+ parser = argparse.ArgumentParser()
+ parser.add_argument(
+ "chart_data",
+ type=argparse.FileType("r")
+ )
+ return parser
+
+ def get_arranged_cells(self):
+ per_page = self.COLUMNS * self.ROWS
+ padded = self.data["colours"] + [{}] * (
+ per_page - len(self.data["colours"]) % per_page
+ )
+ pages = [
+ padded[i * per_page:i * per_page + per_page]
+ for i in range(len(padded) // per_page)
+ ]
+ cells = [
+ [
+ [p[i + self.ROWS * j] for j in range(self.COLUMNS)]
+ for i in range(len(p) // self.COLUMNS)
+ ]
+ for p in pages
+ ]
+ return(cells)
+
+ def write_pdf(self, fname):
+ pdf = fpdf.FPDF(format="A5")
+
+ for p_num, page in enumerate(self.get_arranged_cells()):
+ pdf.add_page()
+ pdf.set_font("helvetica", size=12)
+ pdf.cell(64, 8, self.data["title"], align="C")
+ pdf.ln()
+ pdf.set_font("helvetica", "B", 12)
+ for j in range(self.COLUMNS):
+ pdf.cell(16, 8, str(j + p_num * self.COLUMNS),)
+ pdf.cell(16, 8, "")
+ pdf.ln()
+ for row in page:
+ for cell in row:
+ if cell:
+ pdf.set_fill_color(255,255,255)
+ if cell.get("bg"):
+ pdf.set_fill_color(*map(int, cell["bg"].split()))
+ pdf.cell(16, 8, "", border=1, fill=True)
+ pdf.cell(16, 8, cell["label"], )
+ pdf.ln(10)
+
+ pdf.output(fname)
+
+
+if __name__ == "__main__":
+ Chart().write_pdf("asd.pdf")