This commit is contained in:
Kyle
2020-04-08 15:35:44 -07:00
parent 272fa7c215
commit c8d467f0d3
2 changed files with 274 additions and 0 deletions

83
boxGenerator.html Normal file
View File

@@ -0,0 +1,83 @@
<!DOCTYPE html5>
<html>
<head>
<script async src="data/scripts/cookies.js"></script>
<link rel="stylesheet" href="styles.css">
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="apple-touch-icon" sizes="180x180" href="data/site/favicons/apple-touch-icon.png">
<link rel="icon" type="image/png" sizes="32x32" href="data/site/favicons/favicon-32x32.png">
<link rel="icon" type="image/png" sizes="16x16" href="data/site/favicons/favicon-16x16.png">
<link rel="manifest" href="data/site/favicons/site.webmanifest">
</head>
<body>
<title>CC - Box Generator</title>
<link rel="stylesheet" href="askScryfallStyles.css">
<div>
<div class="title darkLayer">
Box Generator
</div>
<div class="layer slideFromRight">
Pixels Per Inch:
<input id='inputPPI' type='number' min='1' step='1' max='1200' value='72'>
Material thickness:
<input id='inputMaterialThickness' type='number' min='0.01' step='0.01' max='2' value='0.25'>
Number of rows:
<input id='inputRowCount' type='number' step='1' min='1' max='5' value='1'>
Row length (interior):
<input id='inputRowLength' type='number' step='0.25' min='1' max='60' value='12'>
Card width (sleeved):
<input id='inputCardWidth' type='number' step='0.1' min='1' max='5' value='2.5'>
Card height (sleeved):
<input id='inputCardHeight' type='number' step='0.1' min='1' max='7' value='3.5'>
Wiggle room:
<input id='inputWiggleRoom' type='number' step='0.01' min='0' max='1' value='0.125'>
Vertical Tab Count:
<input id='inputVerticalTabCount' type='number' step='1' min='2' max='20' value='5'>
Horizontal Tab Count (down the rows):
<input id='inputHorizontalTabCount1' type='number' step='1' min='2' max='20' value='15'>
Horizontal Tab Count (across the rows):
<input id='inputHorizontalTabCount2' type='number' step='1' min='2' max='20' value='5'><br><br>
<button onclick='generateSVGs()'>Generate & Download SVGs</button>
</div>
<div class="layer darkLayer slideFromLeft">
<div class="paragraph indent">
Generate cool boxes!
</div>
</div>
<div class="layer slideFromRight">
<div class="paragraph indent">
So fun!
</div>
</div>
</div>
<script defer src="data/site/other/boxGenerator/boxGenerator.js"></script>
</body>
<footer class='footer'>
<div>
Card Conjurer by Kyle Burton<br>
<select id='inputColorPalette' onchange='loadScript("data/scripts/palettes/" + this.value + ".js")'>
<option value='lightMode'>Light Mode</option>
<option value='darkMode'>Dark Mode</option>
<option value='dayRave'>Day Rave</option>
<option value='nightRave'>Night Rave</option>
<option value='scholarMode'>Scholar Mode</option>
</select>
<script>
document.getElementById('inputColorPalette').value = getCookie('colorPalette')
</script>
</div>
<div>
Navigation<br>
<a href='index.html'>Card Creator</a><br>
<a href='life.html'>Life Counter</a><br>
<a href='askscryfall.html'>Ask Scryfall</a>
</div>
<div>
Legal<br>
<a href='termsofuse.html'>Terms of Use</a><br>
<a href='disclaimer.html'>Disclaimer</a>
</div>
<script defer src="data/scripts/animations.js"></script>
</footer>
<html>

View File

@@ -0,0 +1,191 @@
var sides = document.createElement('svg')
var lid = document.createElement('svg')
var bottom = document.createElement('svg')
var front = document.createElement('svg')
var back = document.createElement('svg')
function sizeSVG(svg, width, height) {
svg.setAttribute('width', width + 'px')
svg.setAttribute('height', height + 'px')
}
function generateSVGs() {
//setup variables
var ppi = parseInt(document.getElementById('inputPPI').value)
var padding = ppi
var materialThickness = parseFloat(document.getElementById('inputMaterialThickness').value) * ppi
var rowCount = parseInt(document.getElementById('inputRowCount').value)
var rowLength = parseFloat(document.getElementById('inputRowLength').value) * ppi
var cardWidth = parseFloat(document.getElementById('inputCardWidth').value + document.getElementById('inputWiggleRoom').value) * ppi
var cardHeight = parseFloat(document.getElementById('inputCardHeight').value + document.getElementById('inputWiggleRoom').value) * ppi
// var wiggleRoom = parseFloat(document.getElementById('inputWiggleRoom').value) * ppi
var verticalTabCount = parseInt(document.getElementById('inputVerticalTabCount').value)
if (verticalTabCount % 2 == 0) {
verticalTabCount += 1
}
var verticalTabLength = cardHeight / verticalTabCount
var horizontalTabCount1 = parseInt(document.getElementById('inputHorizontalTabCount1').value)
if (horizontalTabCount1 % 2 == 0) {
horizontalTabCount1 += 1
}
var horizontalTabLength1 = rowLength / horizontalTabCount1
var horizontalTabCount2 = parseInt(document.getElementById('inputHorizontalTabCount2').value)
if (horizontalTabCount2 % 2 == 0) {
horizontalTabCount2 += 1
}
var horizontalTabLength2 = (rowCount * (materialThickness + cardWidth) - materialThickness) / horizontalTabCount2
//side svg
sizeSVG(sides, rowLength + 2 * materialThickness + 2 * padding, cardHeight + 3 * materialThickness + 2 * padding)
var sidePath = '<path fill="transparent" stroke="red" d="M' + padding + ' ' + padding + 'h' + (rowLength + 2 * materialThickness) + 'v' + materialThickness + 'h' + (-materialThickness) + 'v' + materialThickness + 'h' + materialThickness
for (var i = 0; i < verticalTabCount; i ++) {
sidePath += 'v' + verticalTabLength
if (i % 2 == 1) {
sidePath += 'h' + materialThickness
} else {
sidePath += 'h' + (-materialThickness)
}
}
for (var i = 0; i < horizontalTabCount1; i ++) {
if (i % 2 == 0) {
sidePath += 'v' + materialThickness
} else {
sidePath += 'v' + (-materialThickness)
}
sidePath += 'h' + (-horizontalTabLength1)
}
sidePath += 'v' + (-materialThickness)
for (var i = 0; i < verticalTabCount; i ++) {
if (i % 2 == 1) {
sidePath += 'h' + materialThickness
} else {
sidePath += 'h' + (-materialThickness)
}
sidePath += 'v' + (-verticalTabLength)
}
sidePath += 'h' + materialThickness + 'v' + (-materialThickness) + 'h' + (-materialThickness) + 'Z"></path>'
sides.innerHTML = sidePath
//back
sizeSVG(back, materialThickness + rowCount * (materialThickness + cardWidth) + 2 * padding, 2 * (materialThickness + padding) + cardHeight + materialThickness)
var backPath = '<path fill="transparent" stroke="red" d="M' + (padding + materialThickness) + ' ' + padding + 'h' + (rowCount * (materialThickness + cardWidth) - materialThickness) + 'v' + materialThickness + 'h' + materialThickness + 'v' + materialThickness + 'h' + (-materialThickness)
for (var i = 0; i < verticalTabCount; i++) {
backPath += 'v' + verticalTabLength
if (i % 2 == 0) {
backPath += 'h' + materialThickness
} else {
backPath += 'h' + (-materialThickness)
}
}
backPath += 'v' + materialThickness + 'h' + (-materialThickness)
for (var i = 0; i < horizontalTabCount2 - 1; i++) {
backPath += 'h' + (-horizontalTabLength2)
if (i % 2 == 1) {
backPath += 'v' + materialThickness
} else {
backPath += 'v' + (-materialThickness)
}
}
backPath += 'h' + (-horizontalTabLength2 - materialThickness) + 'v' + (-materialThickness) + 'h' + materialThickness
for (var i = 0; i < verticalTabCount; i++) {
backPath += 'v' + (-verticalTabLength)
if (i % 2 == 1) {
backPath += 'h' + materialThickness
} else {
backPath += 'h' + (-materialThickness)
}
}
backPath += 'v' + (-materialThickness) + 'h' + materialThickness + 'Z"></path><path fill="transparent" stroke="red" d="M' + ((materialThickness + rowCount * (materialThickness + cardWidth) + 2 * padding) / 2 - cardWidth / 4) + ' ' + (padding + materialThickness) + 'h' + (cardWidth / 2) + 'v' + materialThickness + 'h' + (-cardWidth / 2) + 'Z"></path>'
back.innerHTML = backPath
console.log(back)
//front
sizeSVG(front, materialThickness + rowCount * (materialThickness + cardWidth) + 2 * padding, 2 * padding + materialThickness + cardHeight)
var frontPath = '<path fill="transparent" stroke="red" d="M' + (padding + materialThickness) + ' ' + padding + 'h' + (rowCount * (materialThickness + cardWidth) - materialThickness)
for (var i = 0; i < verticalTabCount; i++) {
frontPath += 'v' + verticalTabLength
if (i % 2 == 0) {
frontPath += 'h' + materialThickness
} else {
frontPath += 'h' + (-materialThickness)
}
}
frontPath += 'v' + materialThickness + 'h' + (-materialThickness)
for (var i = 0; i < horizontalTabCount2 - 1; i++) {
frontPath += 'h' + (-horizontalTabLength2)
if (i % 2 == 1) {
frontPath += 'v' + materialThickness
} else {
frontPath += 'v' + (-materialThickness)
}
}
frontPath += 'h' + (-horizontalTabLength2 - materialThickness) + 'v' + (-materialThickness) + 'h' + materialThickness
for (var i = 0; i < verticalTabCount - 1; i++) {
frontPath += 'v' + (-verticalTabLength)
if (i % 2 == 1) {
frontPath += 'h' + materialThickness
} else {
frontPath += 'h' + (-materialThickness)
}
}
frontPath += 'Z"></path>'
front.innerHTML = frontPath
//bottom
sizeSVG(bottom, materialThickness + rowCount * (materialThickness + cardWidth) + 2 * padding, rowLength + 2 * materialThickness + 2 * padding)
var bottomPath = '<path fill="transparent" stroke="red" d="M' + (padding + materialThickness) + ' ' + (padding + materialThickness) + 'h' + horizontalTabLength2
for (var i = 1; i < horizontalTabCount2; i++) {
if (i % 2 == 0) {
bottomPath += 'v' + materialThickness
} else {
bottomPath += 'v' + (-materialThickness)
}
bottomPath += 'h' + horizontalTabLength2
}
bottomPath += 'v' + horizontalTabLength1
for (var i = 1; i < horizontalTabCount1; i++) {
if (i % 2 == 1) {
bottomPath += 'h' + materialThickness
} else {
bottomPath += 'h' + (-materialThickness)
}
bottomPath += 'v' + horizontalTabLength1
}
bottomPath += 'h' + (-horizontalTabLength2)
for (var i = 1; i < horizontalTabCount2; i++) {
if (i % 2 == 1) {
bottomPath += 'v' + materialThickness
} else {
bottomPath += 'v' + (-materialThickness)
}
bottomPath += 'h' + (-horizontalTabLength2)
}
for (var i = 1; i < horizontalTabCount1; i++) {
bottomPath += 'v' + (-horizontalTabLength1)
if (i % 2 == 0) {
bottomPath += 'h' + materialThickness
} else {
bottomPath += 'h' + (-materialThickness)
}
}
bottomPath += 'Z"></path>'
bottom.innerHTML = bottomPath
//lid
sizeSVG(lid, materialThickness + rowCount * (materialThickness + cardWidth) + 2 * padding, rowLength + 2 * materialThickness + 2 * padding)
var lidPath = '<path fill="transparent" stroke="red" d="M' + (padding + materialThickness) + ' ' + (padding + materialThickness) + 'H' + ((materialThickness + rowCount * (materialThickness + cardWidth)) / 2 + padding - cardWidth / 4) + 'v' + (-materialThickness) + 'h' + (cardWidth / 2) + 'v' + materialThickness + 'H' + (rowCount * (materialThickness + cardWidth) + padding) + 'V' + (rowLength + materialThickness + padding) + 'h' + materialThickness + 'v' + materialThickness + 'H' + padding + 'v' + (-materialThickness) + 'h' + materialThickness + 'Z"></path>'
lid.innerHTML = lidPath
console.log(lid)
downloadSVG([[sides, "sides.svg"], [lid, "lid.svg"], [bottom, "bottom.svg"], [front, "front.svg"], [back, "back.svg"]])
}
function downloadSVG(svgsToDownload) {
for (var i = 0; i < svgsToDownload.length; i++) {
var dataURL = 'data:image/svg+xml,' + encodeURIComponent((new XMLSerializer).serializeToString(svgsToDownload[i][0]))
var downloadElement = document.createElement('a')
document.body.appendChild(downloadElement)
downloadElement.setAttribute('href', dataURL)
downloadElement.setAttribute('download', svgsToDownload[i][1])
downloadElement.click()
}
}