kicadts 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 (188) hide show
  1. package/.cursor/rules/use-bun-instead-of-node-vite-npm-pnpm.mdc +111 -0
  2. package/.vscode/settings.json +16 -0
  3. package/AGENTS.md +30 -0
  4. package/README.md +206 -0
  5. package/biome.json +93 -0
  6. package/bun.lock +48 -0
  7. package/bunfig.toml +5 -0
  8. package/lib/index.ts +1 -0
  9. package/lib/sexpr/base-classes/SxClass.ts +164 -0
  10. package/lib/sexpr/base-classes/SxPrimitiveBoolean.ts +35 -0
  11. package/lib/sexpr/base-classes/SxPrimitiveNumber.ts +26 -0
  12. package/lib/sexpr/base-classes/SxPrimitiveString.ts +26 -0
  13. package/lib/sexpr/classes/At.ts +38 -0
  14. package/lib/sexpr/classes/Bus.ts +83 -0
  15. package/lib/sexpr/classes/BusEntry.ts +142 -0
  16. package/lib/sexpr/classes/Color.ts +29 -0
  17. package/lib/sexpr/classes/Dnp.ts +8 -0
  18. package/lib/sexpr/classes/EmbeddedFonts.ts +70 -0
  19. package/lib/sexpr/classes/ExcludeFromSim.ts +8 -0
  20. package/lib/sexpr/classes/FieldsAutoplaced.ts +8 -0
  21. package/lib/sexpr/classes/Footprint.ts +719 -0
  22. package/lib/sexpr/classes/FootprintAttr.ts +102 -0
  23. package/lib/sexpr/classes/FootprintAutoplaceCost180.ts +9 -0
  24. package/lib/sexpr/classes/FootprintAutoplaceCost90.ts +9 -0
  25. package/lib/sexpr/classes/FootprintClearance.ts +9 -0
  26. package/lib/sexpr/classes/FootprintDescr.ts +44 -0
  27. package/lib/sexpr/classes/FootprintLocked.ts +32 -0
  28. package/lib/sexpr/classes/FootprintModel.ts +145 -0
  29. package/lib/sexpr/classes/FootprintNetTiePadGroups.ts +50 -0
  30. package/lib/sexpr/classes/FootprintPad.ts +705 -0
  31. package/lib/sexpr/classes/FootprintPath.ts +44 -0
  32. package/lib/sexpr/classes/FootprintPlaced.ts +32 -0
  33. package/lib/sexpr/classes/FootprintPrivateLayers.ts +56 -0
  34. package/lib/sexpr/classes/FootprintSheetfile.ts +44 -0
  35. package/lib/sexpr/classes/FootprintSheetname.ts +44 -0
  36. package/lib/sexpr/classes/FootprintSolderMaskMargin.ts +9 -0
  37. package/lib/sexpr/classes/FootprintSolderPasteMargin.ts +9 -0
  38. package/lib/sexpr/classes/FootprintSolderPasteRatio.ts +9 -0
  39. package/lib/sexpr/classes/FootprintTags.ts +44 -0
  40. package/lib/sexpr/classes/FootprintTedit.ts +21 -0
  41. package/lib/sexpr/classes/FootprintThermalGap.ts +9 -0
  42. package/lib/sexpr/classes/FootprintThermalWidth.ts +9 -0
  43. package/lib/sexpr/classes/FootprintZoneConnect.ts +9 -0
  44. package/lib/sexpr/classes/FpArc.ts +289 -0
  45. package/lib/sexpr/classes/FpCircle.ts +293 -0
  46. package/lib/sexpr/classes/FpLine.ts +288 -0
  47. package/lib/sexpr/classes/FpPoly.ts +266 -0
  48. package/lib/sexpr/classes/FpPolyFill.ts +48 -0
  49. package/lib/sexpr/classes/FpPolyLocked.ts +40 -0
  50. package/lib/sexpr/classes/FpRect.ts +293 -0
  51. package/lib/sexpr/classes/FpText.ts +341 -0
  52. package/lib/sexpr/classes/FpTextBox.ts +412 -0
  53. package/lib/sexpr/classes/GrLine.ts +245 -0
  54. package/lib/sexpr/classes/GrLineAngle.ts +32 -0
  55. package/lib/sexpr/classes/GrLineEnd.ts +61 -0
  56. package/lib/sexpr/classes/GrLineLocked.ts +40 -0
  57. package/lib/sexpr/classes/GrLineStart.ts +61 -0
  58. package/lib/sexpr/classes/GrText.ts +202 -0
  59. package/lib/sexpr/classes/Image.ts +256 -0
  60. package/lib/sexpr/classes/InBom.ts +8 -0
  61. package/lib/sexpr/classes/Junction.ts +134 -0
  62. package/lib/sexpr/classes/KicadPcb.ts +313 -0
  63. package/lib/sexpr/classes/KicadSch.ts +303 -0
  64. package/lib/sexpr/classes/KicadSchGenerator.ts +32 -0
  65. package/lib/sexpr/classes/KicadSchGeneratorVersion.ts +30 -0
  66. package/lib/sexpr/classes/KicadSchVersion.ts +22 -0
  67. package/lib/sexpr/classes/Label.ts +136 -0
  68. package/lib/sexpr/classes/Layer.ts +51 -0
  69. package/lib/sexpr/classes/Layers.ts +47 -0
  70. package/lib/sexpr/classes/LibSymbols.ts +61 -0
  71. package/lib/sexpr/classes/NoConnect.ts +73 -0
  72. package/lib/sexpr/classes/OnBoard.ts +8 -0
  73. package/lib/sexpr/classes/PadChamfer.ts +50 -0
  74. package/lib/sexpr/classes/PadChamferRatio.ts +9 -0
  75. package/lib/sexpr/classes/PadClearance.ts +9 -0
  76. package/lib/sexpr/classes/PadDieLength.ts +9 -0
  77. package/lib/sexpr/classes/PadDrill.ts +145 -0
  78. package/lib/sexpr/classes/PadDrillOffset.ts +54 -0
  79. package/lib/sexpr/classes/PadLayers.ts +59 -0
  80. package/lib/sexpr/classes/PadNet.ts +56 -0
  81. package/lib/sexpr/classes/PadOptions.ts +182 -0
  82. package/lib/sexpr/classes/PadPinFunction.ts +9 -0
  83. package/lib/sexpr/classes/PadPinType.ts +9 -0
  84. package/lib/sexpr/classes/PadPrimitiveGrArc.ts +254 -0
  85. package/lib/sexpr/classes/PadPrimitiveGrCircle.ts +279 -0
  86. package/lib/sexpr/classes/PadPrimitiveGrLine.ts +126 -0
  87. package/lib/sexpr/classes/PadPrimitives.ts +289 -0
  88. package/lib/sexpr/classes/PadRectDelta.ts +57 -0
  89. package/lib/sexpr/classes/PadRoundrectRratio.ts +9 -0
  90. package/lib/sexpr/classes/PadSize.ts +54 -0
  91. package/lib/sexpr/classes/PadSolderMaskMargin.ts +9 -0
  92. package/lib/sexpr/classes/PadSolderPasteMargin.ts +9 -0
  93. package/lib/sexpr/classes/PadSolderPasteMarginRatio.ts +9 -0
  94. package/lib/sexpr/classes/PadTeardrops.ts +208 -0
  95. package/lib/sexpr/classes/PadThermalBridgeAngle.ts +9 -0
  96. package/lib/sexpr/classes/PadThermalGap.ts +9 -0
  97. package/lib/sexpr/classes/PadThermalWidth.ts +9 -0
  98. package/lib/sexpr/classes/PadZoneConnect.ts +9 -0
  99. package/lib/sexpr/classes/Paper.ts +119 -0
  100. package/lib/sexpr/classes/PcbGeneral.ts +75 -0
  101. package/lib/sexpr/classes/PcbGeneralLegacyTeardrops.ts +44 -0
  102. package/lib/sexpr/classes/PcbGeneralThickness.ts +9 -0
  103. package/lib/sexpr/classes/PcbGenerator.ts +16 -0
  104. package/lib/sexpr/classes/PcbGeneratorVersion.ts +16 -0
  105. package/lib/sexpr/classes/PcbLayerDefinition.ts +102 -0
  106. package/lib/sexpr/classes/PcbLayers.ts +34 -0
  107. package/lib/sexpr/classes/PcbNet.ts +56 -0
  108. package/lib/sexpr/classes/PcbVersion.ts +9 -0
  109. package/lib/sexpr/classes/Property.ts +246 -0
  110. package/lib/sexpr/classes/PropertyHide.ts +9 -0
  111. package/lib/sexpr/classes/PropertyUnlocked.ts +9 -0
  112. package/lib/sexpr/classes/Pts.ts +65 -0
  113. package/lib/sexpr/classes/RenderCache.ts +221 -0
  114. package/lib/sexpr/classes/SchematicText.ts +141 -0
  115. package/lib/sexpr/classes/Segment.ts +222 -0
  116. package/lib/sexpr/classes/SegmentEnd.ts +59 -0
  117. package/lib/sexpr/classes/SegmentLocked.ts +33 -0
  118. package/lib/sexpr/classes/SegmentNet.ts +62 -0
  119. package/lib/sexpr/classes/SegmentStart.ts +59 -0
  120. package/lib/sexpr/classes/Setup/PcbPlotParams.ts +729 -0
  121. package/lib/sexpr/classes/Setup/PcbPlotParamsBase.ts +9 -0
  122. package/lib/sexpr/classes/Setup/PcbPlotParamsNumericProperties.ts +105 -0
  123. package/lib/sexpr/classes/Setup/PcbPlotParamsStringPropertiesA.ts +104 -0
  124. package/lib/sexpr/classes/Setup/PcbPlotParamsStringPropertiesB.ts +105 -0
  125. package/lib/sexpr/classes/Setup/Setup.ts +573 -0
  126. package/lib/sexpr/classes/Setup/SetupPropertyTypes.ts +119 -0
  127. package/lib/sexpr/classes/Setup/Stackup.ts +140 -0
  128. package/lib/sexpr/classes/Setup/StackupLayer.ts +233 -0
  129. package/lib/sexpr/classes/Setup/StackupLayerProperties.ts +78 -0
  130. package/lib/sexpr/classes/Setup/StackupProperties.ts +41 -0
  131. package/lib/sexpr/classes/Setup/base.ts +167 -0
  132. package/lib/sexpr/classes/Setup/index.ts +14 -0
  133. package/lib/sexpr/classes/Setup/setupMultiValueProperties.ts +54 -0
  134. package/lib/sexpr/classes/Setup/setupNumericProperties.ts +151 -0
  135. package/lib/sexpr/classes/Setup/setupPropertyHandlers.ts +90 -0
  136. package/lib/sexpr/classes/Setup/setupStringProperties.ts +75 -0
  137. package/lib/sexpr/classes/Sheet.ts +205 -0
  138. package/lib/sexpr/classes/SheetFill.ts +44 -0
  139. package/lib/sexpr/classes/SheetInstances.ts +168 -0
  140. package/lib/sexpr/classes/SheetInstancesRoot.ts +165 -0
  141. package/lib/sexpr/classes/SheetPin.ts +122 -0
  142. package/lib/sexpr/classes/SheetProperty.ts +115 -0
  143. package/lib/sexpr/classes/SheetSize.ts +44 -0
  144. package/lib/sexpr/classes/Stroke.ts +58 -0
  145. package/lib/sexpr/classes/StrokeType.ts +34 -0
  146. package/lib/sexpr/classes/Symbol.ts +1541 -0
  147. package/lib/sexpr/classes/TextEffects.ts +444 -0
  148. package/lib/sexpr/classes/TitleBlock.ts +352 -0
  149. package/lib/sexpr/classes/Unit.ts +28 -0
  150. package/lib/sexpr/classes/Uuid.ts +8 -0
  151. package/lib/sexpr/classes/Via.ts +328 -0
  152. package/lib/sexpr/classes/ViaNet.ts +59 -0
  153. package/lib/sexpr/classes/Width.ts +8 -0
  154. package/lib/sexpr/classes/Wire.ts +91 -0
  155. package/lib/sexpr/classes/Xy.ts +35 -0
  156. package/lib/sexpr/classes/Zone.ts +41 -0
  157. package/lib/sexpr/index.ts +130 -0
  158. package/lib/sexpr/parseKicadSexpr.ts +5 -0
  159. package/lib/sexpr/parseToPrimitiveSExpr.ts +240 -0
  160. package/lib/sexpr/utils/indentLines.ts +3 -0
  161. package/lib/sexpr/utils/parseYesNo.ts +12 -0
  162. package/lib/sexpr/utils/quoteSExprString.ts +8 -0
  163. package/lib/sexpr/utils/strokeFromArgs.ts +19 -0
  164. package/lib/sexpr/utils/toNumberValue.ts +13 -0
  165. package/lib/sexpr/utils/toStringValue.ts +10 -0
  166. package/package.json +26 -0
  167. package/scripts/download-references.ts +66 -0
  168. package/tests/fixtures/expectEqualPrimitiveSExpr.ts +200 -0
  169. package/tests/sexpr/KicadPcbDemos.test.ts +48 -0
  170. package/tests/sexpr/KicadSchDemos.test.ts +49 -0
  171. package/tests/sexpr/classes/Footprint.test.ts +277 -0
  172. package/tests/sexpr/classes/FootprintPad.test.ts +71 -0
  173. package/tests/sexpr/classes/FpArc.test.ts +45 -0
  174. package/tests/sexpr/classes/FpCircle.test.ts +39 -0
  175. package/tests/sexpr/classes/FpPoly.test.ts +43 -0
  176. package/tests/sexpr/classes/FpRect.test.ts +40 -0
  177. package/tests/sexpr/classes/FpTextBox.test.ts +84 -0
  178. package/tests/sexpr/classes/Image.test.ts +50 -0
  179. package/tests/sexpr/classes/KicadSch.test.ts +97 -0
  180. package/tests/sexpr/classes/Paper.test.ts +30 -0
  181. package/tests/sexpr/classes/Property.test.ts +48 -0
  182. package/tests/sexpr/classes/Setup.test.ts +189 -0
  183. package/tests/sexpr/classes/Sheet.test.ts +107 -0
  184. package/tests/sexpr/classes/Stroke.test.ts +15 -0
  185. package/tests/sexpr/classes/Symbol.test.ts +96 -0
  186. package/tests/sexpr/classes/TextEffects.test.ts +56 -0
  187. package/tests/sexpr/classes/TitleBlock.test.ts +40 -0
  188. package/tsconfig.json +35 -0
