mirror of
https://github.com/Investigamer/cardconjurer.git
synced 2025-07-27 13:21:41 -05:00
191 lines
9.1 KiB
JavaScript
191 lines
9.1 KiB
JavaScript
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 = 1//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()
|
|
}
|
|
} |