remove visual gen to get builds running again
This commit is contained in:
parent
088953b8fd
commit
c04f6d0155
7
.vscode/snipsnap.code-snippets
vendored
Normal file
7
.vscode/snipsnap.code-snippets
vendored
Normal file
|
@ -0,0 +1,7 @@
|
|||
<html>
|
||||
<head><title>404 Not Found</title></head>
|
||||
<body>
|
||||
<center><h1>404 Not Found</h1></center>
|
||||
<hr><center>nginx</center>
|
||||
</body>
|
||||
</html>
|
|
@ -1,226 +0,0 @@
|
|||
import { SVG, on as SVGOn, Svg } from "@svgdotjs/svg.js"
|
||||
import { colord } from "colord"
|
||||
import { Pane } from 'tweakpane';
|
||||
import RandomGen from "random-seed"
|
||||
|
||||
interface Config {
|
||||
canvas?: Svg;
|
||||
seed?: string;
|
||||
keepSeed: boolean;
|
||||
width: number;
|
||||
height: number;
|
||||
circleSize: number;
|
||||
padding: number;
|
||||
stepSize: number;
|
||||
lineChance: number;
|
||||
colorsPerLine: number;
|
||||
limitLinesToGrid?: boolean;
|
||||
lineOverlap?: boolean;
|
||||
coloredDots?: boolean;
|
||||
maxLineLength?: number;
|
||||
whiteBackground?: boolean;
|
||||
overrideXCount?: number;
|
||||
overrideYCount?: number;
|
||||
animate?: boolean;
|
||||
}
|
||||
|
||||
let config: Config = {
|
||||
seed: "",
|
||||
keepSeed: false,
|
||||
width: 800,
|
||||
height: 800,
|
||||
padding: 100,
|
||||
circleSize: 10,
|
||||
stepSize: 50,
|
||||
lineChance: .2,
|
||||
whiteBackground: false,
|
||||
limitLinesToGrid: true,
|
||||
colorsPerLine: 3,
|
||||
coloredDots: true,
|
||||
overrideXCount: 0,
|
||||
overrideYCount: 0,
|
||||
animate: true
|
||||
}
|
||||
|
||||
const configLimits = {
|
||||
width: { min: 500, max: 5000, step: 50 },
|
||||
height: { min: 500, max: 5000, step: 50 },
|
||||
circleSize: { min: 1, max: 40, step: 1 },
|
||||
padding: { min: 0, max: 500, step: 10 },
|
||||
stepSize: { min: 5, max: 500, step: 5 },
|
||||
lineChance: { min: 0, max: 1, step: 0.05 },
|
||||
colorsPerLine: { min: 1, max: 25, step: 1 },
|
||||
maxLineLength: { min: 2, max: 20, step: 1 },
|
||||
overrideXCount: { max: 100, step: 1 },
|
||||
overrideYCount: { max: 100, step: 1 },
|
||||
}
|
||||
|
||||
const colors = [
|
||||
"#FED61E",
|
||||
"#44B4E9",
|
||||
"#008317",
|
||||
"#002E5C",
|
||||
"#003A3E",
|
||||
"#6C2400",
|
||||
"#FF9900",
|
||||
]
|
||||
|
||||
// calculate absolute pposition with padding
|
||||
function calcPosition({ x, y, padding, numElements, reducedDims, subtractHalfCircle = true }) {
|
||||
const pos = {
|
||||
posX: x / numElements.x * reducedDims.width + padding,
|
||||
posY: y / numElements.y * reducedDims.height + padding
|
||||
}
|
||||
if (subtractHalfCircle) {
|
||||
for (const key in pos) {
|
||||
pos[key] -= reducedDims.halfCircle
|
||||
}
|
||||
}
|
||||
return pos
|
||||
}
|
||||
|
||||
function drawElement({ x, y, canvas, occupationMap, random, lineChance, lineLengthLimit, numElements, padding, circleSize, limitLinesToGrid, lineOverlap, colorsPerLine, coloredDots, reducedDims }: Config & { x: number, y: number, occupationMap: number[][], random: RandomGen, lineLengthLimit: number, numElements: { x: number, y: number }, reducedDims: { width: number, height: number, halfCircle: number } }) {
|
||||
|
||||
if (occupationMap[x].includes(y) || !canvas) return
|
||||
if (random.random() < lineChance! && x != numElements.x && y != 0) {
|
||||
// Line
|
||||
let length = random.intBetween(2, lineLengthLimit);
|
||||
const { posX, posY } = calcPosition({ x, y, subtractHalfCircle: false, padding, numElements, reducedDims })
|
||||
|
||||
if (limitLinesToGrid) {
|
||||
const overshootX = x + length - numElements.x;
|
||||
const overshootY = (y - length) * -1;
|
||||
const overshoot = Math.max(overshootX, overshootY)
|
||||
if (overshoot > 0) length -= overshoot
|
||||
}
|
||||
|
||||
const { posX: endX, posY: endY } = calcPosition({
|
||||
x: x + length,
|
||||
y: y - length,
|
||||
subtractHalfCircle: false,
|
||||
padding,
|
||||
numElements,
|
||||
reducedDims
|
||||
})
|
||||
|
||||
const gradient = canvas!.gradient("linear", (add) => {
|
||||
for (let i = 0; i < colorsPerLine; i++) {
|
||||
add.stop({ offset: i / (colorsPerLine - 1), color: colors[random(colors.length)] })
|
||||
}
|
||||
}).transform({
|
||||
rotate: -45,
|
||||
origin: { x: .5, y: .5 }
|
||||
})
|
||||
canvas.line(posX, posY, endX, endY).stroke({
|
||||
width: circleSize,
|
||||
linecap: "round"
|
||||
}).attr({ "stroke": gradient })
|
||||
|
||||
if (!lineOverlap) {
|
||||
for (let i = 0; i <= length; i++) {
|
||||
if (x + i <= numElements.x) occupationMap[x + i].push(y - i)
|
||||
}
|
||||
}
|
||||
} else {
|
||||
// Circle
|
||||
const { posX, posY } = calcPosition({ x, y, padding, numElements, reducedDims })
|
||||
canvas
|
||||
.circle(circleSize)
|
||||
.fill(coloredDots ? colors[random(colors.length)] : "#333")
|
||||
.move(posX, posY)
|
||||
occupationMap[x].push(y)
|
||||
}
|
||||
}
|
||||
|
||||
function render(configParams: Config) {
|
||||
config.canvas?.remove()
|
||||
|
||||
if (config.seed === "") config.seed = RandomGen.create().string(16)
|
||||
|
||||
const { seed, width, height, padding, circleSize, stepSize, overrideXCount, overrideYCount, maxLineLength, whiteBackground } = configParams
|
||||
|
||||
const random = RandomGen.create(seed)
|
||||
|
||||
const reducedDims = {
|
||||
width: width - 2 * padding,
|
||||
height: height - 2 * padding,
|
||||
halfCircle: circleSize / 2
|
||||
}
|
||||
|
||||
const numElements = {
|
||||
x: overrideXCount && overrideXCount > 0 ? overrideXCount : reducedDims.width / stepSize,
|
||||
y: overrideYCount && overrideYCount > 0 ? overrideYCount : reducedDims.height / stepSize
|
||||
}
|
||||
|
||||
const lineLengthLimit = maxLineLength ?? Math.floor(Math.min(numElements.x, numElements.y)) / 2;
|
||||
|
||||
config.canvas = SVG().viewbox(0, 0, width, height).size(width, height).addTo('#canvas')
|
||||
|
||||
config.canvas.rect(width, height).fill(whiteBackground ? "#ffffff" : "#000000")
|
||||
// Create 2D array of points in grid
|
||||
let occupationMap: number[][] = Array.from({ length: numElements.x + 1 }, x => [])
|
||||
|
||||
|
||||
for (let x = 0; x <= numElements.x; x++) {
|
||||
for (let y = 0; y <= numElements.y; y++) {
|
||||
drawElement({ x, y, occupationMap, random, numElements, lineLengthLimit, reducedDims, ...config })
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
const pane = new Pane()
|
||||
for (const key in config) {
|
||||
pane.addInput(config, key as keyof Config, configLimits[key] ?? {})
|
||||
}
|
||||
|
||||
pane.on('change', () => {
|
||||
pane.refresh()
|
||||
render(config)
|
||||
})
|
||||
|
||||
const regenButton = pane.addButton({ title: "Regenerate" })
|
||||
regenButton.on("click", () => {
|
||||
if (!config.keepSeed) config.seed = RandomGen.create().string(16)
|
||||
render(config)
|
||||
pane.refresh()
|
||||
})
|
||||
|
||||
|
||||
const exportButton = pane.addButton({ title: "Export Settings" })
|
||||
exportButton.on('click', () => {
|
||||
const settings = pane.exportPreset()
|
||||
const settingsString = JSON.stringify(settings, null, 2)
|
||||
const blob = new Blob([settingsString], { type: "application/json" })
|
||||
const link = document.createElement("a")
|
||||
const url = URL.createObjectURL(blob)
|
||||
link.href = url
|
||||
link.download = "GraphicsGenConfig.json"
|
||||
document.body.appendChild(link)
|
||||
link.click()
|
||||
setTimeout(() => {
|
||||
document.body.removeChild(link);
|
||||
window.URL.revokeObjectURL(url);
|
||||
}, 0)
|
||||
})
|
||||
|
||||
const saveButton = pane.addButton({ title: "Save SVG" })
|
||||
saveButton.on('click', () => {
|
||||
var url = "data:image/svg+xml;charset=utf-8," + encodeURIComponent(config.canvas?.svg()!);
|
||||
const link = document.createElement("a")
|
||||
link.href = url
|
||||
link.download = `HiP-Visual-${config.seed}.svg`
|
||||
document.body.appendChild(link)
|
||||
link.click()
|
||||
setTimeout(() => {
|
||||
document.body.removeChild(link);
|
||||
window.URL.revokeObjectURL(url);
|
||||
}, 0)
|
||||
})
|
||||
|
||||
SVGOn(document, "DOMContentLoaded", function () {
|
||||
render(config)
|
||||
pane.refresh()
|
||||
})
|
||||
|
||||
if (config.animate) {
|
||||
}
|
|
@ -1,36 +0,0 @@
|
|||
---
|
||||
import Layout from '../../layouts/Layout.astro'
|
||||
---
|
||||
|
||||
<Layout title='Visual Gen'>
|
||||
<div class='container'>
|
||||
<div id='canvas'></div>
|
||||
</div>
|
||||
</Layout>
|
||||
<style lang='scss'>
|
||||
.container {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
max-height: 100vh;
|
||||
}
|
||||
#canvas {
|
||||
max-width: 100%;
|
||||
box-sizing: border-box;
|
||||
height: 100%;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
position: relative;
|
||||
overflow: auto;
|
||||
max-height: 80vh;
|
||||
object-fit: contain;
|
||||
> * {
|
||||
object-fit: contain;
|
||||
border: 3px solid #333;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
||||
<script>
|
||||
import './gen'
|
||||
</script>
|
Loading…
Reference in a new issue