@@ -0,0 +1,573 @@
1
+ import { SxClass } from "../../base-classes/SxClass"
2
+ import type { PrimitiveSExpr } from "../../parseToPrimitiveSExpr"
3
+
4
+ import { PcbPlotParams } from "./PcbPlotParams"
5
+ import {
6
+ SetupAllowSoldermaskBridgesInFootprints,
7
+ SetupTenting,
8
+ SetupUviasAllowed,
9
+ SetupVisibleElements,
10
+ SetupZone45Only,
11
+ } from "./setupStringProperties"
12
+ import {
13
+ SetupAuxAxisOrigin,
14
+ SetupGridOrigin,
15
+ SetupModTextSize,
16
+ SetupPadSize,
17
+ SetupPadToPasteClearanceValues,
18
+ SetupPcbTextSize,
19
+ SetupTraceWidth,
20
+ } from "./setupMultiValueProperties"
21
+ import {
22
+ SetupEdgeWidth,
23
+ SetupLastTraceWidth,
24
+ SetupModEdgeWidth,
25
+ SetupModTextWidth,
26
+ SetupPadDrill,
27
+ SetupPadToMaskClearance,
28
+ SetupPadToPasteClearance,
29
+ SetupPadToPasteClearanceRatio,
30
+ SetupPcbTextWidth,
31
+ SetupSegmentWidth,
32
+ SetupSolderMaskMinWidth,
33
+ SetupTraceClearance,
34
+ SetupTraceMin,
35
+ SetupUviaDrill,
36
+ SetupUviaMinDrill,
37
+ SetupUviaMinSize,
38
+ SetupUviaSize,
39
+ SetupViaDrill,
40
+ SetupViaMinDrill,
41
+ SetupViaMinSize,
42
+ SetupViaSize,
43
+ SetupZoneClearance,
44
+ } from "./setupNumericProperties"
45
+ import type { SetupPropertyValues } from "./SetupPropertyTypes"
46
+ import { Stackup } from "./Stackup"
47
+
48
+ const TOKEN_TO_KEY: Record<string, SetupPropertyKey> = {
49
+ stackup: "stackup",
50
+ pcbplotparams: "pcbPlotParams",
51
+ pad_to_mask_clearance: "padToMaskClearance",
52
+ solder_mask_min_width: "solderMaskMinWidth",
53
+ pad_to_paste_clearance: "padToPasteClearance",
54
+ pad_to_paste_clearance_ratio: "padToPasteClearanceRatio",
55
+ last_trace_width: "lastTraceWidth",
56
+ trace_clearance: "traceClearance",
57
+ zone_clearance: "zoneClearance",
58
+ zone_45_only: "zone45Only",
59
+ trace_min: "traceMin",
60
+ segment_width: "segmentWidth",
61
+ edge_width: "edgeWidth",
62
+ via_size: "viaSize",
63
+ via_drill: "viaDrill",
64
+ via_min_size: "viaMinSize",
65
+ via_min_drill: "viaMinDrill",
66
+ uvias_allowed: "uviasAllowed",
67
+ uvia_size: "uviaSize",
68
+ uvia_drill: "uviaDrill",
69
+ uvia_min_size: "uviaMinSize",
70
+ uvia_min_drill: "uviaMinDrill",
71
+ pcb_text_width: "pcbTextWidth",
72
+ pcb_text_size: "pcbTextSize",
73
+ mod_edge_width: "modEdgeWidth",
74
+ mod_text_size: "modTextSize",
75
+ mod_text_width: "modTextWidth",
76
+ pad_size: "padSize",
77
+ pad_drill: "padDrill",
78
+ allow_soldermask_bridges_in_footprints: "allowSoldermaskBridgesInFootprints",
79
+ tenting: "tenting",
80
+ aux_axis_origin: "auxAxisOrigin",
81
+ grid_origin: "gridOrigin",
82
+ visible_elements: "visibleElements",
83
+ pad_to_paste_clearance_values: "padToPasteClearanceValues",
84
+ trace_width: "traceWidth",
85
+ }
86
+
87
+ type SetupPropertyKey = keyof SetupPropertyValues
88
+
89
+ const SETUP_CHILD_ORDER: SetupPropertyKey[] = [
90
+ "stackup",
91
+ "padToMaskClearance",
92
+ "solderMaskMinWidth",
93
+ "padToPasteClearance",
94
+ "padToPasteClearanceRatio",
95
+ "lastTraceWidth",
96
+ "traceClearance",
97
+ "zoneClearance",
98
+ "zone45Only",
99
+ "traceMin",
100
+ "segmentWidth",
101
+ "edgeWidth",
102
+ "viaSize",
103
+ "viaDrill",
104
+ "viaMinSize",
105
+ "viaMinDrill",
106
+ "uviaSize",
107
+ "uviaDrill",
108
+ "uviasAllowed",
109
+ "uviaMinSize",
110
+ "uviaMinDrill",
111
+ "pcbTextWidth",
112
+ "pcbTextSize",
113
+ "modEdgeWidth",
114
+ "modTextSize",
115
+ "modTextWidth",
116
+ "padSize",
117
+ "padDrill",
118
+ "allowSoldermaskBridgesInFootprints",
119
+ "tenting",
120
+ "auxAxisOrigin",
121
+ "gridOrigin",
122
+ "visibleElements",
123
+ "padToPasteClearanceValues",
124
+ "traceWidth",
125
+ "pcbPlotParams",
126
+ ]
127
+
128
+ type Coordinate = { x: number; y: number }
129
+
130
+ export class Setup extends SxClass {
131
+ static override token = "setup"
132
+ token = "setup"
133
+
134
+ private _properties: Partial<Record<SetupPropertyKey, SxClass>> = {}
135
+
136
+ static override fromSexprPrimitives(
137
+ primitiveSexprs: PrimitiveSExpr[],
138
+ ): Setup {
139
+ const setup = new Setup()
140
+ const { propertyMap } = SxClass.parsePrimitivesToClassProperties(
141
+ primitiveSexprs,
142
+ this.token,
143
+ )
144
+
145
+ for (const [token, instance] of Object.entries(propertyMap)) {
146
+ const key = TOKEN_TO_KEY[token]
147
+ if (!key) {
148
+ throw new Error(`Unsupported setup property token: ${token}`)
149
+ }
150
+ setup._properties[key] = instance
151
+ }
152
+
153
+ return setup
154
+ }
155
+
156
+ override getChildren(): SxClass[] {
157
+ const children: SxClass[] = []
158
+ for (const key of SETUP_CHILD_ORDER) {
159
+ const child = this._properties[key]
160
+ if (child) {
161
+ children.push(child)
162
+ }
163
+ }
164
+ return children
165
+ }
166
+
167
+ private setProperty(
168
+ key: SetupPropertyKey,
169
+ instance: SxClass | undefined,
170
+ ) {
171
+ if (instance) {
172
+ this._properties[key] = instance
173
+ return
174
+ }
175
+ delete this._properties[key]
176
+ }
177
+
178
+ private setNumberProperty<T extends SxClass>(
179
+ key: SetupPropertyKey,
180
+ value: number | undefined,
181
+ ClassRef: new (value: number) => T,
182
+ ) {
183
+ if (value === undefined) {
184
+ delete this._properties[key]
185
+ return
186
+ }
187
+ this._properties[key] = new ClassRef(value)
188
+ }
189
+
190
+ private getPropertyInstance<T extends SxClass>(
191
+ key: SetupPropertyKey,
192
+ ClassRef: new (...args: any[]) => T,
193
+ ): T | undefined {
194
+ const value = this._properties[key]
195
+ return value instanceof ClassRef ? value : undefined
196
+ }
197
+
198
+ get stackup(): Stackup | undefined {
199
+ return this.getPropertyInstance("stackup", Stackup)
200
+ }
201
+
202
+ set stackup(value: Stackup | undefined) {
203
+ if (value !== undefined && !(value instanceof Stackup)) {
204
+ throw new Error("stackup must be a Stackup instance")
205
+ }
206
+ this.setProperty("stackup", value)
207
+ }
208
+
209
+ get pcbPlotParams(): PcbPlotParams | undefined {
210
+ return this.getPropertyInstance("pcbPlotParams", PcbPlotParams)
211
+ }
212
+
213
+ set pcbPlotParams(value: PcbPlotParams | undefined) {
214
+ if (value !== undefined && !(value instanceof PcbPlotParams)) {
215
+ throw new Error("pcbPlotParams must be a PcbPlotParams instance")
216
+ }
217
+ this.setProperty("pcbPlotParams", value)
218
+ }
219
+
220
+ get padToMaskClearance(): number | undefined {
221
+ return this.getPropertyInstance(
222
+ "padToMaskClearance",
223
+ SetupPadToMaskClearance,
224
+ )?.value
225
+ }
226
+
227
+ set padToMaskClearance(value: number | undefined) {
228
+ this.setNumberProperty("padToMaskClearance", value, SetupPadToMaskClearance)
229
+ }
230
+
231
+ get solderMaskMinWidth(): number | undefined {
232
+ return this.getPropertyInstance(
233
+ "solderMaskMinWidth",
234
+ SetupSolderMaskMinWidth,
235
+ )?.value
236
+ }
237
+
238
+ set solderMaskMinWidth(value: number | undefined) {
239
+ this.setNumberProperty("solderMaskMinWidth", value, SetupSolderMaskMinWidth)
240
+ }
241
+
242
+ get padToPasteClearance(): number | undefined {
243
+ return this.getPropertyInstance(
244
+ "padToPasteClearance",
245
+ SetupPadToPasteClearance,
246
+ )?.value
247
+ }
248
+
249
+ set padToPasteClearance(value: number | undefined) {
250
+ this.setNumberProperty("padToPasteClearance", value, SetupPadToPasteClearance)
251
+ }
252
+
253
+ get padToPasteClearanceRatio(): number | undefined {
254
+ return this.getPropertyInstance(
255
+ "padToPasteClearanceRatio",
256
+ SetupPadToPasteClearanceRatio,
257
+ )?.value
258
+ }
259
+
260
+ set padToPasteClearanceRatio(value: number | undefined) {
261
+ this.setNumberProperty(
262
+ "padToPasteClearanceRatio",
263
+ value,
264
+ SetupPadToPasteClearanceRatio,
265
+ )
266
+ }
267
+
268
+ get lastTraceWidth(): number | undefined {
269
+ return this.getPropertyInstance(
270
+ "lastTraceWidth",
271
+ SetupLastTraceWidth,
272
+ )?.value
273
+ }
274
+
275
+ set lastTraceWidth(value: number | undefined) {
276
+ this.setNumberProperty("lastTraceWidth", value, SetupLastTraceWidth)
277
+ }
278
+
279
+ get traceClearance(): number | undefined {
280
+ return this.getPropertyInstance("traceClearance", SetupTraceClearance)?.value
281
+ }
282
+
283
+ set traceClearance(value: number | undefined) {
284
+ this.setNumberProperty("traceClearance", value, SetupTraceClearance)
285
+ }
286
+
287
+ get zoneClearance(): number | undefined {
288
+ return this.getPropertyInstance("zoneClearance", SetupZoneClearance)?.value
289
+ }
290
+
291
+ set zoneClearance(value: number | undefined) {
292
+ this.setNumberProperty("zoneClearance", value, SetupZoneClearance)
293
+ }
294
+
295
+ get zone45Only(): string | undefined {
296
+ return this.getPropertyInstance("zone45Only", SetupZone45Only)?.value
297
+ }
298
+
299
+ set zone45Only(value: string | undefined) {
300
+ this.setProperty(
301
+ "zone45Only",
302
+ value === undefined ? undefined : new SetupZone45Only(value),
303
+ )
304
+ }
305
+
306
+ get traceMin(): number | undefined {
307
+ return this.getPropertyInstance("traceMin", SetupTraceMin)?.value
308
+ }
309
+
310
+ set traceMin(value: number | undefined) {
311
+ this.setNumberProperty("traceMin", value, SetupTraceMin)
312
+ }
313
+
314
+ get segmentWidth(): number | undefined {
315
+ return this.getPropertyInstance("segmentWidth", SetupSegmentWidth)?.value
316
+ }
317
+
318
+ set segmentWidth(value: number | undefined) {
319
+ this.setNumberProperty("segmentWidth", value, SetupSegmentWidth)
320
+ }
321
+
322
+ get edgeWidth(): number | undefined {
323
+ return this.getPropertyInstance("edgeWidth", SetupEdgeWidth)?.value
324
+ }
325
+
326
+ set edgeWidth(value: number | undefined) {
327
+ this.setNumberProperty("edgeWidth", value, SetupEdgeWidth)
328
+ }
329
+
330
+ get viaSize(): number | undefined {
331
+ return this.getPropertyInstance("viaSize", SetupViaSize)?.value
332
+ }
333
+
334
+ set viaSize(value: number | undefined) {
335
+ this.setNumberProperty("viaSize", value, SetupViaSize)
336
+ }
337
+
338
+ get viaDrill(): number | undefined {
339
+ return this.getPropertyInstance("viaDrill", SetupViaDrill)?.value
340
+ }
341
+
342
+ set viaDrill(value: number | undefined) {
343
+ this.setNumberProperty("viaDrill", value, SetupViaDrill)
344
+ }
345
+
346
+ get viaMinSize(): number | undefined {
347
+ return this.getPropertyInstance("viaMinSize", SetupViaMinSize)?.value
348
+ }
349
+
350
+ set viaMinSize(value: number | undefined) {
351
+ this.setNumberProperty("viaMinSize", value, SetupViaMinSize)
352
+ }
353
+
354
+ get viaMinDrill(): number | undefined {
355
+ return this.getPropertyInstance("viaMinDrill", SetupViaMinDrill)?.value
356
+ }
357
+
358
+ set viaMinDrill(value: number | undefined) {
359
+ this.setNumberProperty("viaMinDrill", value, SetupViaMinDrill)
360
+ }
361
+
362
+ get uviasAllowed(): string | undefined {
363
+ return this.getPropertyInstance("uviasAllowed", SetupUviasAllowed)?.value
364
+ }
365
+
366
+ set uviasAllowed(value: string | undefined) {
367
+ this.setProperty(
368
+ "uviasAllowed",
369
+ value === undefined ? undefined : new SetupUviasAllowed(value),
370
+ )
371
+ }
372
+
373
+ get uviaSize(): number | undefined {
374
+ return this.getPropertyInstance("uviaSize", SetupUviaSize)?.value
375
+ }
376
+
377
+ set uviaSize(value: number | undefined) {
378
+ this.setNumberProperty("uviaSize", value, SetupUviaSize)
379
+ }
380
+
381
+ get uviaDrill(): number | undefined {
382
+ return this.getPropertyInstance("uviaDrill", SetupUviaDrill)?.value
383
+ }
384
+
385
+ set uviaDrill(value: number | undefined) {
386
+ this.setNumberProperty("uviaDrill", value, SetupUviaDrill)
387
+ }
388
+
389
+ get uviaMinSize(): number | undefined {
390
+ return this.getPropertyInstance("uviaMinSize", SetupUviaMinSize)?.value
391
+ }
392
+
393
+ set uviaMinSize(value: number | undefined) {
394
+ this.setNumberProperty("uviaMinSize", value, SetupUviaMinSize)
395
+ }
396
+
397
+ get uviaMinDrill(): number | undefined {
398
+ return this.getPropertyInstance("uviaMinDrill", SetupUviaMinDrill)?.value
399
+ }
400
+
401
+ set uviaMinDrill(value: number | undefined) {
402
+ this.setNumberProperty("uviaMinDrill", value, SetupUviaMinDrill)
403
+ }
404
+
405
+ get pcbTextWidth(): number | undefined {
406
+ return this.getPropertyInstance("pcbTextWidth", SetupPcbTextWidth)?.value
407
+ }
408
+
409
+ set pcbTextWidth(value: number | undefined) {
410
+ this.setNumberProperty("pcbTextWidth", value, SetupPcbTextWidth)
411
+ }
412
+
413
+ get pcbTextSize(): number[] | undefined {
414
+ return this.getPropertyInstance("pcbTextSize", SetupPcbTextSize)?.values
415
+ }
416
+
417
+ set pcbTextSize(values: number[] | undefined) {
418
+ if (values === undefined) {
419
+ delete this._properties.pcbTextSize
420
+ return
421
+ }
422
+ this.setProperty("pcbTextSize", new SetupPcbTextSize(values))
423
+ }
424
+
425
+ get modEdgeWidth(): number | undefined {
426
+ return this.getPropertyInstance("modEdgeWidth", SetupModEdgeWidth)?.value
427
+ }
428
+
429
+ set modEdgeWidth(value: number | undefined) {
430
+ this.setNumberProperty("modEdgeWidth", value, SetupModEdgeWidth)
431
+ }
432
+
433
+ get modTextSize(): number[] | undefined {
434
+ return this.getPropertyInstance("modTextSize", SetupModTextSize)?.values
435
+ }
436
+
437
+ set modTextSize(values: number[] | undefined) {
438
+ if (values === undefined) {
439
+ delete this._properties.modTextSize
440
+ return
441
+ }
442
+ this.setProperty("modTextSize", new SetupModTextSize(values))
443
+ }
444
+
445
+ get modTextWidth(): number | undefined {
446
+ return this.getPropertyInstance("modTextWidth", SetupModTextWidth)?.value
447
+ }
448
+
449
+ set modTextWidth(value: number | undefined) {
450
+ this.setNumberProperty("modTextWidth", value, SetupModTextWidth)
451
+ }
452
+
453
+ get padSize(): number[] | undefined {
454
+ return this.getPropertyInstance("padSize", SetupPadSize)?.values
455
+ }
456
+
457
+ set padSize(values: number[] | undefined) {
458
+ if (values === undefined) {
459
+ delete this._properties.padSize
460
+ return
461
+ }
462
+ this.setProperty("padSize", new SetupPadSize(values))
463
+ }
464
+
465
+ get padDrill(): number | undefined {
466
+ return this.getPropertyInstance("padDrill", SetupPadDrill)?.value
467
+ }
468
+
469
+ set padDrill(value: number | undefined) {
470
+ this.setNumberProperty("padDrill", value, SetupPadDrill)
471
+ }
472
+
473
+ get allowSoldermaskBridgesInFootprints(): string | undefined {
474
+ return this.getPropertyInstance(
475
+ "allowSoldermaskBridgesInFootprints",
476
+ SetupAllowSoldermaskBridgesInFootprints,
477
+ )?.value
478
+ }
479
+
480
+ set allowSoldermaskBridgesInFootprints(value: string | undefined) {
481
+ this.setProperty(
482
+ "allowSoldermaskBridgesInFootprints",
483
+ value === undefined
484
+ ? undefined
485
+ : new SetupAllowSoldermaskBridgesInFootprints(value),
486
+ )
487
+ }
488
+
489
+ get tenting(): string[] | undefined {
490
+ return this.getPropertyInstance("tenting", SetupTenting)?.sides
491
+ }
492
+
493
+ set tenting(sides: string[] | undefined) {
494
+ if (sides === undefined) {
495
+ delete this._properties.tenting
496
+ return
497
+ }
498
+ this.setProperty("tenting", new SetupTenting(sides))
499
+ }
500
+
501
+ get auxAxisOrigin(): Coordinate | undefined {
502
+ const origin = this.getPropertyInstance("auxAxisOrigin", SetupAuxAxisOrigin)
503
+ if (!origin) return undefined
504
+ return { x: origin.x, y: origin.y }
505
+ }
506
+
507
+ set auxAxisOrigin(origin: Coordinate | undefined) {
508
+ if (!origin) {
509
+ delete this._properties.auxAxisOrigin
510
+ return
511
+ }
512
+ this.setProperty(
513
+ "auxAxisOrigin",
514
+ new SetupAuxAxisOrigin(origin.x, origin.y),
515
+ )
516
+ }
517
+
518
+ get gridOrigin(): Coordinate | undefined {
519
+ const origin = this.getPropertyInstance("gridOrigin", SetupGridOrigin)
520
+ if (!origin) return undefined
521
+ return { x: origin.x, y: origin.y }
522
+ }
523
+
524
+ set gridOrigin(origin: Coordinate | undefined) {
525
+ if (!origin) {
526
+ delete this._properties.gridOrigin
527
+ return
528
+ }
529
+ this.setProperty("gridOrigin", new SetupGridOrigin(origin.x, origin.y))
530
+ }
531
+
532
+ get visibleElements(): string | undefined {
533
+ return this.getPropertyInstance("visibleElements", SetupVisibleElements)?.value
534
+ }
535
+
536
+ set visibleElements(value: string | undefined) {
537
+ this.setProperty(
538
+ "visibleElements",
539
+ value === undefined ? undefined : new SetupVisibleElements(value),
540
+ )
541
+ }
542
+
543
+ get padToPasteClearanceValues(): number[] | undefined {
544
+ return this.getPropertyInstance(
545
+ "padToPasteClearanceValues",
546
+ SetupPadToPasteClearanceValues,
547
+ )?.values
548
+ }
549
+
550
+ set padToPasteClearanceValues(values: number[] | undefined) {
551
+ if (values === undefined) {
552
+ delete this._properties.padToPasteClearanceValues
553
+ return
554
+ }
555
+ this.setProperty(
556
+ "padToPasteClearanceValues",
557
+ new SetupPadToPasteClearanceValues(values),
558
+ )
559
+ }
560
+
561
+ get traceWidth(): number[] | undefined {
562
+ return this.getPropertyInstance("traceWidth", SetupTraceWidth)?.values
563
+ }
564
+
565
+ set traceWidth(values: number[] | undefined) {
566
+ if (values === undefined) {
567
+ delete this._properties.traceWidth
568
+ return
569
+ }
570
+ this.setProperty("traceWidth", new SetupTraceWidth(values))
571
+ }
572
+ }
573
+ SxClass.register(Setup)
@@ -0,0 +1,119 @@
1
+ import { PcbPlotParams } from "./PcbPlotParams"
2
+ import { Stackup } from "./Stackup"
3
+ import {
4
+ SetupAuxAxisOrigin,
5
+ SetupGridOrigin,
6
+ SetupModTextSize,
7
+ SetupPadSize,
8
+ SetupPadToPasteClearanceValues,
9
+ SetupPcbTextSize,
10
+ SetupTraceWidth,
11
+ } from "./setupMultiValueProperties"
12
+ import {
13
+ SetupAllowSoldermaskBridgesInFootprints,
14
+ SetupTenting,
15
+ SetupUviasAllowed,
16
+ SetupVisibleElements,
17
+ SetupZone45Only,
18
+ } from "./setupStringProperties"
19
+ import {
20
+ SetupEdgeWidth,
21
+ SetupLastTraceWidth,
22
+ SetupModEdgeWidth,
23
+ SetupModTextWidth,
24
+ SetupPadDrill,
25
+ SetupPadToMaskClearance,
26
+ SetupPadToPasteClearance,
27
+ SetupPadToPasteClearanceRatio,
28
+ SetupPcbTextWidth,
29
+ SetupSegmentWidth,
30
+ SetupSolderMaskMinWidth,
31
+ SetupTraceClearance,
32
+ SetupTraceMin,
33
+ SetupUviaDrill,
34
+ SetupUviaMinDrill,
35
+ SetupUviaMinSize,
36
+ SetupUviaSize,
37
+ SetupViaDrill,
38
+ SetupViaMinDrill,
39
+ SetupViaMinSize,
40
+ SetupViaSize,
41
+ SetupZoneClearance,
42
+ } from "./setupNumericProperties"
43
+
44
+ export interface SetupPropertyValues {
45
+ stackup?: Stackup
46
+ pcbPlotParams?: PcbPlotParams
47
+ padToMaskClearance?: SetupPadToMaskClearance
48
+ solderMaskMinWidth?: SetupSolderMaskMinWidth
49
+ padToPasteClearance?: SetupPadToPasteClearance
50
+ padToPasteClearanceRatio?: SetupPadToPasteClearanceRatio
51
+ lastTraceWidth?: SetupLastTraceWidth
52
+ traceClearance?: SetupTraceClearance
53
+ zoneClearance?: SetupZoneClearance
54
+ zone45Only?: SetupZone45Only
55
+ traceMin?: SetupTraceMin
56
+ segmentWidth?: SetupSegmentWidth
57
+ edgeWidth?: SetupEdgeWidth
58
+ viaSize?: SetupViaSize
59
+ viaDrill?: SetupViaDrill
60
+ viaMinSize?: SetupViaMinSize
61
+ viaMinDrill?: SetupViaMinDrill
62
+ uviasAllowed?: SetupUviasAllowed
63
+ uviaSize?: SetupUviaSize
64
+ uviaDrill?: SetupUviaDrill
65
+ uviaMinSize?: SetupUviaMinSize
66
+ uviaMinDrill?: SetupUviaMinDrill
67
+ pcbTextWidth?: SetupPcbTextWidth
68
+ pcbTextSize?: SetupPcbTextSize
69
+ modEdgeWidth?: SetupModEdgeWidth
70
+ modTextSize?: SetupModTextSize
71
+ modTextWidth?: SetupModTextWidth
72
+ padSize?: SetupPadSize
73
+ padDrill?: SetupPadDrill
74
+ allowSoldermaskBridgesInFootprints?: SetupAllowSoldermaskBridgesInFootprints
75
+ tenting?: SetupTenting
76
+ auxAxisOrigin?: SetupAuxAxisOrigin
77
+ gridOrigin?: SetupGridOrigin
78
+ visibleElements?: SetupVisibleElements
79
+ padToPasteClearanceValues?: SetupPadToPasteClearanceValues
80
+ traceWidth?: SetupTraceWidth
81
+ }
82
+
83
+ export type SetupProperty =
84
+ | Stackup
85
+ | PcbPlotParams
86
+ | SetupPadToMaskClearance
87
+ | SetupSolderMaskMinWidth
88
+ | SetupPadToPasteClearance
89
+ | SetupPadToPasteClearanceRatio
90
+ | SetupLastTraceWidth
91
+ | SetupTraceClearance
92
+ | SetupZoneClearance
93
+ | SetupZone45Only
94
+ | SetupTraceMin
95
+ | SetupSegmentWidth
96
+ | SetupEdgeWidth
97
+ | SetupViaSize
98
+ | SetupViaDrill
99
+ | SetupViaMinSize
100
+ | SetupViaMinDrill
101
+ | SetupUviasAllowed
102
+ | SetupUviaSize
103
+ | SetupUviaDrill
104
+ | SetupUviaMinSize
105
+ | SetupUviaMinDrill
106
+ | SetupPcbTextWidth
107
+ | SetupPcbTextSize
108
+ | SetupModEdgeWidth
109
+ | SetupModTextSize
110
+ | SetupModTextWidth
111
+ | SetupPadSize
112
+ | SetupPadDrill
113
+ | SetupAllowSoldermaskBridgesInFootprints
114
+ | SetupTenting
115
+ | SetupAuxAxisOrigin
116
+ | SetupGridOrigin
117
+ | SetupVisibleElements
118
+ | SetupPadToPasteClearanceValues
119
+ | SetupTraceWidth