oshw_logo/oshw_logo.html

179 lines
9.0 KiB
HTML

<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>open source hardware logo customisation</title>
<script type="text/javascript" src="cvlp_lib.js"></script>
<script type="text/javascript" src="lib/FileSaver.min.js"></script>
<script type="text/javascript" src="lib/jszip.min.js"></script>
</head>
<body onload="draw()">
<script type="text/javascript">
// the OSHW logo
var logo = {
"name": "open source hardware logo",
"author": "King Kevin",
"version": 0,
"date": "2015-04-11 13:58:46+02:00",
"unit": "mm",
"elements": []
}
// draw logo
function draw() {
// get values
var pad_size = parseInt(pad_size_input.value,10)
var pad_thickness = parseInt(pad_thickness_input.value,10)
var pad_spacing = parseInt(pad_spacing_input.value,10)
var pad_chip_spacing = parseInt(pad_chip_spacing_input.value,10)
var chip_thickness = parseInt(chip_thickness_input.value,10)
var text_thickness = parseInt(text_thickness_input.value,10)
// set values in logo
var size = pad_thickness+pad_size+pad_chip_spacing*2+pad_spacing*5+pad_chip_spacing*2+pad_size+pad_thickness
logo.width = size
logo.height = size
// clear elements
logo.elements = []
// draw pads
for (var i=0; i<6; i++) {
if (document.getElementById("pad_layer_copper").checked) {
var west = cvlp_pad(i+1, 0+pad_thickness, pad_thickness+pad_size+pad_chip_spacing*2+pad_spacing*i, pad_thickness+pad_size, pad_thickness+pad_size+pad_chip_spacing*2+pad_spacing*i, pad_thickness, pad_thickness*0.1, 0)
logo.elements = logo.elements.concat(west)
var north = cvlp_pad(24-i, pad_thickness+pad_size+pad_chip_spacing*2+pad_spacing*i, pad_thickness, pad_thickness+pad_size+pad_chip_spacing*2+pad_spacing*i, pad_thickness+pad_size, pad_thickness, pad_thickness*0.1, 0)
logo.elements = logo.elements.concat(north)
var east = cvlp_pad(18-i, pad_thickness+pad_size+pad_chip_spacing*2+pad_spacing*5+pad_chip_spacing*2, pad_thickness+pad_size+pad_chip_spacing*2+pad_spacing*i, pad_thickness+pad_size+pad_chip_spacing*2+pad_spacing*5+pad_chip_spacing*2+pad_size, pad_thickness+pad_size+pad_chip_spacing*2+pad_spacing*i, pad_thickness, pad_thickness*0.1, 0)
logo.elements = logo.elements.concat(east)
var south = cvlp_pad(i+7, pad_thickness+pad_size+pad_chip_spacing*2+pad_spacing*i, pad_thickness+pad_size+pad_chip_spacing*2+pad_spacing*5+pad_chip_spacing*2, pad_thickness+pad_size+pad_chip_spacing*2+pad_spacing*i, pad_thickness+pad_size+pad_chip_spacing*2+pad_spacing*5+pad_chip_spacing*2+pad_size, pad_thickness, pad_thickness*0.1, 0)
logo.elements = logo.elements.concat(south)
} else {
var west = cvlp_line(0+pad_thickness, pad_thickness+pad_size+pad_chip_spacing*2+pad_spacing*i, pad_thickness+pad_size, pad_thickness+pad_size+pad_chip_spacing*2+pad_spacing*i, pad_thickness)
logo.elements = logo.elements.concat(west)
var north = cvlp_line(pad_thickness+pad_size+pad_chip_spacing*2+pad_spacing*i, pad_thickness, pad_thickness+pad_size+pad_chip_spacing*2+pad_spacing*i, pad_thickness+pad_size, pad_thickness)
logo.elements = logo.elements.concat(north)
var east = cvlp_line(pad_thickness+pad_size+pad_chip_spacing*2+pad_spacing*5+pad_chip_spacing*2, pad_thickness+pad_size+pad_chip_spacing*2+pad_spacing*i, pad_thickness+pad_size+pad_chip_spacing*2+pad_spacing*5+pad_chip_spacing*2+pad_size, pad_thickness+pad_size+pad_chip_spacing*2+pad_spacing*i, pad_thickness)
logo.elements = logo.elements.concat(east)
var south = cvlp_line(pad_thickness+pad_size+pad_chip_spacing*2+pad_spacing*i, pad_thickness+pad_size+pad_chip_spacing*2+pad_spacing*5+pad_chip_spacing*2, pad_thickness+pad_size+pad_chip_spacing*2+pad_spacing*i, pad_thickness+pad_size+pad_chip_spacing*2+pad_spacing*5+pad_chip_spacing*2+pad_size, pad_thickness)
logo.elements = logo.elements.concat(south)
}
}
// draw chip outline
var chip = cvlp_rectangle(pad_thickness+pad_size+pad_chip_spacing, pad_thickness+pad_size+pad_chip_spacing, pad_chip_spacing*2+pad_spacing*5, pad_chip_spacing*2+pad_spacing*5, chip_thickness, pad_chip_spacing)
logo.elements = logo.elements.concat(chip)
// draw O letter
var x = pad_thickness+pad_size+pad_chip_spacing*2
var y = pad_thickness+pad_size+pad_chip_spacing*2
var text = cvlp_polyline([[x,y],
[x+=pad_spacing*2,y],
[x,y+=pad_spacing*2],
[x+=pad_spacing*-2,y],
[x,y+=pad_spacing*-2]],text_thickness)
logo.elements = logo.elements.concat(text)
// draw S letter
var x = pad_thickness+pad_size+pad_chip_spacing*2+pad_spacing*5
var y = pad_thickness+pad_size+pad_chip_spacing*2
var text = cvlp_polyline([[x,y],
[x+=pad_spacing*-2,y],
[x,y+=pad_spacing],
[x+=pad_spacing*2,y],
[x,y+=pad_spacing],
[x+=pad_spacing*-2,y]],text_thickness)
logo.elements = logo.elements.concat(text)
// draw H letter
var x = pad_thickness+pad_size+pad_chip_spacing*2
var y = pad_thickness+pad_size+pad_chip_spacing*2+pad_spacing*3
var text = cvlp_line(x, y, x, y+pad_spacing*2, text_thickness)
logo.elements = logo.elements.concat(text)
var text = cvlp_line(x, y+pad_spacing, x+pad_spacing*2, y+pad_spacing, text_thickness)
logo.elements = logo.elements.concat(text)
var text = cvlp_line(x+pad_spacing*2, y, x+pad_spacing*2, y+pad_spacing*2, text_thickness)
logo.elements = logo.elements.concat(text)
// draw W letter
var x = pad_thickness+pad_size+pad_chip_spacing*2+pad_spacing*3
var y = pad_thickness+pad_size+pad_chip_spacing*2+pad_spacing*3
var text = cvlp_polyline([[x,y],
[x,y+=pad_spacing*2],
[x+=pad_spacing,y+=pad_spacing*-1],
[x+=pad_spacing,y+=pad_spacing],
[x,y+=pad_spacing*-2]],text_thickness)
logo.elements = logo.elements.concat(text)
var svg = json2svg(logo)
var div = document.getElementById('svg')
div.textContent = ""
div.appendChild(svg)
}
function download() {
var select = document.getElementById("filetype")
var filetype = select.options[select.selectedIndex].value
switch (filetype) {
case 'json':
var blob = new Blob([JSON.stringify(logo, null, '\t')], {type: "application/json"})
saveAs(blob, "oshw_logo.json")
break
case 'svg':
var blob = new Blob([new XMLSerializer().serializeToString(json2svg(logo))], {type: "image/svg+xml"})
saveAs(blob, "oshw_logo.svg")
break
case 'pcb':
var blob = new Blob([json2pcb(logo)], {type: "application/x-pcb-footprint"})
saveAs(blob, "oshw_logo.fp")
break
case 'kicad':
var blob = new Blob([json2kicad(logo)], {type: "application/x-kicad-pcb"})
saveAs(blob, "oshw_logo.kicad_mod")
break
case 'zip':
var zip = new JSZip()
zip.file("oshw_logo.json", JSON.stringify(logo, null, '\t'))
zip.file("oshw_logo.svg", new XMLSerializer().serializeToString(json2svg(logo)))
zip.file("oshw_logo.fp", json2pcb(logo))
var file = zip.generate({type:"blob"})
saveAs(file, "oshw_logo.zip")
break
default:
console.log("unknown file type: "+filetype)
}
}
function change_unit() {
var select = document.getElementById("unit")
var unit = select.options[select.selectedIndex].value
if (logo.unit==unit) {
return
}
}
</script>
<div id="svg"></div>
<p id="control">
<form onchange="draw()">
pads on:
<input type="radio" name="pad_layer" id="pad_layer_copper" value="copper" checked="true">copper
<input type="radio" name="pad_layer" id="pad_layer_silkscreen" value="silkscreen">silkscreen
</form>
unit: <select id="unit" onchange="change_unit()">
<option value="mm">millimeter (mm)</option>
<option value="in">inch (in)</option>
<option value="mil">mil/thou (mil)</option>
</select><br />
pad size: <input id="pad_size_input" type="number" step="any" value=30 min=0 onchange="draw()"/><br />
pad thickness: <input id="pad_thickness_input" type="number" step="any" value=15 min=0 onchange="draw()"/><br />
pad spacing: <input id="pad_spacing_input" type="number" step="any" value=20 min=0 onchange="draw()"/><br />
pad-chip spacing: <input id="pad_chip_spacing_input" type="number" step="any" value=15 min=0 onchange="draw()"/><br />
chip thickness: <input id="chip_thickness_input" type="number" step="any" value=10 min=0 onchange="draw()"/><br />
text thickness: <input id="text_thickness_input" type="number" step="any" value=10 min=0 onchange="draw()"/><br />
<button type="button" onclick="download()">save</button>: <select id="filetype">
<option value="json">CuVoodoo Land Pattern (.json)</option>
<option value="svg">Scalable Vector Graphics (.svg)</option>
<option value="pcb">gEDA pcb footprint (.fp)</option>
<option value="kicad">KiCad s-expr. footprint (.kicad_mod)</option>
<option value="zip">all (zip)</option>
</select><br />
</p>
</body>
</html>