From 80fb3b86b2372a7ca864edb86e473959c9bbf3b7 Mon Sep 17 00:00:00 2001 From: Tor Andersson Date: Thu, 30 May 2024 17:10:09 +0200 Subject: TOOLS --- tools/genpieces.mjs | 199 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 199 insertions(+) create mode 100644 tools/genpieces.mjs (limited to 'tools/genpieces.mjs') diff --git a/tools/genpieces.mjs b/tools/genpieces.mjs new file mode 100644 index 0000000..40db218 --- /dev/null +++ b/tools/genpieces.mjs @@ -0,0 +1,199 @@ +import fs from "fs" +import { formatHex, parseHex, convertRgbToOklab } from 'culori' + +function make_piece_colors(base) { + let rgb = parseHex(base) + let sh1 = convertRgbToOklab(rgb); sh1.l *= 0.90; + let sh2 = convertRgbToOklab(rgb); sh2.l *= 0.85; + let sh3 = convertRgbToOklab(rgb); sh3.l *= 0.80; + let sh4 = convertRgbToOklab(rgb); sh4.l *= 0.25; + return [ base, formatHex(sh1), formatHex(sh2), formatHex(sh3), formatHex(sh4) ] +} + +const color_austria = make_piece_colors("#ffffff") +const color_hanover = make_piece_colors("#56beda") +const color_france = make_piece_colors("#ed1c24") +const color_imperial = make_piece_colors("#fff200") +const color_prussia = make_piece_colors("#00558c") +const color_russia = make_piece_colors("#157d36") +const color_sweden = make_piece_colors("#bacb32") + +// sizes used in coin +// const IMAGE_W = 42 +// const IMAGE_H = 28 +// const TALL = 18 + +const IMAGE_W = 40 +const IMAGE_H = Math.round( IMAGE_W * 3/4 ) +const TALL = 15 + +const RX = (IMAGE_W - 1) / 2 +const RY = (IMAGE_H - 1) / 2 +const SVG_W = RX * 2 + 3 +const SVG_H = RY * 2 + 3 + TALL +const CX = (RX * 2 + 3) / 2 +const CY = (RY * 2 + 3) / 2 + +console.log("CYLINDER", SVG_W, SVG_H) + +function mkarc(cx, cy, rx, ry, h) { + return [ + 'M', cx - rx, cy, + 'L', cx - rx, cy + h, + 'A', rx, ry, 0, 0, 0, cx + rx, cy + h, + 'L', cx + rx, cy, + 'z' + ].join(" ") +} + +function print_cylinder(output, icon_file, c) { + let icon = icon_file ? fs.readFileSync(icon_file).toString('base64') : null + let svg = [] + + svg.push(``) + + if (icon) + svg.push(``) + + if (1) { + svg.push(``) + svg.push(``) + svg.push(``) + svg.push(``) + svg.push('') + svg.push(``) + } else { + svg.push(``) + } + + if (icon) { + svg.push(``) + svg.push(``) + } else { + svg.push(``) + } + + svg.push('') + fs.writeFileSync(output, svg.join("\n") + "\n") +} + +const CUBE_SIDE = 20 +const CUBE_ASPECT = 3/4 +const CUBE_TALL = 15 + +const CUBE_W = Math.round( CUBE_SIDE * Math.sqrt(2) ) +const CUBE_H = Math.round( CUBE_SIDE * Math.sqrt(2) * CUBE_ASPECT ) + +const CUBE_SVG_W = CUBE_W + 3 +const CUBE_SVG_H = CUBE_TALL + CUBE_H + 3 + +console.log("CUBE", CUBE_SVG_W, CUBE_SVG_H, CUBE_W) + +function print_cube(output, c) { + let svg = [] + + // let xo = 0 + // let yo = 0 + // let ys = 1 // 2/3 + + // let w = 20 + // let d = Math.sqrt(w * w + w * w) + // let h = Math.round(w * 0.8) + + let xo = 1.5 + let yo = 1.5 + let dx = CUBE_W + let dy = CUBE_H + let h = CUBE_TALL + + let v = [ + [ xo + (dx/2), yo + (0) ], + [ xo + (dx), yo + (dy/2) ], + [ xo + (dx/2), yo + (dy) ], + [ xo + (0), yo + (dy/2) ], + ] + + let v2 = [ + [ v[1][0], v[1][1] ], + [ v[1][0], v[1][1] + h ], + [ v[2][0], v[2][1] + h ], + [ v[3][0], v[3][1] + h ], + [ v[3][0], v[3][1] ], + ] + + let v3 = [ + [ v[2][0], v[2][1] ], + [ v[2][0], v[2][1] + h ], + ] + + let f1 = [ + [ v[1][0], v[1][1] ], + [ v[1][0], v[1][1] + h ], + [ v[2][0], v[2][1] + h ], + [ v[2][0], v[2][1] ], + ] + + let f2 = [ + [ v[2][0], v[2][1] ], + [ v[2][0], v[2][1] + h ], + [ v[3][0], v[3][1] + h ], + [ v[3][0], v[3][1] ], + ] + + svg.push(``) + + svg.push(``) + svg.push(``) + svg.push(``) + + svg.push(``) + + svg.push('') + fs.writeFileSync(output, svg.join("\n") + "\n") +} + +print_cylinder("images/cylinder_austria_oos.svg", null, color_austria) +print_cylinder("images/cylinder_austria_1.svg", "tools/stickers/A1.png", color_austria) +print_cylinder("images/cylinder_austria_2.svg", "tools/stickers/A2.png", color_austria) +print_cylinder("images/cylinder_austria_3.svg", "tools/stickers/A3.png", color_austria) +print_cylinder("images/cylinder_austria_4.svg", "tools/stickers/A4.png", color_austria) +print_cylinder("images/cylinder_austria_5.svg", "tools/stickers/A5.png", color_austria) + +print_cylinder("images/cylinder_france_oos.svg", null, color_france) +print_cylinder("images/cylinder_france_1.svg", "tools/stickers/F1.png", color_france) +print_cylinder("images/cylinder_france_2.svg", "tools/stickers/F2.png", color_france) +print_cylinder("images/cylinder_france_3.svg", "tools/stickers/F3.png", color_france) + +print_cylinder("images/cylinder_hanover_oos.svg", null, color_hanover) +print_cylinder("images/cylinder_hanover_1.svg", "tools/stickers/H1.png", color_hanover) +print_cylinder("images/cylinder_hanover_2.svg", "tools/stickers/H2.png", color_hanover) + +print_cylinder("images/cylinder_imperial_oos.svg", null, color_imperial) +print_cylinder("images/cylinder_imperial_1.svg", "tools/stickers/I1.png", color_imperial) + +print_cylinder("images/cylinder_prussia_oos.svg", null, color_prussia) +print_cylinder("images/cylinder_prussia_1.svg", "tools/stickers/P1.png", color_prussia) +print_cylinder("images/cylinder_prussia_2.svg", "tools/stickers/P2.png", color_prussia) +print_cylinder("images/cylinder_prussia_3.svg", "tools/stickers/P3.png", color_prussia) +print_cylinder("images/cylinder_prussia_4.svg", "tools/stickers/P4.png", color_prussia) +print_cylinder("images/cylinder_prussia_5.svg", "tools/stickers/P5.png", color_prussia) +print_cylinder("images/cylinder_prussia_6.svg", "tools/stickers/P6.png", color_prussia) +print_cylinder("images/cylinder_prussia_7.svg", "tools/stickers/P7.png", color_prussia) +print_cylinder("images/cylinder_prussia_8.svg", "tools/stickers/P8.png", color_prussia) + +print_cylinder("images/cylinder_russia_oos.svg", null, color_russia) +print_cylinder("images/cylinder_russia_1.svg", "tools/stickers/R1.png", color_russia) +print_cylinder("images/cylinder_russia_2.svg", "tools/stickers/R2.png", color_russia) +print_cylinder("images/cylinder_russia_3.svg", "tools/stickers/R3.png", color_russia) +print_cylinder("images/cylinder_russia_4.svg", "tools/stickers/R4.png", color_russia) + +print_cylinder("images/cylinder_sweden_oos.svg", null, color_sweden) +print_cylinder("images/cylinder_sweden_1.svg", "tools/stickers/S1.png", color_sweden) + +print_cube("images/cube_austria.svg", color_austria) +print_cube("images/cube_france.svg", color_france) +print_cube("images/cube_hanover.svg", color_hanover) +print_cube("images/cube_imperial.svg", color_imperial) +print_cube("images/cube_prussia.svg", color_prussia) +print_cube("images/cube_russia.svg", color_russia) +print_cube("images/cube_sweden.svg", color_sweden) -- cgit v1.2.3