oshw_logo/oshw_logo.html

220 lines
10 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 'cvlp':
var blob = new Blob([JSON.stringify(logo, null, '\t')], {type: "application/json"})
saveAs(blob, "oshw_logo.cvlp")
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.cvlp", 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>
2015-09-05 18:37:20 +02:00
<h2>Open Source Hardware logo generator</h2>
<p>This is the logo I use for the hardware I design in my <a href="https://www.cuvoodoo.info/">electronics projects</a>.<br/>
It is simple, and more suited for being included in board layouts as it only uses vertical and horizontal lines, and some arcs.
Here you can customize it, generate your own version, and save it for your favorite CAD tool (gEDA pcb, KiCAD, or eagle).<br/>
I hold no rights on this logo and you can do whatever you want with it.
But preferably use it for open source hardware projects (which ever definition and licence you are using).<br/>
<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="cvlp">CuVoodoo Land Pattern (.cvlp)</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>
2015-09-05 18:37:20 +02:00
<option value="zip">all (.zip)</option>
</select><br />
</p>
</body>
</html>