Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
  • Loading branch information
AnasSarkiz committed Feb 18, 2025
2 parents 2330018 + ed434cd commit 03d7394
Show file tree
Hide file tree
Showing 5 changed files with 117 additions and 0 deletions.
1 change: 1 addition & 0 deletions src/fn/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -47,3 +47,4 @@ export { micromelf } from "./micromelf"
export { sma } from "./sma"
export { smf } from "./smf"
export { smb } from "./smb"
export { smc } from "./smc"
93 changes: 93 additions & 0 deletions src/fn/smc.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,93 @@
import type { AnySoupElement, PcbSilkscreenPath } from "circuit-json"
import { z } from "zod"
import { rectpad } from "../helpers/rectpad"
import { silkscreenRef, type SilkscreenRef } from "src/helpers/silkscreenRef"
import { length } from "circuit-json"

export const smc_def = z.object({
fn: z.string(),
num_pins: z.literal(2).default(2),
w: z.string().default("10.70mm"),
h: z.string().default("6.60mm"),
pl: z.string().default("3.30mm"),
pw: z.string().default("2.50mm"),
p: z.string().default("6.80mm"),
})

export const smc = (
raw_params: z.input<typeof smc_def>,
): { circuitJson: AnySoupElement[]; parameters: any } => {
const parameters = smc_def.parse(raw_params)

// Define silkscreen reference text
const silkscreenRefText: SilkscreenRef = silkscreenRef(0, 3, 0.3)

const silkscreenLine: PcbSilkscreenPath = {
type: "pcb_silkscreen_path",
layer: "top",
pcb_component_id: "",
route: [
{
x: length.parse(parameters.p) / 2,
y: length.parse(parameters.h) / 2 - 0.8,
},
{
x: -length.parse(parameters.w) / 2 - 0.8,
y: length.parse(parameters.h) / 2 - 0.8,
},
{
x: -length.parse(parameters.w) / 2 - 0.8,
y: -length.parse(parameters.h) / 2 + 0.8,
},
{
x: length.parse(parameters.p) / 2,
y: -length.parse(parameters.h) / 2 + 0.8,
},
],
stroke_width: 0.1,
pcb_silkscreen_path_id: "",
}

return {
circuitJson: smcWithoutParsing(parameters).concat(
silkscreenLine as AnySoupElement,
silkscreenRefText as AnySoupElement,
),
parameters,
}
}

// Get coordinates for smc pads
export const getSmcCoords = (parameters: {
pn: number
p: number
}) => {
const { pn, p } = parameters

if (pn === 1) {
return { x: -p / 2, y: 0 }
}
return { x: p / 2, y: 0 }
}

// Function to generate smc pads
export const smcWithoutParsing = (parameters: z.infer<typeof smc_def>) => {
const pads: AnySoupElement[] = []

for (let i = 1; i <= parameters.num_pins; i++) {
const { x, y } = getSmcCoords({
pn: i,
p: Number.parseFloat(parameters.p),
})
pads.push(
rectpad(
i,
x,
y,
Number.parseFloat(parameters.pl),
Number.parseFloat(parameters.pw),
),
)
}
return pads
}
1 change: 1 addition & 0 deletions src/footprinter.ts
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,7 @@ export type Footprinter = {
sot23: () => FootprinterParamsBuilder<"w" | "h" | "pl" | "pw">
sot236: () => FootprinterParamsBuilder<"w" | "p">
sot89: () => FootprinterParamsBuilder<"w" | "p" | "pl">
smc: () => FootprinterParamsBuilder<"w" | "h" | "p" | "pw" | "pl">

to92: () => FootprinterParamsBuilder<"w" | "h" | "p" | "id" | "od">
minimelf: () => FootprinterParamsBuilder<"w" | "h" | "p" | "pw" | "pl">
Expand Down
13 changes: 13 additions & 0 deletions tests/__snapshots__/smc.snap.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
9 changes: 9 additions & 0 deletions tests/smc.test.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
import { test, expect } from "bun:test"
import { convertCircuitJsonToPcbSvg } from "circuit-to-svg"
import { fp } from "../src/footprinter"

test("smc", () => {
const circuitJson = fp.string("smc").circuitJson()
const svgContent = convertCircuitJsonToPcbSvg(circuitJson)
expect(svgContent).toMatchSvgSnapshot(import.meta.path, "smc")
})

0 comments on commit 03d7394

Please sign in to comment.