oshw_logo/oshw_logo.html

214 lines
9.9 KiB
HTML
Raw Normal View History

<!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",
2015-09-05 09:25:11 +02:00
"author": "King Kévin",
"version": 0,
"date": "2015-04-11 13:58:46+02:00",
"unit": "mm",
"elements": []
}
// draw logo
function draw() {
// get values
2015-08-28 11:58:30 +02:00
var pad_size = parseFloat(pad_size_input.value)
var pad_thickness = parseFloat(pad_thickness_input.value)
var pad_spacing = parseFloat(pad_spacing_input.value)
var pad_chip_spacing = parseFloat(pad_chip_spacing_input.value)
var chip_thickness = parseFloat(chip_thickness_input.value)
var text_thickness = parseFloat(text_thickness_input.value)
// set values in logo
2015-09-05 09:25:11 +02:00
var size = pad_size+pad_chip_spacing*2+pad_spacing*5+pad_chip_spacing*2+pad_size
logo.width = size
logo.height = size
2015-08-30 10:31:37 +02:00
var select = document.getElementById("unit")
var unit = select.options[select.selectedIndex].value
logo.unit = unit
// 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_size/2, (pad_size+pad_chip_spacing*2)+pad_spacing*i, pad_size, pad_thickness)
logo.elements = logo.elements.concat(west)
var south = cvlp_pad(i+7, (pad_size+pad_chip_spacing*2)+pad_spacing*i, (pad_size+pad_chip_spacing*2+pad_spacing*5+pad_chip_spacing*2)+pad_size/2, pad_thickness, pad_size)
logo.elements = logo.elements.concat(south)
var east = cvlp_pad(18-i, (pad_size+pad_chip_spacing*2+pad_spacing*5+pad_chip_spacing*2)+pad_size/2, (pad_size+pad_chip_spacing*2)+pad_spacing*i, pad_size, pad_thickness)
logo.elements = logo.elements.concat(east)
var north = cvlp_pad(24-i, pad_size+pad_chip_spacing*2+pad_spacing*i, pad_size/2, pad_thickness, pad_size)
logo.elements = logo.elements.concat(north)
} else {
2015-09-02 22:38:34 +02:00
var west = cvlp_line(0+pad_thickness/2, (pad_size+pad_chip_spacing*2)+pad_spacing*i, pad_size-pad_thickness/2, (pad_size+pad_chip_spacing*2)+pad_spacing*i, pad_thickness)
logo.elements = logo.elements.concat(west)
2015-09-02 22:38:34 +02:00
var south = cvlp_line((pad_size+pad_chip_spacing*2)+pad_spacing*i, (pad_size+pad_chip_spacing*2+pad_spacing*5+pad_chip_spacing*2)+pad_thickness/2, (pad_size+pad_chip_spacing*2)+pad_spacing*i, (pad_size+pad_chip_spacing*2+pad_spacing*5+pad_chip_spacing*2)+pad_size-pad_thickness/2, pad_thickness)
logo.elements = logo.elements.concat(south)
2015-09-02 22:38:34 +02:00
var east = cvlp_line((pad_size+pad_chip_spacing*2+pad_spacing*5+pad_chip_spacing*2)+pad_thickness/2, (pad_size+pad_chip_spacing*2)+pad_spacing*i, (pad_size+pad_chip_spacing*2+pad_spacing*5+pad_chip_spacing*2)+pad_size-pad_thickness/2, (pad_size+pad_chip_spacing*2)+pad_spacing*i, pad_thickness)
2015-09-02 22:22:11 +02:00
logo.elements = logo.elements.concat(east)
2015-09-02 22:38:34 +02:00
var north = cvlp_line((pad_size+pad_chip_spacing*2)+pad_spacing*i, pad_thickness/2, (pad_size+pad_chip_spacing*2)+pad_spacing*i, pad_size-pad_thickness/2, pad_thickness)
2015-09-02 22:22:11 +02:00
logo.elements = logo.elements.concat(north)
}
}
// draw chip outline
var chip = cvlp_rectangle(pad_size+pad_chip_spacing, 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_size+pad_chip_spacing*2
var y = 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_size+pad_chip_spacing*2+pad_spacing*5
var y = 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_size+pad_chip_spacing*2
var y = 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_size+pad_chip_spacing*2+pad_spacing*3
var y = 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
2015-08-30 19:36:46 +02:00
case 'eagle':
2015-09-05 17:00:37 +02:00
var xml = new XMLSerializer().serializeToString(json2eagle(logo))
xml = '<?xml version="1.0" encoding="utf-8"?>'+xml
xml = xml.replace(/(>)(<\/*)/g, '$1\n$2') // eagle does not like one liners
var blob = new Blob([xml], {type: "application/vnd.cadsoft.eagle.board"})
2015-08-30 19:36:46 +02:00
saveAs(blob, "oshw_logo.lbr")
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))
2015-08-30 19:36:46 +02:00
zip.file("oshw_logo.kicad_mod", json2kicad(logo))
2015-09-05 17:00:37 +02:00
var xml = new XMLSerializer().serializeToString(json2eagle(logo))
xml = '<?xml version="1.0" encoding="utf-8"?>'+xml
xml = xml.replace(/(>)(<\/*)/g, '$1\n$2') // eagle does not like one liners
zip.file("oshw_logo.lbr", xml)
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
}
2015-08-28 11:58:30 +02:00
// get values
var pad_size = parseFloat(pad_size_input.value)
var pad_thickness = parseFloat(pad_thickness_input.value)
var pad_spacing = parseFloat(pad_spacing_input.value)
var pad_chip_spacing = parseFloat(pad_chip_spacing_input.value)
var chip_thickness = parseFloat(chip_thickness_input.value)
var text_thickness = parseFloat(text_thickness_input.value)
// set converted values
pad_size_input.value = convert_unit(pad_size, logo.unit, unit)
pad_thickness_input.value = convert_unit(pad_thickness, logo.unit, unit)
pad_spacing_input.value = convert_unit(pad_spacing, logo.unit, unit)
pad_chip_spacing_input.value = convert_unit(pad_chip_spacing, logo.unit, unit)
chip_thickness_input.value = convert_unit(chip_thickness, logo.unit, unit)
text_thickness_input.value = convert_unit(text_thickness, logo.unit, unit)
// save unit and redraw
logo.unit = unit
draw()
}
</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 />
2015-09-04 09:07:22 +02:00
pad size: <input id="pad_size_input" type="number" step="any" value=4.0 min=0 onchange="draw()"/><br />
pad thickness: <input id="pad_thickness_input" type="number" step="any" value=1.0 min=0 onchange="draw()"/><br />
2015-08-30 10:11:18 +02:00
pad spacing: <input id="pad_spacing_input" type="number" step="any" value=2.0 min=0 onchange="draw()"/><br />
pad-chip spacing: <input id="pad_chip_spacing_input" type="number" step="any" value=1.5 min=0 onchange="draw()"/><br />
chip thickness: <input id="chip_thickness_input" type="number" step="any" value=1.0 min=0 onchange="draw()"/><br />
text thickness: <input id="text_thickness_input" type="number" step="any" value=1.0 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>
2015-08-30 19:36:46 +02:00
<option value="eagle">Eagle XML component library (.lbr)</option>
<option value="zip">all (zip)</option>
</select><br />
</p>
</body>
</html>