@tscircuit/footprinter 0.0.19 → 0.0.20

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@tscircuit/footprinter",
3
3
  "type": "module",
4
- "version": "0.0.19",
4
+ "version": "0.0.20",
5
5
  "description": "",
6
6
  "main": "dist/index.cjs",
7
7
  "scripts": {
package/src/fn/quad.ts CHANGED
@@ -97,6 +97,8 @@ export const quad = (
97
97
  const params = quad_def.parse(raw_params)
98
98
  const pads: AnySoupElement[] = []
99
99
  const pin_map = getQuadPinMap(params)
100
+ /** Side pin count */
101
+ const spc = params.num_pins / 4
100
102
  for (let i = 0; i < params.num_pins; i++) {
101
103
  const {
102
104
  x,
@@ -136,24 +138,42 @@ export const quad = (
136
138
 
137
139
  // Silkscreen corners
138
140
  const silkscreen_corners: PcbSilkscreenPath[] = []
139
- for (let corner_index = 0; corner_index < 4; corner_index++) {
140
- const dx = Math.floor(corner_index / 2) * 2 - 1
141
- const dy = 1 - (corner_index % 2) * 2
141
+ for (const [corner, dx, dy] of [
142
+ ["top-left", -1, 1],
143
+ ["bottom-left", -1, -1],
144
+ ["bottom-right", 1, -1],
145
+ ["top-right", 1, 1],
146
+ ] as const) {
147
+ // const dx = Math.floor(corner_index / 2) * 2 - 1
148
+ // const dy = 1 - (corner_index % 2) * 2
142
149
  const corner_x = (params.w / 2 - params.pl / 2) * dx
143
150
  const corner_y = (params.h / 2 - params.pl / 2) * dy
144
151
  let arrow: "none" | "in1" | "in2" = "none"
145
152
  /** corner size */
146
153
  const csz = params.pw * 2
147
- if (pin_map[1] === 1 && corner_index === 0) {
154
+
155
+ if (pin_map[1] === 1 && corner === "top-left") {
156
+ arrow = "in1"
157
+ } else if (pin_map[spc * 4] === 1 && corner === "top-left") {
158
+ arrow = "in2"
159
+ } else if (pin_map[spc * 3 + 1] === 1 && corner === "top-right") {
160
+ arrow = "in2"
161
+ } else if (pin_map[spc * 3] === 1 && corner === "top-right") {
162
+ arrow = "in1"
163
+ } else if (pin_map[spc] === 1 && corner === "bottom-left") {
164
+ arrow = "in1"
165
+ } else if (pin_map[spc + 1] === 1 && corner === "bottom-left") {
166
+ arrow = "in2"
167
+ } else if (pin_map[spc * 2] === 1 && corner === "bottom-right") {
148
168
  arrow = "in1"
149
- } else if (pin_map[16] === 1 && corner_index === 0) {
169
+ } else if (pin_map[spc * 2 + 1] === 1 && corner === "bottom-right") {
150
170
  arrow = "in2"
151
171
  }
152
172
  if (arrow === "none") {
153
173
  silkscreen_corners.push({
154
174
  layer: "top",
155
175
  pcb_component_id: "",
156
- pcb_silkscreen_path_id: `pcb_silkscreen_path_${corner_index}`,
176
+ pcb_silkscreen_path_id: `pcb_silkscreen_path_${corner}`,
157
177
  route: [
158
178
  {
159
179
  x: corner_x - csz * dx,
@@ -176,7 +196,7 @@ export const quad = (
176
196
  {
177
197
  layer: "top",
178
198
  pcb_component_id: "",
179
- pcb_silkscreen_path_id: `pcb_silkscreen_path_${corner_index}`,
199
+ pcb_silkscreen_path_id: `pcb_silkscreen_path_${corner}_1`,
180
200
  route: [
181
201
  {
182
202
  x: corner_x - csz * dx,
@@ -192,7 +212,7 @@ export const quad = (
192
212
  {
193
213
  layer: "top",
194
214
  pcb_component_id: "",
195
- pcb_silkscreen_path_id: `pcb_silkscreen_path_${corner_index}`,
215
+ pcb_silkscreen_path_id: `pcb_silkscreen_path_${corner}_2`,
196
216
  route: [
197
217
  {
198
218
  x: corner_x,
@@ -208,10 +228,10 @@ export const quad = (
208
228
  {
209
229
  layer: "top",
210
230
  pcb_component_id: "",
211
- pcb_silkscreen_path_id: `pcb_silkscreen_path_${corner_index}`,
231
+ pcb_silkscreen_path_id: `pcb_silkscreen_path_${corner}_3`,
212
232
  route: [
213
233
  {
214
- x: corner_x - 0.2,
234
+ x: corner_x - 0.2 * -dx,
215
235
  y: corner_y + 0.2 * rotate_arrow,
216
236
  },
217
237
  {
@@ -219,11 +239,11 @@ export const quad = (
219
239
  y: corner_y,
220
240
  },
221
241
  {
222
- x: corner_x + 0.2 * rotate_arrow,
242
+ x: corner_x + 0.2 * rotate_arrow * -dx,
223
243
  y: corner_y + 0.2,
224
244
  },
225
245
  {
226
- x: corner_x - 0.2,
246
+ x: corner_x - 0.2 * -dx,
227
247
  y: corner_y + 0.2 * rotate_arrow,
228
248
  },
229
249
  ],
@@ -11,11 +11,11 @@ test("quad16_w4_l4_p0.4_pw0.25_pl0.4", async (t) => {
11
11
  t.pass()
12
12
  })
13
13
 
14
- test("quad16_w4_l4_p0.4_pw0.25_pl0.4_thermalpad_startingpin(topside,leftpin)", async (t) => {
14
+ test("quad16_w4_l4_p0.4_pw0.25_pl0.4_thermalpad_startingpin(bottomside,leftpin)", async (t) => {
15
15
  const { fp, logSoup } = await getTestFixture(t)
16
16
  const soup = fp
17
17
  .string(
18
- "quad16_w4_l4_p0.4_pw0.25_pl0.4_thermalpad_startingpin(topside,leftpin)"
18
+ "quad16_w4_l4_p0.4_pw0.25_pl0.4_thermalpad_startingpin(bottomside,leftpin)"
19
19
  )
20
20
  .soup()
21
21