correct and add pin element export

This commit is contained in:
King Kévin 2015-09-03 11:32:29 +02:00
parent fd7c8ae5b5
commit 1c6ffafc48
1 changed files with 90 additions and 46 deletions

View File

@ -197,8 +197,12 @@ function json2svg(json) {
arc.setAttribute('cy',element.y)
arc.setAttribute('r',element.radius)
} else {
var x1 = element.x+element.radius*Math.cos(((-1*element.start)%360)/360.0*Math.PI*2)
var y1 = element.y-element.radius*Math.sin(((-1*element.start)%360)/360.0*Math.PI*2)
var x2 = element.x+element.radius*Math.cos(((-1*(element.start+element.angle))%360)/360.0*Math.PI*2)
var y2 = element.y-element.radius*Math.sin(((-1*(element.start+element.angle))%360)/360.0*Math.PI*2)
arc = document.createElementNS(svgNS,'path')
arc.setAttribute('d',"M "+(element.x+element.radius*Math.cos(((-1*element.start)%360)/360.0*Math.PI*2))+" "+(element.y-element.radius*Math.sin(((-1*element.start)%360)/360.0*Math.PI*2))+" A "+element.radius+" "+element.radius+" 0 "+((element.angle)%360>180 ? "1" : "0")+" 1 "+(element.x+element.radius*Math.cos(((-1*(element.start+element.angle))%360)/360.0*Math.PI*2))+" "+(element.y-element.radius*Math.sin(((-1*(element.start+element.angle))%360)/360.0*Math.PI*2))+" ")
arc.setAttribute('d','M '+x1+' '+y1+' A '+element.radius+' '+element.radius+' 0 '+((element.angle)%360>180 ? '1' : '0')+' 1 '+x2+' '+y2+' ')
}
arc.style.setProperty('stroke-width',element.thickness)
if (element.round) {
@ -268,19 +272,11 @@ function json2svg(json) {
copper.setAttribute('ry',0)
}
layers['copper'].appendChild(copper)
var drill = document.createElementNS(svgNS,'rect')
var drill = document.createElementNS(svgNS,'circle')
drill.style.setProperty('stroke-width',0)
drill.setAttribute('x',element.x-element.drill/2)
drill.setAttribute('y',element.y-element.drill/2)
drill.setAttribute('height',element.drill)
drill.setAttribute('width',element.drill)
if (element.round) {
drill.setAttribute('rx',element.drill/2)
drill.setAttribute('ry',element.drill/2)
} else {
drill.setAttribute('rx',0)
drill.setAttribute('ry',0)
}
drill.setAttribute('cx',element.x)
drill.setAttribute('cy',element.y)
drill.setAttribute('r',element.drill/2)
layers['drill'].appendChild(drill)
var clearance = document.createElementNS(svgNS,'rect')
clearance.style.setProperty('stroke-width',0)
@ -303,8 +299,8 @@ function json2svg(json) {
soldermask.setAttribute('height',element.soldermask)
soldermask.setAttribute('width',element.soldermask)
if (element.round) {
soldermask.setAttribute('rx',element.soldermask/2)
soldermask.setAttribute('ry',element.soldermask/2)
soldermask.setAttribute('rx',element.thickness/2+element.soldermask)
soldermask.setAttribute('ry',element.thickness/2+element.soldermask)
} else {
soldermask.setAttribute('rx',0)
soldermask.setAttribute('ry',0)
@ -312,7 +308,7 @@ function json2svg(json) {
layers['soldermask'].appendChild(soldermask)
break
default:
console.log("unknown element type: "+element.type)
console.log('unknown element type: '+element.type)
}
}
return svg
@ -360,14 +356,14 @@ function json2pcb(json) {
pcb += '"]\n'
break
case 'pin':
pcb += 'Pin['+element.x+''+json.unit+' '+element.y+''+json.unit+' '+element.thickness+''+json.unit+' '+element.clearance*2+''+json.unit+' '+element.soldermask+''+json.unit+' '+element.drill+''+json.unit+' "" "'+element.number+'" "'
pcb += 'Pin['+element.x+''+json.unit+' '+element.y+''+json.unit+' '+element.thickness+''+json.unit+' '+element.clearance*2+''+json.unit+' '+Math.max(thickness+element.soldermask,0)+''+json.unit+' '+element.drill+''+json.unit+' "" "'+element.number+'" "'
if (!element.round) {
pcb += 'square'
}
pcb += '"]\n'
break
default:
console.log("unknown element type: "+element.type)
console.log('unknown element type: '+element.type)
}
}
pcb += ')\n'
@ -423,11 +419,11 @@ function json2kicad(json) {
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 += ' (solder_mask_margin '+convert_unit(element.soldermask,json.unit,'mm')+')'
kicad += ')\n'
break
default:
console.log("unknown element type: "+element.type)
console.log('unknown element type: '+element.type)
}
}
kicad += ')\n'
@ -447,6 +443,7 @@ function json2eagle(json) {
var layers = xml.createElement('layers')
drawing.appendChild(layers)
layers_desc = [ { number: 1, name: 'Top', color: 4, fill: 1, visible: 'yes', active: 'yes'},
{ number: 17, name: 'Pads', color: 2, 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'},
@ -484,20 +481,24 @@ function json2eagle(json) {
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')
var line = xml.createElement('wire')
line.setAttribute('x1',convert_unit(element.x1,json.unit,'mm'))
line.setAttribute('y1',convert_unit(-1*element.y1,json.unit,'mm'))
line.setAttribute('x2',convert_unit(element.x2,json.unit,'mm'))
line.setAttribute('y2',convert_unit(-1*element.y2,json.unit,'mm'))
line.setAttribute('width',convert_unit(element.thickness,json.unit,'mm'))
line.setAttribute('layer','21')
packag.appendChild(line)
} else { // note: in eagle only arcs support flat caps. use rectangles for wires
var line = xml.createElement('rectangle')
line.setAttribute('x1',convert_unit(element.x1-element.thickness/2,json.unit,'mm'))
line.setAttribute('y1',convert_unit(-1*(element.y1-element.thickness/2),json.unit,'mm'))
line.setAttribute('x2',convert_unit(element.x2+element.thickness/2,json.unit,'mm'))
line.setAttribute('y2',convert_unit(-1*(element.y2+element.thickness/2),json.unit,'mm'))
line.setAttribute('layer','21')
packag.appendChild(line)
}
packag.appendChild(wire)
break
case 'arc':
var wire = xml.createElement('wire')
@ -508,7 +509,6 @@ function json2eagle(json) {
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 {
@ -517,19 +517,19 @@ function json2eagle(json) {
packag.appendChild(wire)
break
case 'pad':
var smd = xml.createElement('smd')
smd.setAttribute('name',element.number)
smd.setAttribute('x',convert_unit(element.x,json.unit,'mm'))
smd.setAttribute('y',convert_unit(-1*element.y,json.unit,'mm'))
smd.setAttribute('dx',convert_unit(element.width,json.unit,'mm'))
smd.setAttribute('dy',convert_unit(element.height,json.unit,'mm'))
smd.setAttribute('layer','1')
var pad = xml.createElement('smd')
pad.setAttribute('name',element.number)
pad.setAttribute('x',convert_unit(element.x,json.unit,'mm'))
pad.setAttribute('y',convert_unit(-1*element.y,json.unit,'mm'))
pad.setAttribute('dx',convert_unit(element.width,json.unit,'mm'))
pad.setAttribute('dy',convert_unit(element.height,json.unit,'mm'))
pad.setAttribute('layer','1')
if (element.round) {
smd.setAttribute('roundness',100)
pad.setAttribute('roundness',100)
} else {
smd.setAttribute('roundness',0)
pad.setAttribute('roundness',0)
}
packag.appendChild(smd)
packag.appendChild(pad)
if (element.round) {
var x1, y1, x2, y2, thickness
if (element.width>element.height) {
@ -562,7 +562,6 @@ function json2eagle(json) {
soldermask.setAttribute('layer','29')
packag.appendChild(soldermask)
} else {
var x1, y1, x2, y2
var clearance = xml.createElement('rectangle')
clearance.setAttribute('x1',convert_unit(element.x-element.width/2-element.clearance,json.unit,'mm'))
clearance.setAttribute('y1',convert_unit(-1*(element.y-element.height/2-element.clearance),json.unit,'mm'))
@ -576,11 +575,56 @@ function json2eagle(json) {
soldermask.setAttribute('y2',convert_unit(-1*(element.y+element.height/2+element.soldermask),json.unit,'mm'))
soldermask.setAttribute('layer','29')
}
break
break
case 'pin':
var pin = xml.createElement('pad')
pin.setAttribute('name',element.number)
pin.setAttribute('x',convert_unit(element.x,json.unit,'mm'))
pin.setAttribute('y',convert_unit(-1*element.y,json.unit,'mm'))
pin.setAttribute('drill',convert_unit(element.drill,json.unit,'mm'))
pin.setAttribute('diameter',convert_unit(element.thickness,json.unit,'mm'))
pin.setAttribute('layer','17')
if (element.round) {
pin.setAttribute('shape','round')
} else {
pin.setAttribute('shape','square')
}
packag.appendChild(pin)
if (element.round) {
var clearance = xml.createElement('wire')
clearance.setAttribute('x1',convert_unit(x,json.unit,'mm'))
clearance.setAttribute('y2',convert_unit(-1*y,json.unit,'mm'))
clearance.setAttribute('x2',convert_unit(x,json.unit,'mm'))
clearance.setAttribute('y2',convert_unit(-1*y,json.unit,'mm'))
clearance.setAttribute('width',convert_unit(Math.max(element.thickness+element.clearance*2,0),json.unit,'mm'))
clearance.setAttribute('layer','39')
packag.appendChild(clearance)
var soldermask = xml.createElement('wire')
soldermask.setAttribute('x1',convert_unit(x,json.unit,'mm'))
soldermask.setAttribute('y1',convert_unit(-1*y,json.unit,'mm'))
soldermask.setAttribute('x2',convert_unit(x,json.unit,'mm'))
soldermask.setAttribute('y2',convert_unit(-1*y,json.unit,'mm'))
soldermask.setAttribute('width',convert_unit(Math.max(element.thickness+element.soldermask*2,0),json.unit,'mm'))
soldermask.setAttribute('layer','29')
packag.appendChild(soldermask)
} else {
var clearance = xml.createElement('rectangle')
clearance.setAttribute('x1',convert_unit(element.x-element.thickness/2-element.clearance,json.unit,'mm'))
clearance.setAttribute('y1',convert_unit(-1*(element.y-element.thickness/2-element.clearance),json.unit,'mm'))
clearance.setAttribute('x2',convert_unit(element.x+element.thickness/2+element.clearance,json.unit,'mm'))
clearance.setAttribute('y2',convert_unit(-1*(element.y+element.thickness/2+element.clearance),json.unit,'mm'))
clearance.setAttribute('layer','39')
var soldermask = xml.createElement('rectangle')
soldermask.setAttribute('x1',convert_unit(element.x-element.thickness/2-element.soldermask,json.unit,'mm'))
soldermask.setAttribute('y1',convert_unit(-1*(element.y-element.thickness/2-element.soldermask),json.unit,'mm'))
soldermask.setAttribute('x2',convert_unit(element.x+element.thickness/2+element.soldermask,json.unit,'mm'))
soldermask.setAttribute('y2',convert_unit(-1*(element.y+element.thickness/2+element.soldermask),json.unit,'mm'))
soldermask.setAttribute('layer','29')
}
break
break
default:
console.log("unknown element type: "+element.type)
console.log('unknown element type: '+element.type)
}
}
return xml