From e5e104228dc00c5e723651537fc832b43005bcb1 Mon Sep 17 00:00:00 2001 From: Tor Andersson Date: Thu, 23 Nov 2023 13:35:01 +0100 Subject: use 3d isometric cubes --- tools/genpieces.mjs | 80 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 80 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..fd8c3d3 --- /dev/null +++ b/tools/genpieces.mjs @@ -0,0 +1,80 @@ +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.9; + let sh2 = convertRgbToOklab(rgb); sh2.l *= 0.8; + let sh3 = convertRgbToOklab(rgb); sh3.l *= 0.7; + let sh4 = convertRgbToOklab(rgb); sh4.l *= 0.4; + return [ base, formatHex(sh1), formatHex(sh2), formatHex(sh3), formatHex(sh4) ] +} + +function print_cube(output, c) { + let svg = [] + + let xo = 0 + let yo = 0 + let ys = 2/3 + + let w = 14 + let d = Math.sqrt(w * w + w * w) + let h = Math.round(w * 0.8) + + let v = [ + [ xo + (d/2), yo + (0) * ys ], + [ xo + (d), yo + (d/2) * ys ], + [ xo + (d/2), yo + (d) * ys ], + [ xo + (0), yo + (d/2) * ys ], + ] + + for (let xy of v) { + xy[0] = Math.round(xy[0]) + 0.5 + xy[1] = Math.round(xy[1]) + 0.5 + } + + let iw = Math.max(...v.map(xy => xy[0])) + 0.5 + let ih = Math.max(...v.map(xy => xy[1])) + h + 0.5 + + 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_cube("pieces/iso_red_cube.svg", make_piece_colors("#e06136")) +print_cube("pieces/iso_yellow_cube.svg", make_piece_colors("#fec36d")) +print_cube("pieces/iso_purple_cube.svg", make_piece_colors("#6d5798")) -- cgit v1.2.3