altium-toolkit 0.1.22 → 1.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.
- package/README.md +4 -3
- package/docs/api.md +47 -8
- package/docs/model-format.md +30 -6
- package/package.json +2 -1
- package/spec/library-scope.md +2 -1
- package/src/core/altium/AltiumParser.mjs +17 -4
- package/src/core/circuit-json/CircuitJsonModelAdapter.mjs +826 -0
- package/src/core/circuit-json/CircuitJsonModelAdapterPrimitives.mjs +354 -0
- package/src/core/circuit-json/CircuitJsonModelSchema.mjs +83 -0
- package/src/core/netlist-query/CircuitTraversal.mjs +325 -0
- package/src/core/netlist-query/ComponentGrouping.mjs +355 -0
- package/src/core/netlist-query/LoadedDesignNetlistService.mjs +732 -0
- package/src/core/netlist-query/QueryNetlistBuilder.mjs +180 -0
- package/src/core/netlist-query/RegexPattern.mjs +89 -0
- package/src/netlist-query.mjs +12 -0
- package/src/parser.mjs +2 -0
- package/src/ui/PcbScene3dBoardOutlineRefiner.mjs +402 -0
- package/src/ui/PcbScene3dBuilder.mjs +16 -5
- package/src/ui/PcbScene3dDrillCutoutBuilder.mjs +26 -15
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
// SPDX-License-Identifier: GPL-3.0-or-later
|
|
4
4
|
|
|
5
5
|
import { PcbEdgeFacingGlyphNormalizer } from './PcbEdgeFacingGlyphNormalizer.mjs'
|
|
6
|
+
import { PcbScene3dBoardOutlineRefiner } from './PcbScene3dBoardOutlineRefiner.mjs'
|
|
6
7
|
import { PcbScene3dDrillCutoutBuilder } from './PcbScene3dDrillCutoutBuilder.mjs'
|
|
7
8
|
import { PcbFootprintPrimitiveSelector } from './PcbFootprintPrimitiveSelector.mjs'
|
|
8
9
|
import { PcbScene3dPackages } from './PcbScene3dPackages.mjs'
|
|
@@ -99,7 +100,7 @@ export class PcbScene3dBuilder {
|
|
|
99
100
|
appearance3d
|
|
100
101
|
)
|
|
101
102
|
|
|
102
|
-
|
|
103
|
+
const sceneDescription = {
|
|
103
104
|
sourceFormat: 'altium',
|
|
104
105
|
board,
|
|
105
106
|
components: components.map((component) =>
|
|
@@ -139,6 +140,11 @@ export class PcbScene3dBuilder {
|
|
|
139
140
|
}
|
|
140
141
|
}
|
|
141
142
|
}
|
|
143
|
+
|
|
144
|
+
return PcbScene3dBoardOutlineRefiner.refine(
|
|
145
|
+
sceneDescription,
|
|
146
|
+
documentModel
|
|
147
|
+
)
|
|
142
148
|
}
|
|
143
149
|
|
|
144
150
|
/**
|
|
@@ -729,6 +735,11 @@ export class PcbScene3dBuilder {
|
|
|
729
735
|
boardOutline
|
|
730
736
|
)
|
|
731
737
|
|
|
738
|
+
const drillCutouts = PcbScene3dDrillCutoutBuilder.buildCutouts(
|
|
739
|
+
pads,
|
|
740
|
+
vias
|
|
741
|
+
)
|
|
742
|
+
|
|
732
743
|
return {
|
|
733
744
|
...normalized,
|
|
734
745
|
denseOverlayArtwork,
|
|
@@ -743,11 +754,11 @@ export class PcbScene3dBuilder {
|
|
|
743
754
|
side
|
|
744
755
|
),
|
|
745
756
|
tracks: normalized.tracks,
|
|
746
|
-
fills: PcbScene3dDrillCutoutBuilder.
|
|
757
|
+
fills: PcbScene3dDrillCutoutBuilder.clipFillsWithCutouts(
|
|
747
758
|
fillsWithRegions,
|
|
748
|
-
|
|
749
|
-
|
|
750
|
-
)
|
|
759
|
+
drillCutouts
|
|
760
|
+
),
|
|
761
|
+
drillCutouts: drillCutouts.map((cutout) => cutout.points)
|
|
751
762
|
}
|
|
752
763
|
}
|
|
753
764
|
|
|
@@ -10,6 +10,19 @@ export class PcbScene3dDrillCutoutBuilder {
|
|
|
10
10
|
static #SLOT_CAP_SEGMENTS = 12
|
|
11
11
|
static #EPSILON = 0.001
|
|
12
12
|
|
|
13
|
+
/**
|
|
14
|
+
* Builds all known drill cutout contours.
|
|
15
|
+
* @param {{ x?: number, y?: number, holeDiameter?: number, drillDiameter?: number, holeSlotLength?: number, slotLength?: number, rotation?: number, holeRotation?: number }[]} pads
|
|
16
|
+
* @param {{ x?: number, y?: number, holeDiameter?: number, drillDiameter?: number }[]} vias
|
|
17
|
+
* @returns {{ x: number, y: number, bounds: { minX: number, minY: number, maxX: number, maxY: number }, points: { x: number, y: number }[] }[]}
|
|
18
|
+
*/
|
|
19
|
+
static buildCutouts(pads, vias) {
|
|
20
|
+
return [
|
|
21
|
+
...PcbScene3dDrillCutoutBuilder.#buildPadCutouts(pads),
|
|
22
|
+
...PcbScene3dDrillCutoutBuilder.#buildViaCutouts(vias)
|
|
23
|
+
]
|
|
24
|
+
}
|
|
25
|
+
|
|
13
26
|
/**
|
|
14
27
|
* Adds drill-shaped holes to every fill intersected by a pad or via drill.
|
|
15
28
|
* @param {{ points?: { x: number, y: number }[], holes?: { x: number, y: number }[][], x1?: number, y1?: number, x2?: number, y2?: number }[]} fills
|
|
@@ -18,9 +31,20 @@ export class PcbScene3dDrillCutoutBuilder {
|
|
|
18
31
|
* @returns {{ points?: { x: number, y: number }[], holes?: { x: number, y: number }[][], x1?: number, y1?: number, x2?: number, y2?: number }[]}
|
|
19
32
|
*/
|
|
20
33
|
static clipFills(fills, pads, vias) {
|
|
21
|
-
|
|
34
|
+
return PcbScene3dDrillCutoutBuilder.clipFillsWithCutouts(
|
|
35
|
+
fills,
|
|
36
|
+
PcbScene3dDrillCutoutBuilder.buildCutouts(pads, vias)
|
|
37
|
+
)
|
|
38
|
+
}
|
|
22
39
|
|
|
23
|
-
|
|
40
|
+
/**
|
|
41
|
+
* Adds drill-shaped holes from precomputed cutouts.
|
|
42
|
+
* @param {{ points?: { x: number, y: number }[], holes?: { x: number, y: number }[][], x1?: number, y1?: number, x2?: number, y2?: number }[]} fills
|
|
43
|
+
* @param {{ x: number, y: number, bounds: { minX: number, minY: number, maxX: number, maxY: number }, points: { x: number, y: number }[] }[]} cutouts
|
|
44
|
+
* @returns {{ points?: { x: number, y: number }[], holes?: { x: number, y: number }[][], x1?: number, y1?: number, x2?: number, y2?: number }[]}
|
|
45
|
+
*/
|
|
46
|
+
static clipFillsWithCutouts(fills, cutouts) {
|
|
47
|
+
if (!Array.isArray(cutouts) || !cutouts.length) {
|
|
24
48
|
return fills
|
|
25
49
|
}
|
|
26
50
|
|
|
@@ -48,19 +72,6 @@ export class PcbScene3dDrillCutoutBuilder {
|
|
|
48
72
|
})
|
|
49
73
|
}
|
|
50
74
|
|
|
51
|
-
/**
|
|
52
|
-
* Builds all known drill cutout contours.
|
|
53
|
-
* @param {{ x?: number, y?: number, holeDiameter?: number, drillDiameter?: number, holeSlotLength?: number, slotLength?: number, rotation?: number, holeRotation?: number }[]} pads
|
|
54
|
-
* @param {{ x?: number, y?: number, holeDiameter?: number, drillDiameter?: number }[]} vias
|
|
55
|
-
* @returns {{ x: number, y: number, bounds: { minX: number, minY: number, maxX: number, maxY: number }, points: { x: number, y: number }[] }[]}
|
|
56
|
-
*/
|
|
57
|
-
static #buildCutouts(pads, vias) {
|
|
58
|
-
return [
|
|
59
|
-
...PcbScene3dDrillCutoutBuilder.#buildPadCutouts(pads),
|
|
60
|
-
...PcbScene3dDrillCutoutBuilder.#buildViaCutouts(vias)
|
|
61
|
-
]
|
|
62
|
-
}
|
|
63
|
-
|
|
64
75
|
/**
|
|
65
76
|
* Builds drill contours for drilled pads.
|
|
66
77
|
* @param {{ x?: number, y?: number, holeDiameter?: number, drillDiameter?: number, holeSlotLength?: number, slotLength?: number, rotation?: number, holeRotation?: number }[]} pads
|