aboutsummaryrefslogtreecommitdiff
path: root/planning/8seg_vis.html
diff options
context:
space:
mode:
authorjaseg <git-bigdata-wsl-arch@jaseg.de>2022-07-16 17:04:20 +0200
committerjaseg <git-bigdata-wsl-arch@jaseg.de>2022-07-16 17:04:36 +0200
commitcfe1008fa6cb34d3960e997efbb97d985b26279a (patch)
tree7553a00d16e2d7908641af371b005906bb5e516f /planning/8seg_vis.html
parent3994a2576b073a1c3dc5dd85e95e63add8eb71a4 (diff)
download8seg-cfe1008fa6cb34d3960e997efbb97d985b26279a.tar.gz
8seg-cfe1008fa6cb34d3960e997efbb97d985b26279a.tar.bz2
8seg-cfe1008fa6cb34d3960e997efbb97d985b26279a.zip
add vis
Diffstat (limited to 'planning/8seg_vis.html')
-rw-r--r--planning/8seg_vis.html195
1 files changed, 195 insertions, 0 deletions
diff --git a/planning/8seg_vis.html b/planning/8seg_vis.html
new file mode 100644
index 0000000..eeeb584
--- /dev/null
+++ b/planning/8seg_vis.html
@@ -0,0 +1,195 @@
+<!doctype html>
+<html>
+ <head>
+ <title>8seg dimension planning</title>
+<style>
+canvas {
+}
+
+body {
+ margin-left: auto;
+ margin-right: auto;
+ width: min-content;
+}
+
+#form {
+ max-width: 1000px;
+ margin-left: auto;
+ margin-right: auto;
+ display: grid;
+ grid-template-columns: max-content auto;
+}
+
+#form > label {
+ text-align: right;
+ padding-right: 0.5em;
+}
+
+#form > input[type="number"] {
+ max-width: 5em;
+}
+
+</style>
+ </head>
+ <body>
+ <canvas id="viz" width="1800px" height="500px">
+ </canvas>
+ <div id="form">
+ <label for="text">Text</label><input type="text" id="text" value="Sphinx of black quartz/judge my vow"/>
+ <label for="digit_width">Digit width</label><input type="number" id="digit_width" step="0.01" value="1.0">
+ <label for="digit_height">Digit height</label><input type="number" id="digit_height" step="0.01" value="1.6">
+ <label for="digit_space">Digit spacing</label><input type="number" id="digit_space" step="0.01" value="0.4">
+ <label for="digit_num">Number of digits</label><input type="number" id="digit_num" value="36">
+ <label for="line_width">Visualization line width</label><input type="number" id="line_width", value=0.05>
+ </div>
+<script>
+
+ const seg_map = {
+ " ": 0x00,
+ "a": 0x2e,
+ "b": 0xd6,
+ "c": 0xd0,
+ "d": 0xc5,
+ "e": 0x59,
+ "f": 0x98,
+ "g": 0xd4,
+ "h": 0x8c,
+ "i": 0x5c,
+ "j": 0x78,
+ "k": 0x8e,
+ "l": 0xc0,
+ "m": 0xa3,
+ "n": 0xa5,
+ "o": 0xf0,
+ "p": 0x93,
+ "q": 0xf4,
+ "r": 0x9e,
+ "s": 0x55,
+ "t": 0xc8,
+ "u": 0xe0,
+ "v": 0x8a,
+ "w": 0xac,
+ "x": 0x0f,
+ "y": 0x0b,
+ "z": 0x5a,
+ "0": 0x13,
+ "1": 0x20,
+ "2": 0x16,
+ "3": 0x56,
+ "4": 0x23,
+ "5": 0x1c,
+ "6": 0x4e,
+ "7": 0x1a,
+ "8": 0x5f,
+ "9": 0x33,
+ "/": 0x0a,
+ "\\": 0x05,
+ };
+
+ function map_digit(codepoint) {
+ if (!seg_map.hasOwnProperty(codepoint)) {
+ return seg_map[" "];
+ }
+
+ return seg_map[codepoint];
+ }
+
+ function draw_digit(ctx, x, y, w, h, seg) {
+ for (var i=0; i<2; i++) {
+ if (i == 0) {
+ ctx.strokeStyle = '#e00000';
+ } else {
+ ctx.strokeStyle = '#404040';
+ seg = ~seg;
+ }
+ ctx.beginPath();
+ if (seg & 0x80) {
+ ctx.moveTo(x, y);
+ ctx.lineTo(x, y+h);
+ }
+ if (seg & 0x40) {
+ ctx.moveTo(x, y+h);
+ ctx.lineTo(x+w, y+h);
+ }
+ if (seg & 0x20) {
+ ctx.moveTo(x+w, y+h);
+ ctx.lineTo(x+w, y);
+ }
+ if (seg & 0x10) {
+ ctx.moveTo(x+w, y);
+ ctx.lineTo(x, y);
+ }
+ if (seg & 0x01) {
+ ctx.moveTo(x+w/2, y+h/2);
+ ctx.lineTo(x, y);
+ }
+ if (seg & 0x02) {
+ ctx.moveTo(x+w/2, y+h/2);
+ ctx.lineTo(x+w, y);
+ }
+ if (seg & 0x08) {
+ ctx.moveTo(x+w/2, y+h/2);
+ ctx.lineTo(x, y+h);
+ }
+ if (seg & 0x04) {
+ ctx.moveTo(x+w/2, y+h/2);
+ ctx.lineTo(x+w, y+h);
+ }
+ ctx.stroke();
+ }
+ }
+
+ function update() {
+ const canvas = document.querySelector("#viz");
+ const ctx = canvas.getContext("2d");
+ ctx.fillStyle = '#202020';
+ ctx.fillRect(0, 0, canvas.width, canvas.height);
+
+ const digit_num = parseFloat(document.querySelector("#digit_num").value);
+ const digit_width = parseFloat(document.querySelector("#digit_width").value);
+ const digit_height = parseFloat(document.querySelector("#digit_height").value);
+ const digit_space = parseFloat(document.querySelector("#digit_space").value);
+ const line_width = parseFloat(document.querySelector("#line_width").value);
+ const text = document.querySelector("#text").value.toLowerCase();
+
+ const segs = [];
+ for (var codepoint of text) {
+ segs.push(map_digit(codepoint));
+ }
+
+ for (var i=0; i<digit_num; i++) {
+ segs.push(map_digit(" "));
+ }
+
+ const total_w = digit_num * digit_width + (digit_num - 1) * digit_space;
+ const total_h = digit_height;
+
+ const fill_factor = 0.8;
+ const scale = canvas.width * fill_factor / total_w;
+
+ var x = (canvas.width - total_w*scale) / 2;
+ var y = (canvas.height - total_h*scale) / 2;
+
+ ctx.lineWidth = scale*line_width*digit_width;
+
+ for (var i=0; i<digit_num; i++) {
+ draw_digit(ctx, x, y, digit_width*scale, digit_height*scale, segs[i]);
+ x += digit_width*scale + digit_space*scale;
+ }
+ }
+
+ function handle_change(evt) {
+ update();
+ }
+
+ document.querySelector("#digit_width").addEventListener('change', handle_change);
+ document.querySelector("#digit_height").addEventListener('change', handle_change);
+ document.querySelector("#digit_space").addEventListener('change', handle_change);
+ document.querySelector("#digit_num").addEventListener('change', handle_change);
+ document.querySelector("#line_width").addEventListener('change', handle_change);
+ document.querySelector("#text").addEventListener('input', handle_change);
+
+ update();
+</script>
+ </body>
+</html>