implement json2eagle eagle exporter
This commit is contained in:
parent
f1533c781a
commit
0fc5cb6817
133
cvlp_lib.js
133
cvlp_lib.js
|
@ -368,10 +368,10 @@ function json2kicad(json) {
|
|||
var element = json.elements[element_i]
|
||||
switch (element.type) {
|
||||
case 'line':
|
||||
kicad += '(fp_line (start '+convert_unit(element.x1,json.unit,"mm")+' '+convert_unit(element.y1,json.unit,"mm")+') (end '+convert_unit(element.x2,json.unit,"mm")+' '+convert_unit(element.y2,json.unit,"mm")+') (layer F.SilkS) (width '+convert_unit(element.thickness,json.unit,"mm")+'))\n'
|
||||
kicad += '(fp_line (start '+convert_unit(element.x1,json.unit,'mm')+' '+convert_unit(element.y1,json.unit,'mm')+') (end '+convert_unit(element.x2,json.unit,'mm')+' '+convert_unit(element.y2,json.unit,'mm')+') (layer F.SilkS) (width '+convert_unit(element.thickness,json.unit,'mm')+'))\n'
|
||||
break
|
||||
case 'arc':
|
||||
kicad += '(fp_arc (start '+convert_unit(element.x,json.unit,"mm")+' '+convert_unit(element.y,json.unit,"mm")+') (end '+convert_unit((element.x+element.radius*Math.cos(((-1*element.start)%360)/360.0*Math.PI*2)),json.unit,"mm")+' '+convert_unit((element.y-element.radius*Math.sin(((-1*element.start)%360)/360.0*Math.PI*2)),json.unit,"mm")+') (angle '+element.angle+') (layer F.SilkS) (width '+convert_unit(element.thickness,json.unit,"mm")+'))\n'
|
||||
kicad += '(fp_arc (start '+convert_unit(element.x,json.unit,'mm')+' '+convert_unit(element.y,json.unit,'mm')+') (end '+convert_unit((element.x+element.radius*Math.cos(((-1*element.start)%360)/360.0*Math.PI*2)),json.unit,'mm')+' '+convert_unit((element.y-element.radius*Math.sin(((-1*element.start)%360)/360.0*Math.PI*2)),json.unit,'mm')+') (angle '+element.angle+') (layer F.SilkS) (width '+convert_unit(element.thickness,json.unit,'mm')+'))\n'
|
||||
break
|
||||
case 'pad':
|
||||
var x = (element.x1+element.x2)/2
|
||||
|
@ -384,11 +384,11 @@ function json2kicad(json) {
|
|||
} else {
|
||||
kicad += 'rect'
|
||||
}
|
||||
kicad += ' (at '+convert_unit(x,json.unit,"mm")+' '+convert_unit(y,json.unit,"mm")+' '+angle+')'
|
||||
kicad += ' (size '+convert_unit(length,json.unit,"mm")+' '+convert_unit(element.thickness,json.unit,"mm")+')'
|
||||
kicad += ' (at '+convert_unit(x,json.unit,'mm')+' '+convert_unit(y,json.unit,'mm')+' '+angle+')'
|
||||
kicad += ' (size '+convert_unit(length,json.unit,'mm')+' '+convert_unit(element.thickness,json.unit,'mm')+')'
|
||||
kicad += ' (layers F.Cu F.Paste F.Mask)'
|
||||
kicad += ' (clearance '+convert_unit(element.clearance,json.unit,"mm")+')'
|
||||
kicad += ' (solder_mask_margin '+convert_unit((element.thickness/2*-1+element.soldermask),json.unit,"mm")+')'
|
||||
kicad += ' (clearance '+convert_unit(element.clearance,json.unit,'mm')+')'
|
||||
kicad += ' (solder_mask_margin '+convert_unit((element.thickness/2*-1+element.soldermask),json.unit,'mm')+')'
|
||||
kicad += ')\n'
|
||||
break
|
||||
case 'pin':
|
||||
|
@ -402,12 +402,12 @@ function json2kicad(json) {
|
|||
} else {
|
||||
kicad += 'rect'
|
||||
}
|
||||
kicad += ' (at '+convert_unit(x,json.unit,"mm")+' '+convert_unit(y,json.unit,"mm")+' '+angle+')'
|
||||
kicad += ' (size '+convert_unit(length,json.unit,"mm")+' '+convert_unit(element.thickness,json.unit,"mm")+')'
|
||||
kicad += ' (drill '+convert_unit(element.drill,json.unit,"mm")
|
||||
kicad += ' (at '+convert_unit(x,json.unit,'mm')+' '+convert_unit(y,json.unit,'mm')+' '+angle+')'
|
||||
kicad += ' (size '+convert_unit(length,json.unit,'mm')+' '+convert_unit(element.thickness,json.unit,'mm')+')'
|
||||
kicad += ' (drill '+convert_unit(element.drill,json.unit,'mm')
|
||||
kicad += ' (layers F.Cu F.Paste F.Mask)'
|
||||
kicad += ' (clearance '+convert_unit(element.clearance,json.unit,"mm")+')'
|
||||
kicad += ' (solder_mask_margin '+convert_unit((element.thickness/2*-1+element.soldermask),json.unit,"mm")+')'
|
||||
kicad += ' (clearance '+convert_unit(element.clearance,json.unit,'mm')+')'
|
||||
kicad += ' (solder_mask_margin '+convert_unit((element.thickness/2*-1+element.soldermask),json.unit,'mm')+')'
|
||||
kicad += ')\n'
|
||||
break
|
||||
default:
|
||||
|
@ -417,3 +417,114 @@ function json2kicad(json) {
|
|||
kicad += ')\n'
|
||||
return kicad
|
||||
}
|
||||
|
||||
// convert JSON to eagle library
|
||||
function json2eagle(json) {
|
||||
// create eagle xml library
|
||||
var docType = document.implementation.createDocumentType('eagle', 'SYSTEM', 'eagle.dtd');
|
||||
var xml = document.implementation.createDocument('', 'eagle', docType);
|
||||
xml.documentElement.setAttribute('version','6.0')
|
||||
var drawing = xml.createElement('drawing')
|
||||
xml.documentElement.appendChild(drawing)
|
||||
// settings and grid are skipped
|
||||
// add layers
|
||||
var layers = xml.createElement('layers')
|
||||
drawing.appendChild(layers)
|
||||
layers_desc = [ { number: 1, name: 'Top', color: 4, fill: 1, visible: 'yes', active: 'yes'},
|
||||
{ number: 21, name: 'tPLace', color: 7, fill: 1, visible: 'yes', active: 'yes'},
|
||||
{ number: 29, name: 'tStop', color: 7, fill: 3, visible: 'no', active: 'yes'},
|
||||
{ number: 39, name: 'tKeepout', color: 4, fill: 11, visible: 'no', active: 'yes'},
|
||||
]
|
||||
for (layer_i in layers_desc) {
|
||||
var layer_desc = layers_desc[layer_i]
|
||||
var layer = xml.createElement('layer')
|
||||
for (key in layer_desc) {
|
||||
layer.setAttribute(key,layer_desc[key])
|
||||
}
|
||||
layers.appendChild(layer)
|
||||
}
|
||||
// create library
|
||||
var library = xml.createElement('library')
|
||||
drawing.appendChild(library)
|
||||
// add description
|
||||
var description = xml.createElement('description')
|
||||
library.appendChild(description)
|
||||
description.textContent = 'footprint generated from CuVoodoo Land Pattern<br>'
|
||||
description.textContent += 'author: '+json.author+'<br>'
|
||||
description.textContent += 'version: '+json.version+'<br>'
|
||||
description.textContent += 'date: '+json.date
|
||||
// add package
|
||||
var packages = xml.createElement('packages')
|
||||
library.appendChild(packages)
|
||||
var packag = xml.createElement('package')
|
||||
packages.appendChild(packag)
|
||||
packag.setAttribute('name','oshw_logo')
|
||||
var desc = xml.createElement('description')
|
||||
packag.appendChild(desc)
|
||||
desc.innerHtml = json.name
|
||||
// add element parts
|
||||
// note: in eagle the origin is the bottom left corner (negate y to be compatible with the json coordinate system)
|
||||
for (var element_i in json.elements) {
|
||||
var element = json.elements[element_i]
|
||||
switch (element.type) {
|
||||
case 'line':
|
||||
var wire = xml.createElement('wire')
|
||||
wire.setAttribute('x1',convert_unit(element.x1,json.unit,'mm'))
|
||||
wire.setAttribute('y1',convert_unit(-1*element.y1,json.unit,'mm'))
|
||||
wire.setAttribute('x2',convert_unit(element.x2,json.unit,'mm'))
|
||||
wire.setAttribute('y2',convert_unit(-1*element.y2,json.unit,'mm'))
|
||||
wire.setAttribute('width',convert_unit(element.thickness,json.unit,'mm'))
|
||||
wire.setAttribute('layer','21')
|
||||
// note: only arc wires support flat caps
|
||||
if (element.round) {
|
||||
wire.setAttribute('cap','round')
|
||||
} else {
|
||||
wire.setAttribute('cap','flat')
|
||||
}
|
||||
packag.appendChild(wire)
|
||||
break
|
||||
case 'arc':
|
||||
var wire = xml.createElement('wire')
|
||||
wire.setAttribute('x1',convert_unit(element.x+element.radius*Math.cos(((-1*element.start)%360)/360.0*Math.PI*2),json.unit,'mm'))
|
||||
wire.setAttribute('y1',convert_unit(-1*element.y+element.radius*Math.sin(((-1*element.start)%360)/360.0*Math.PI*2),json.unit,'mm'))
|
||||
wire.setAttribute('x2',convert_unit(element.x+element.radius*Math.cos(((-1*(element.start+element.angle))%360)/360.0*Math.PI*2),json.unit,'mm'))
|
||||
wire.setAttribute('y2',convert_unit(-1*element.y+element.radius*Math.sin(((-1*(element.start+element.angle))%360)/360.0*Math.PI*2),json.unit,'mm'))
|
||||
wire.setAttribute('curve',-1*element.angle)
|
||||
wire.setAttribute('width',convert_unit(element.thickness,json.unit,'mm'))
|
||||
wire.setAttribute('layer','21')
|
||||
// note: only arc wires support flat caps
|
||||
if (element.round) {
|
||||
wire.setAttribute('cap','round')
|
||||
} else {
|
||||
wire.setAttribute('cap','flat')
|
||||
}
|
||||
packag.appendChild(wire)
|
||||
break
|
||||
case 'pad':
|
||||
var x = (element.x1+element.x2)/2
|
||||
var y = (element.y1+element.y2)/2
|
||||
var length = Math.sqrt(Math.pow(element.x2-element.x1,2)+Math.pow(element.y2-element.y1,2))
|
||||
var angle = Math.atan2(element.y2-element.y1,element.x2-element.x1)*180/Math.PI;
|
||||
var smd = xml.createElement('smd')
|
||||
smd.setAttribute('name',element.number)
|
||||
smd.setAttribute('x',convert_unit(x,json.unit,'mm'))
|
||||
smd.setAttribute('y',convert_unit(-1*y,json.unit,'mm'))
|
||||
smd.setAttribute('dx',convert_unit(length,json.unit,'mm'))
|
||||
smd.setAttribute('dy',convert_unit(element.thickness,json.unit,'mm'))
|
||||
smd.setAttribute('layer','1')
|
||||
if (element.round) {
|
||||
smd.setAttribute('roundness',100)
|
||||
} else {
|
||||
smd.setAttribute('roundness',0)
|
||||
}
|
||||
smd.setAttribute('rot','R'+angle)
|
||||
packag.appendChild(smd)
|
||||
break
|
||||
case 'pin':
|
||||
break
|
||||
default:
|
||||
console.log("unknown element type: "+element.type)
|
||||
}
|
||||
}
|
||||
return xml
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue