@tscircuit/copper-pour-solver 0.0.1

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.
Files changed (44) hide show
  1. package/.github/workflows/.replit +9 -0
  2. package/.github/workflows/bun-formatcheck.yml +26 -0
  3. package/.github/workflows/bun-pver-release.yml +71 -0
  4. package/.github/workflows/bun-test.yml +31 -0
  5. package/.github/workflows/bun-typecheck.yml +26 -0
  6. package/README.md +37 -0
  7. package/biome.json +93 -0
  8. package/bun.lock +164 -0
  9. package/bunfig.toml +5 -0
  10. package/cosmos.config.json +5 -0
  11. package/dist/index.d.ts +57 -0
  12. package/dist/index.js +368 -0
  13. package/lib/circuit-json/convert-circuit-json-to-input-problem.ts +208 -0
  14. package/lib/circuit-json/convertCircuitJsonToInputProblem.ts +0 -0
  15. package/lib/index.ts +3 -0
  16. package/lib/solvers/CopperPourPipelineSolver.ts +51 -0
  17. package/lib/solvers/copper-pour/circle-to-polygon.ts +15 -0
  18. package/lib/solvers/copper-pour/generate-brep.ts +60 -0
  19. package/lib/solvers/copper-pour/get-board-polygon.ts +19 -0
  20. package/lib/solvers/copper-pour/process-obstacles.ts +116 -0
  21. package/lib/types.ts +46 -0
  22. package/package.json +28 -0
  23. package/site/Welcome.page.tsx +0 -0
  24. package/tests/__snapshots__/circuit-1.snap.svg +1 -0
  25. package/tests/__snapshots__/circuit-2.snap.svg +1 -0
  26. package/tests/__snapshots__/circuit-3.snap.svg +1 -0
  27. package/tests/__snapshots__/circuit-4.snap.svg +1 -0
  28. package/tests/__snapshots__/circuit-5.snap.svg +1 -0
  29. package/tests/__snapshots__/circuit-6.snap.svg +1 -0
  30. package/tests/assets/circuit-1.json +592 -0
  31. package/tests/assets/circuit-2.json +1424 -0
  32. package/tests/assets/circuit-3.json +1424 -0
  33. package/tests/assets/circuit-4.json +631 -0
  34. package/tests/assets/circuit-5.json +631 -0
  35. package/tests/assets/circuit-6.json +806 -0
  36. package/tests/circuit-1.test.ts +14 -0
  37. package/tests/circuit-2.test.ts +15 -0
  38. package/tests/circuit-3.test.ts +15 -0
  39. package/tests/circuit-4.test.ts +15 -0
  40. package/tests/circuit-5.test.ts +15 -0
  41. package/tests/circuit-6.test.ts +15 -0
  42. package/tests/fixtures/preload.ts +1 -0
  43. package/tests/utils/run-solver-and-render-to-svg.ts +64 -0
  44. package/tsconfig.json +34 -0
@@ -0,0 +1,631 @@
1
+ [
2
+ {
3
+ "type": "source_project_metadata",
4
+ "source_project_metadata_id": "source_project_metadata_0",
5
+ "software_used_string": "@tscircuit/core@0.0.844"
6
+ },
7
+ {
8
+ "type": "source_group",
9
+ "source_group_id": "source_group_0",
10
+ "is_subcircuit": true,
11
+ "was_automatically_named": true,
12
+ "subcircuit_id": "subcircuit_source_group_0"
13
+ },
14
+ {
15
+ "type": "source_net",
16
+ "source_net_id": "source_net_0",
17
+ "name": "GND",
18
+ "member_source_group_ids": [],
19
+ "is_ground": true,
20
+ "is_power": false,
21
+ "is_positive_voltage_source": false,
22
+ "subcircuit_id": "subcircuit_source_group_0",
23
+ "subcircuit_connectivity_map_key": "unnamedsubcircuit28_connectivity_net0"
24
+ },
25
+ {
26
+ "type": "source_net",
27
+ "source_net_id": "source_net_1",
28
+ "name": "VCC",
29
+ "member_source_group_ids": [],
30
+ "is_ground": false,
31
+ "is_power": true,
32
+ "is_positive_voltage_source": true,
33
+ "subcircuit_id": "subcircuit_source_group_0",
34
+ "subcircuit_connectivity_map_key": "unnamedsubcircuit28_connectivity_net1"
35
+ },
36
+ {
37
+ "type": "source_port",
38
+ "source_port_id": "source_port_0",
39
+ "name": "pin1",
40
+ "pin_number": 1,
41
+ "port_hints": ["pin1", "anode", "pos", "left", "1"],
42
+ "source_component_id": "source_component_0",
43
+ "subcircuit_id": "subcircuit_source_group_0"
44
+ },
45
+ {
46
+ "type": "source_port",
47
+ "source_port_id": "source_port_1",
48
+ "name": "pin2",
49
+ "pin_number": 2,
50
+ "port_hints": ["pin2", "cathode", "neg", "right", "2"],
51
+ "source_component_id": "source_component_0",
52
+ "subcircuit_id": "subcircuit_source_group_0",
53
+ "subcircuit_connectivity_map_key": "unnamedsubcircuit28_connectivity_net0"
54
+ },
55
+ {
56
+ "type": "source_component",
57
+ "source_component_id": "source_component_0",
58
+ "ftype": "simple_resistor",
59
+ "name": "R1",
60
+ "resistance": 10000,
61
+ "display_resistance": "10kΩ",
62
+ "are_pins_interchangeable": true,
63
+ "source_group_id": "source_group_0"
64
+ },
65
+ {
66
+ "type": "source_port",
67
+ "source_port_id": "source_port_2",
68
+ "name": "pin1",
69
+ "pin_number": 1,
70
+ "port_hints": ["pin1", "anode", "pos", "left", "1"],
71
+ "source_component_id": "source_component_1",
72
+ "subcircuit_id": "subcircuit_source_group_0"
73
+ },
74
+ {
75
+ "type": "source_port",
76
+ "source_port_id": "source_port_3",
77
+ "name": "pin2",
78
+ "pin_number": 2,
79
+ "port_hints": ["pin2", "cathode", "neg", "right", "2"],
80
+ "source_component_id": "source_component_1",
81
+ "subcircuit_id": "subcircuit_source_group_0",
82
+ "subcircuit_connectivity_map_key": "unnamedsubcircuit28_connectivity_net1"
83
+ },
84
+ {
85
+ "type": "source_component",
86
+ "source_component_id": "source_component_1",
87
+ "ftype": "simple_resistor",
88
+ "name": "R2",
89
+ "resistance": 10000,
90
+ "display_resistance": "10kΩ",
91
+ "are_pins_interchangeable": true,
92
+ "source_group_id": "source_group_0"
93
+ },
94
+ {
95
+ "type": "source_board",
96
+ "source_board_id": "source_board_0",
97
+ "source_group_id": "source_group_0"
98
+ },
99
+ {
100
+ "type": "source_trace",
101
+ "source_trace_id": "source_trace_0",
102
+ "connected_source_port_ids": ["source_port_1"],
103
+ "connected_source_net_ids": ["source_net_0"],
104
+ "subcircuit_id": "subcircuit_source_group_0",
105
+ "display_name": ".R1 > .pin2 to net.GND",
106
+ "subcircuit_connectivity_map_key": "unnamedsubcircuit28_connectivity_net0"
107
+ },
108
+ {
109
+ "type": "source_trace",
110
+ "source_trace_id": "source_trace_1",
111
+ "connected_source_port_ids": ["source_port_3"],
112
+ "connected_source_net_ids": ["source_net_1"],
113
+ "subcircuit_id": "subcircuit_source_group_0",
114
+ "display_name": ".R2 > .pin2 to net.VCC",
115
+ "subcircuit_connectivity_map_key": "unnamedsubcircuit28_connectivity_net1"
116
+ },
117
+ {
118
+ "type": "source_pin_missing_trace_warning",
119
+ "source_pin_missing_trace_warning_id": "source_pin_missing_trace_warning_0",
120
+ "message": "Port pin1 on R1 is missing a trace",
121
+ "source_component_id": "source_component_0",
122
+ "source_port_id": "source_port_0",
123
+ "subcircuit_id": "subcircuit_source_group_0",
124
+ "warning_type": "source_pin_missing_trace_warning"
125
+ },
126
+ {
127
+ "type": "source_pin_missing_trace_warning",
128
+ "source_pin_missing_trace_warning_id": "source_pin_missing_trace_warning_1",
129
+ "message": "Port pin1 on R2 is missing a trace",
130
+ "source_component_id": "source_component_1",
131
+ "source_port_id": "source_port_2",
132
+ "subcircuit_id": "subcircuit_source_group_0",
133
+ "warning_type": "source_pin_missing_trace_warning"
134
+ },
135
+ {
136
+ "type": "schematic_component",
137
+ "schematic_component_id": "schematic_component_0",
138
+ "center": {
139
+ "x": 0,
140
+ "y": 0
141
+ },
142
+ "size": {
143
+ "width": 1.1,
144
+ "height": 0.388910699999999
145
+ },
146
+ "source_component_id": "source_component_0",
147
+ "is_box_with_pins": true,
148
+ "symbol_name": "boxresistor_right",
149
+ "symbol_display_value": "10kΩ",
150
+ "schematic_group_id": "schematic_group_0"
151
+ },
152
+ {
153
+ "type": "schematic_component",
154
+ "schematic_component_id": "schematic_component_1",
155
+ "center": {
156
+ "x": 0,
157
+ "y": -1.588910699999999
158
+ },
159
+ "size": {
160
+ "width": 1.1,
161
+ "height": 0.388910699999999
162
+ },
163
+ "source_component_id": "source_component_1",
164
+ "is_box_with_pins": true,
165
+ "symbol_name": "boxresistor_right",
166
+ "symbol_display_value": "10kΩ",
167
+ "schematic_group_id": "schematic_group_0"
168
+ },
169
+ {
170
+ "type": "schematic_group",
171
+ "schematic_group_id": "schematic_group_0",
172
+ "is_subcircuit": true,
173
+ "subcircuit_id": "subcircuit_source_group_0",
174
+ "name": "unnamed_board1",
175
+ "center": {
176
+ "x": 0,
177
+ "y": 0
178
+ },
179
+ "width": 0,
180
+ "height": 0,
181
+ "schematic_component_ids": [],
182
+ "source_group_id": "source_group_0"
183
+ },
184
+ {
185
+ "type": "schematic_port",
186
+ "schematic_port_id": "schematic_port_0",
187
+ "schematic_component_id": "schematic_component_0",
188
+ "center": {
189
+ "x": -0.55,
190
+ "y": 0
191
+ },
192
+ "source_port_id": "source_port_0",
193
+ "facing_direction": "left",
194
+ "distance_from_component_edge": 0.4,
195
+ "pin_number": 1,
196
+ "display_pin_label": "anode",
197
+ "is_connected": false
198
+ },
199
+ {
200
+ "type": "schematic_port",
201
+ "schematic_port_id": "schematic_port_1",
202
+ "schematic_component_id": "schematic_component_0",
203
+ "center": {
204
+ "x": 0.55,
205
+ "y": 0
206
+ },
207
+ "source_port_id": "source_port_1",
208
+ "facing_direction": "right",
209
+ "distance_from_component_edge": 0.4,
210
+ "pin_number": 2,
211
+ "display_pin_label": "cathode",
212
+ "is_connected": false
213
+ },
214
+ {
215
+ "type": "schematic_port",
216
+ "schematic_port_id": "schematic_port_2",
217
+ "schematic_component_id": "schematic_component_1",
218
+ "center": {
219
+ "x": -0.55,
220
+ "y": -1.588910699999999
221
+ },
222
+ "source_port_id": "source_port_2",
223
+ "facing_direction": "left",
224
+ "distance_from_component_edge": 0.4,
225
+ "pin_number": 1,
226
+ "display_pin_label": "anode",
227
+ "is_connected": false
228
+ },
229
+ {
230
+ "type": "schematic_port",
231
+ "schematic_port_id": "schematic_port_3",
232
+ "schematic_component_id": "schematic_component_1",
233
+ "center": {
234
+ "x": 0.55,
235
+ "y": -1.588910699999999
236
+ },
237
+ "source_port_id": "source_port_3",
238
+ "facing_direction": "right",
239
+ "distance_from_component_edge": 0.4,
240
+ "pin_number": 2,
241
+ "display_pin_label": "cathode",
242
+ "is_connected": false
243
+ },
244
+ {
245
+ "type": "schematic_net_label",
246
+ "schematic_net_label_id": "schematic_net_label_0",
247
+ "text": "GND",
248
+ "anchor_position": {
249
+ "x": 0.55,
250
+ "y": 0
251
+ },
252
+ "center": {
253
+ "x": 0.7000000000000001,
254
+ "y": 0
255
+ },
256
+ "anchor_side": "left",
257
+ "source_net_id": "source_net_0"
258
+ },
259
+ {
260
+ "type": "schematic_net_label",
261
+ "schematic_net_label_id": "schematic_net_label_1",
262
+ "text": "VCC",
263
+ "anchor_position": {
264
+ "x": 0.55,
265
+ "y": -1.588910699999999
266
+ },
267
+ "center": {
268
+ "x": 0.7000000000000001,
269
+ "y": -1.588910699999999
270
+ },
271
+ "anchor_side": "left",
272
+ "source_net_id": "source_net_1"
273
+ },
274
+ {
275
+ "type": "pcb_component",
276
+ "pcb_component_id": "pcb_component_0",
277
+ "center": {
278
+ "x": -5,
279
+ "y": 0
280
+ },
281
+ "width": 2.8499999999999996,
282
+ "height": 1.4,
283
+ "layer": "top",
284
+ "rotation": 0,
285
+ "source_component_id": "source_component_0",
286
+ "subcircuit_id": "subcircuit_source_group_0",
287
+ "do_not_place": false,
288
+ "obstructs_within_bounds": true
289
+ },
290
+ {
291
+ "type": "pcb_component",
292
+ "pcb_component_id": "pcb_component_1",
293
+ "center": {
294
+ "x": 5,
295
+ "y": 0
296
+ },
297
+ "width": 2.8499999999999996,
298
+ "height": 1.4,
299
+ "layer": "bottom",
300
+ "rotation": 0,
301
+ "source_component_id": "source_component_1",
302
+ "subcircuit_id": "subcircuit_source_group_0",
303
+ "do_not_place": false,
304
+ "obstructs_within_bounds": true
305
+ },
306
+ {
307
+ "type": "pcb_board",
308
+ "pcb_board_id": "pcb_board_0",
309
+ "center": {
310
+ "x": 0,
311
+ "y": 0
312
+ },
313
+ "thickness": 1.4,
314
+ "num_layers": 2,
315
+ "width": 20,
316
+ "height": 20,
317
+ "material": "fr4"
318
+ },
319
+ {
320
+ "type": "pcb_smtpad",
321
+ "pcb_smtpad_id": "pcb_smtpad_0",
322
+ "pcb_component_id": "pcb_component_0",
323
+ "pcb_port_id": "pcb_port_0",
324
+ "layer": "top",
325
+ "shape": "rect",
326
+ "width": 1.025,
327
+ "height": 1.4,
328
+ "port_hints": ["1", "left"],
329
+ "is_covered_with_solder_mask": false,
330
+ "x": -5.9125,
331
+ "y": 0,
332
+ "subcircuit_id": "subcircuit_source_group_0"
333
+ },
334
+ {
335
+ "type": "pcb_solder_paste",
336
+ "pcb_solder_paste_id": "pcb_solder_paste_0",
337
+ "layer": "top",
338
+ "shape": "rect",
339
+ "width": 0.7174999999999999,
340
+ "height": 0.9799999999999999,
341
+ "x": -5.9125,
342
+ "y": 0,
343
+ "pcb_component_id": "pcb_component_0",
344
+ "pcb_smtpad_id": "pcb_smtpad_0",
345
+ "subcircuit_id": "subcircuit_source_group_0"
346
+ },
347
+ {
348
+ "type": "pcb_smtpad",
349
+ "pcb_smtpad_id": "pcb_smtpad_1",
350
+ "pcb_component_id": "pcb_component_0",
351
+ "pcb_port_id": "pcb_port_1",
352
+ "layer": "top",
353
+ "shape": "rect",
354
+ "width": 1.025,
355
+ "height": 1.4,
356
+ "port_hints": ["2", "right"],
357
+ "is_covered_with_solder_mask": false,
358
+ "x": -4.0875,
359
+ "y": 0,
360
+ "subcircuit_id": "subcircuit_source_group_0"
361
+ },
362
+ {
363
+ "type": "pcb_solder_paste",
364
+ "pcb_solder_paste_id": "pcb_solder_paste_1",
365
+ "layer": "top",
366
+ "shape": "rect",
367
+ "width": 0.7174999999999999,
368
+ "height": 0.9799999999999999,
369
+ "x": -4.0875,
370
+ "y": 0,
371
+ "pcb_component_id": "pcb_component_0",
372
+ "pcb_smtpad_id": "pcb_smtpad_1",
373
+ "subcircuit_id": "subcircuit_source_group_0"
374
+ },
375
+ {
376
+ "type": "pcb_silkscreen_path",
377
+ "pcb_silkscreen_path_id": "pcb_silkscreen_path_0",
378
+ "pcb_component_id": "pcb_component_0",
379
+ "layer": "top",
380
+ "route": [
381
+ {
382
+ "x": -4.0875,
383
+ "y": 1.1
384
+ },
385
+ {
386
+ "x": -6.625,
387
+ "y": 1.1
388
+ },
389
+ {
390
+ "x": -6.625,
391
+ "y": -1.1
392
+ },
393
+ {
394
+ "x": -4.0875,
395
+ "y": -1.1
396
+ }
397
+ ],
398
+ "stroke_width": 0.1,
399
+ "subcircuit_id": "subcircuit_source_group_0"
400
+ },
401
+ {
402
+ "type": "pcb_silkscreen_text",
403
+ "pcb_silkscreen_text_id": "pcb_silkscreen_text_0",
404
+ "anchor_alignment": "center",
405
+ "anchor_position": {
406
+ "x": -5,
407
+ "y": 1.6
408
+ },
409
+ "font": "tscircuit2024",
410
+ "font_size": 0.4,
411
+ "layer": "top",
412
+ "text": "R1",
413
+ "ccw_rotation": 0,
414
+ "pcb_component_id": "pcb_component_0",
415
+ "subcircuit_id": "subcircuit_source_group_0"
416
+ },
417
+ {
418
+ "type": "pcb_smtpad",
419
+ "pcb_smtpad_id": "pcb_smtpad_2",
420
+ "pcb_component_id": "pcb_component_1",
421
+ "pcb_port_id": "pcb_port_2",
422
+ "layer": "bottom",
423
+ "shape": "rect",
424
+ "width": 1.025,
425
+ "height": 1.4,
426
+ "port_hints": ["1", "left"],
427
+ "is_covered_with_solder_mask": false,
428
+ "x": 5.9125,
429
+ "y": 0,
430
+ "subcircuit_id": "subcircuit_source_group_0"
431
+ },
432
+ {
433
+ "type": "pcb_solder_paste",
434
+ "pcb_solder_paste_id": "pcb_solder_paste_2",
435
+ "layer": "bottom",
436
+ "shape": "rect",
437
+ "width": 0.7174999999999999,
438
+ "height": 0.9799999999999999,
439
+ "x": 5.9125,
440
+ "y": 0,
441
+ "pcb_component_id": "pcb_component_1",
442
+ "pcb_smtpad_id": "pcb_smtpad_2",
443
+ "subcircuit_id": "subcircuit_source_group_0"
444
+ },
445
+ {
446
+ "type": "pcb_smtpad",
447
+ "pcb_smtpad_id": "pcb_smtpad_3",
448
+ "pcb_component_id": "pcb_component_1",
449
+ "pcb_port_id": "pcb_port_3",
450
+ "layer": "bottom",
451
+ "shape": "rect",
452
+ "width": 1.025,
453
+ "height": 1.4,
454
+ "port_hints": ["2", "right"],
455
+ "is_covered_with_solder_mask": false,
456
+ "x": 4.0875,
457
+ "y": 0,
458
+ "subcircuit_id": "subcircuit_source_group_0"
459
+ },
460
+ {
461
+ "type": "pcb_solder_paste",
462
+ "pcb_solder_paste_id": "pcb_solder_paste_3",
463
+ "layer": "bottom",
464
+ "shape": "rect",
465
+ "width": 0.7174999999999999,
466
+ "height": 0.9799999999999999,
467
+ "x": 4.0875,
468
+ "y": 0,
469
+ "pcb_component_id": "pcb_component_1",
470
+ "pcb_smtpad_id": "pcb_smtpad_3",
471
+ "subcircuit_id": "subcircuit_source_group_0"
472
+ },
473
+ {
474
+ "type": "pcb_silkscreen_path",
475
+ "pcb_silkscreen_path_id": "pcb_silkscreen_path_1",
476
+ "pcb_component_id": "pcb_component_1",
477
+ "layer": "bottom",
478
+ "route": [
479
+ {
480
+ "x": 4.0875,
481
+ "y": 1.1
482
+ },
483
+ {
484
+ "x": 6.625,
485
+ "y": 1.1
486
+ },
487
+ {
488
+ "x": 6.625,
489
+ "y": -1.1
490
+ },
491
+ {
492
+ "x": 4.0875,
493
+ "y": -1.1
494
+ }
495
+ ],
496
+ "stroke_width": 0.1,
497
+ "subcircuit_id": "subcircuit_source_group_0"
498
+ },
499
+ {
500
+ "type": "pcb_silkscreen_text",
501
+ "pcb_silkscreen_text_id": "pcb_silkscreen_text_1",
502
+ "anchor_alignment": "center",
503
+ "anchor_position": {
504
+ "x": 5,
505
+ "y": 1.6
506
+ },
507
+ "font": "tscircuit2024",
508
+ "font_size": 0.4,
509
+ "layer": "bottom",
510
+ "text": "R2",
511
+ "ccw_rotation": 0,
512
+ "pcb_component_id": "pcb_component_1",
513
+ "subcircuit_id": "subcircuit_source_group_0"
514
+ },
515
+ {
516
+ "type": "pcb_plated_hole",
517
+ "pcb_plated_hole_id": "pcb_plated_hole_0",
518
+ "pcb_component_id": null,
519
+ "outer_diameter": 2.4,
520
+ "hole_diameter": 1.2,
521
+ "shape": "circle",
522
+ "port_hints": ["unnamed_platedhole1"],
523
+ "x": 0,
524
+ "y": 0,
525
+ "layers": ["top", "bottom"],
526
+ "subcircuit_id": "subcircuit_source_group_0"
527
+ },
528
+ {
529
+ "type": "pcb_solder_paste",
530
+ "pcb_solder_paste_id": "pcb_solder_paste_4",
531
+ "layer": "top",
532
+ "shape": "circle",
533
+ "radius": 1.2,
534
+ "x": 0,
535
+ "y": 0,
536
+ "subcircuit_id": "subcircuit_source_group_0"
537
+ },
538
+ {
539
+ "type": "pcb_solder_paste",
540
+ "pcb_solder_paste_id": "pcb_solder_paste_5",
541
+ "layer": "bottom",
542
+ "shape": "circle",
543
+ "radius": 1.2,
544
+ "x": 0,
545
+ "y": 0,
546
+ "subcircuit_id": "subcircuit_source_group_0"
547
+ },
548
+ {
549
+ "type": "pcb_hole",
550
+ "pcb_hole_id": "pcb_hole_0",
551
+ "hole_shape": "circle",
552
+ "hole_diameter": 2,
553
+ "x": 0,
554
+ "y": -4,
555
+ "subcircuit_id": "subcircuit_source_group_0"
556
+ },
557
+ {
558
+ "type": "pcb_port",
559
+ "pcb_port_id": "pcb_port_0",
560
+ "pcb_component_id": "pcb_component_0",
561
+ "layers": ["top"],
562
+ "subcircuit_id": "subcircuit_source_group_0",
563
+ "x": -5.9125,
564
+ "y": 0,
565
+ "source_port_id": "source_port_0"
566
+ },
567
+ {
568
+ "type": "pcb_port",
569
+ "pcb_port_id": "pcb_port_1",
570
+ "pcb_component_id": "pcb_component_0",
571
+ "layers": ["top"],
572
+ "subcircuit_id": "subcircuit_source_group_0",
573
+ "x": -4.0875,
574
+ "y": 0,
575
+ "source_port_id": "source_port_1"
576
+ },
577
+ {
578
+ "type": "pcb_port",
579
+ "pcb_port_id": "pcb_port_2",
580
+ "pcb_component_id": "pcb_component_1",
581
+ "layers": ["bottom"],
582
+ "subcircuit_id": "subcircuit_source_group_0",
583
+ "x": 5.9125,
584
+ "y": 0,
585
+ "source_port_id": "source_port_2"
586
+ },
587
+ {
588
+ "type": "pcb_port",
589
+ "pcb_port_id": "pcb_port_3",
590
+ "pcb_component_id": "pcb_component_1",
591
+ "layers": ["bottom"],
592
+ "subcircuit_id": "subcircuit_source_group_0",
593
+ "x": 4.0875,
594
+ "y": 0,
595
+ "source_port_id": "source_port_3"
596
+ },
597
+ {
598
+ "type": "cad_component",
599
+ "cad_component_id": "cad_component_0",
600
+ "position": {
601
+ "x": -5,
602
+ "y": 0,
603
+ "z": 0.7
604
+ },
605
+ "rotation": {
606
+ "x": 0,
607
+ "y": 0,
608
+ "z": 0
609
+ },
610
+ "pcb_component_id": "pcb_component_0",
611
+ "source_component_id": "source_component_0",
612
+ "footprinter_string": "0805"
613
+ },
614
+ {
615
+ "type": "cad_component",
616
+ "cad_component_id": "cad_component_1",
617
+ "position": {
618
+ "x": 5,
619
+ "y": 0,
620
+ "z": -0.7
621
+ },
622
+ "rotation": {
623
+ "x": 0,
624
+ "y": 180,
625
+ "z": 0
626
+ },
627
+ "pcb_component_id": "pcb_component_1",
628
+ "source_component_id": "source_component_1",
629
+ "footprinter_string": "0805"
630
+ }
631
+ ]