phiboard/footprints/combo_diode.js
2025-06-07 02:00:37 +02:00

89 lines
3.6 KiB
JavaScript

// Author: Ergogen + @infused-kim improvements
//
// @infused-kim's improvements:
// - Added option to hide thru-holes
// - Added virtual attribute to silence DRC error
module.exports = {
params: {
designator: "Di",
from: undefined,
to: undefined,
include_smd: true,
include_tht: true,
include_via: true,
side: "B",
reversible: false,
},
body: (p) => {
const standard_opening = `
(module Diode_SMD:D_SOD-123 (layer ${p.side}.Cu) (tedit 5B24D78E)
${p.at /* parametric position */}
(attr virtual)
(fp_text reference "${p.ref}" (at 0 0) (layer ${p.side}.SilkS) ${
p.ref_hide
} (effects (font (size 1.27 1.27) (thickness 0.15))))
(fp_text value "" (at 0 0) (layer ${
p.side
}.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
`;
const front_silk = `
(fp_line (start 0.25 0) (end 0.75 0) (layer F.SilkS) (width 0.1))
(fp_line (start 0.25 0.4) (end -0.35 0) (layer F.SilkS) (width 0.1))
(fp_line (start 0.25 -0.4) (end 0.25 0.4) (layer F.SilkS) (width 0.1))
(fp_line (start -0.35 0) (end 0.25 -0.4) (layer F.SilkS) (width 0.1))
(fp_line (start -0.35 0) (end -0.35 0.55) (layer F.SilkS) (width 0.1))
(fp_line (start -0.35 0) (end -0.35 -0.55) (layer F.SilkS) (width 0.1))
(fp_line (start -0.75 0) (end -0.35 0) (layer F.SilkS) (width 0.1))
`;
const back_silk = `
(fp_line (start 0.25 0) (end 0.75 0) (layer B.SilkS) (width 0.1))
(fp_line (start 0.25 0.4) (end -0.35 0) (layer B.SilkS) (width 0.1))
(fp_line (start 0.25 -0.4) (end 0.25 0.4) (layer B.SilkS) (width 0.1))
(fp_line (start -0.35 0) (end 0.25 -0.4) (layer B.SilkS) (width 0.1))
(fp_line (start -0.35 0) (end -0.35 0.55) (layer B.SilkS) (width 0.1))
(fp_line (start -0.35 0) (end -0.35 -0.55) (layer B.SilkS) (width 0.1))
(fp_line (start -0.75 0) (end -0.35 0) (layer B.SilkS) (width 0.1))
`;
const front_pads = `
(pad 1 smd rect (at -1.65 0 ${p.rot}) (size 0.9 1.2) (layers F.Cu F.Paste F.Mask) ${p.to.str})
(pad 2 smd rect (at 1.65 0 ${p.rot}) (size 0.9 1.2) (layers F.Cu F.Paste F.Mask) ${p.from.str})
`;
const back_pads = `
(pad 1 smd rect (at -1.65 0 ${p.rot}) (size 0.9 1.2) (layers B.Cu B.Paste B.Mask) ${p.to.str})
(pad 2 smd rect (at 1.65 0 ${p.rot}) (size 0.9 1.2) (layers B.Cu B.Paste B.Mask) ${p.from.str})
`;
const standard_closing = `
)
`;
const tht = `
(pad 1 thru_hole rect (at -3.81 0 ${p.rot}) (size 1.778 1.778) (drill 0.9906) (layers *.Cu *.Mask) ${p.to.str})
(pad 2 thru_hole circle (at 3.81 0 ${p.rot}) (size 1.905 1.905) (drill 0.9906) (layers *.Cu *.Mask) ${p.from.str})
`;
const via = `
(pad "1" thru_hole circle (at -2.1 0) (size 0.6 0.6) (drill 0.3) (layers "*.Cu" "*.Mask") ${p.to.str})
(pad "2" thru_hole circle (at 2.1 0) (size 0.6 0.6) (drill 0.3) (layers "*.Cu" "*.Mask") ${p.from.str})
`;
let final = standard_opening;
if (p.side == "F" || p.reversible) {
final += front_silk;
if (p.include_smd) {
final += front_pads;
}
}
if (p.side == "B" || p.reversible) {
final += back_silk;
if (p.include_smd) {
final += back_pads;
}
}
if (p.include_tht) {
final += tht;
}
if (p.include_via) {
final += via;
}
final += standard_closing;
return final;
},
};