altium-toolkit 1.4.15 → 1.4.17
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 +5 -0
- package/docs/api.md +17 -0
- package/docs/migration.md +13 -3
- package/docs/release-notes-v1.4.16.md +27 -0
- package/docs/testing.md +17 -5
- package/package.json +2 -2
- package/spec/altium-3d-late-owner-recovery.md +10 -10
- package/spec/feature-preservation.json +1 -1
- package/spec/library-scope.md +4 -3
- package/src/convergence/AltiumWorkerClient.mjs +3 -12
- package/src/ui/AltiumScene3dBodyPlacementIndex.mjs +95 -0
- package/src/ui/AltiumScene3dComponentBodyAdapter.mjs +12 -32
- package/src/ui/AltiumScene3dExternalPlacementAdapter.mjs +5 -61
- package/src/ui/AltiumScene3dGeometricOwnerRecovery.mjs +11 -118
- package/src/ui/PcbInteractionIndex.mjs +59 -78
- package/src/ui/PcbInteractionLayerModel.mjs +2 -32
- package/src/ui/PcbInteractionSourceMetadata.mjs +122 -0
- package/src/ui/PcbScene3dBuilder.mjs +38 -267
- package/src/ui/PcbScene3dComponentGeometryResolver.mjs +249 -0
- package/src/ui/PcbScene3dCopperRegionDetailBuilder.mjs +36 -2
package/README.md
CHANGED
|
@@ -57,6 +57,10 @@ extension graphs retain their proven ownership instead of repeating defensive
|
|
|
57
57
|
binary classification. See the
|
|
58
58
|
[1.4.2 release notes](docs/release-notes-v1.4.2.md).
|
|
59
59
|
|
|
60
|
+
Version 1.4.16 preserves validated authored STEP anchors during late geometric
|
|
61
|
+
owner recovery and keeps board-space component yaw unchanged. See the
|
|
62
|
+
[1.4.16 release notes](docs/release-notes-v1.4.16.md).
|
|
63
|
+
|
|
60
64
|
Default `extensions: 'canonical'` keeps compact Altium summary metadata.
|
|
61
65
|
Request the complete native read model with `extensions: 'full'`,
|
|
62
66
|
`preserveRaw: true`, or `extensions: ['altium.native-model']`. Project batches
|
|
@@ -224,6 +228,7 @@ const legacyCircuitJson = AltiumParser.parseArrayBuffer(file.name, arrayBuffer)
|
|
|
224
228
|
- [API](docs/api.md)
|
|
225
229
|
- [Capabilities](docs/capabilities.md)
|
|
226
230
|
- [Migration from 1.1.41](docs/migration.md)
|
|
231
|
+
- [1.4.16 release notes](docs/release-notes-v1.4.16.md)
|
|
227
232
|
- [1.4.2 release notes](docs/release-notes-v1.4.2.md)
|
|
228
233
|
- [1.4.1 release notes](docs/release-notes-v1.4.1.md)
|
|
229
234
|
- [1.4.0 release notes](docs/release-notes-v1.4.0.md)
|
package/docs/api.md
CHANGED
|
@@ -552,8 +552,18 @@ ids, layer roles, cutouts, and pad/via drill render state (`open`, `covered`,
|
|
|
552
552
|
`PcbSvgRenderer.renderLayerSvgs()` uses the same semantic sidecar shape with
|
|
553
553
|
`view.kind: 'layer'` and a layer-specific `layerSet`.
|
|
554
554
|
|
|
555
|
+
Native PCB layer summaries collect source layer keys without constructing hit-test
|
|
556
|
+
geometry. Interaction indexes resolve component ownership once per build, and
|
|
557
|
+
hit tests normalize visibility filters once per query. These preparations are
|
|
558
|
+
scoped to each invocation so edits to documents and filters remain visible.
|
|
559
|
+
|
|
555
560
|
## 3D Scene Data
|
|
556
561
|
|
|
562
|
+
Copper scene detail excludes numeric non-copper region kinds (`KIND=1` polygon
|
|
563
|
+
cutouts, outlines, and cavities) as well as explicit clearance flags. Authored
|
|
564
|
+
region arcs carry a signed `sweepAngle` in normalized coordinates, preserving
|
|
565
|
+
angle wrapping, major arcs, and traversal from either endpoint.
|
|
566
|
+
|
|
557
567
|
```js
|
|
558
568
|
import {
|
|
559
569
|
PcbScene3dBuilder,
|
|
@@ -582,6 +592,13 @@ import {
|
|
|
582
592
|
The library intentionally does not create Three.js objects, canvases, controls,
|
|
583
593
|
or event listeners.
|
|
584
594
|
|
|
595
|
+
Native Altium scene construction indexes pad ownership once per build and
|
|
596
|
+
prepares drilled-pad anchor candidates only when owner recovery needs them.
|
|
597
|
+
Placement repair searches nearby authored-body positions before comparing
|
|
598
|
+
identity metadata. These indexes preserve mounted-surface pad preference and
|
|
599
|
+
source-order ties, and are rebuilt for every invocation so later document
|
|
600
|
+
edits are visible.
|
|
601
|
+
|
|
585
602
|
## Read-only CLI Examples
|
|
586
603
|
|
|
587
604
|
The `examples/` directory includes small Node.js scripts for common
|
package/docs/migration.md
CHANGED
|
@@ -6,9 +6,19 @@ SPDX-License-Identifier: CC-BY-SA-4.0
|
|
|
6
6
|
# Migration from 1.1.41 to 1.2.0
|
|
7
7
|
|
|
8
8
|
Version 1.2.0 adds the canonical ECAD toolkit API. Existing Altium
|
|
9
|
-
exports are retained under `altium-toolkit/extensions
|
|
10
|
-
|
|
11
|
-
|
|
9
|
+
exports are retained under `altium-toolkit/extensions`.
|
|
10
|
+
|
|
11
|
+
Starting with 1.4.17, native implementations and assets are maintained:
|
|
12
|
+
reviewed bug fixes and performance improvements may change their source and
|
|
13
|
+
corrected behavior. Historical export signatures and public asset
|
|
14
|
+
entrypoints and targets remain checked. The immutable 1.1.41 source tree and manifest
|
|
15
|
+
remain provenance evidence, not a claim of current byte equality.
|
|
16
|
+
|
|
17
|
+
The release gate retains every historical implementation path and
|
|
18
|
+
compares every packed source file against a snapshot of the tested
|
|
19
|
+
checkout, including new helpers and workers. Public contract and
|
|
20
|
+
synthetic regression tests validate maintained behavior. See
|
|
21
|
+
[testing](testing.md) for the complete release checks.
|
|
12
22
|
|
|
13
23
|
The paged appendix maps every frozen export, static member, prototype
|
|
14
24
|
member, public asset, and the native implementation tree:
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# altium-toolkit 1.4.16
|
|
2
|
+
|
|
3
|
+
Version 1.4.16 preserves authored STEP anchors during late geometric owner
|
|
4
|
+
recovery and leaves model-local orientation normalization to the 3D runtime.
|
|
5
|
+
|
|
6
|
+
## 3D placement fidelity
|
|
7
|
+
|
|
8
|
+
- Near-centroid surface-mount bodies retain their authored positions when the
|
|
9
|
+
recovered owner is geometrically unambiguous.
|
|
10
|
+
- Height-backed owner recovery marks valid source anchors explicitly instead
|
|
11
|
+
of converting them into component-center offsets.
|
|
12
|
+
- Geometric owner recovery preserves the component's authored board-space yaw;
|
|
13
|
+
it no longer infers package-specific half-turns from labels or pad topology.
|
|
14
|
+
|
|
15
|
+
## Compatibility
|
|
16
|
+
|
|
17
|
+
- Placement recovery remains based on generic body, pad, and footprint
|
|
18
|
+
geometry without project names, filenames, designators, or library strings.
|
|
19
|
+
- Existing schematic colors, canvas borders, and public renderer signatures
|
|
20
|
+
remain unchanged.
|
|
21
|
+
|
|
22
|
+
## Verification
|
|
23
|
+
|
|
24
|
+
- Repository-owned synthetic tests cover near-centroid connectors,
|
|
25
|
+
height-backed authored anchors, and preserved switch yaw.
|
|
26
|
+
- The complete package suite, formatting check, and npm package dry run are
|
|
27
|
+
required for release.
|
package/docs/testing.md
CHANGED
|
@@ -11,7 +11,8 @@ streams. Do not add native customer files or provider-derived raw fixtures.
|
|
|
11
11
|
When exercising source lookup, inject a fake fetcher/client and assert emitted
|
|
12
12
|
entries, progress events, checkpoints, diagnostics, and OLE round trips.
|
|
13
13
|
|
|
14
|
-
Run the complete suite
|
|
14
|
+
Run the complete suite from a Git checkout containing the historical release
|
|
15
|
+
tags (`git fetch --tags` if needed):
|
|
15
16
|
|
|
16
17
|
```bash
|
|
17
18
|
npm test
|
|
@@ -31,12 +32,23 @@ The strict feature check creates an isolated packed install and packs the
|
|
|
31
32
|
currently installed CircuitJSON dependency beside the Altium candidate. This
|
|
32
33
|
keeps the isolated contract gate aligned with the dependency declared by the
|
|
33
34
|
active release instead of a stale version-specific fixture. It verifies all
|
|
34
|
-
historical
|
|
35
|
-
|
|
36
|
-
|
|
35
|
+
historical baseline provenance, extension signatures, and public asset paths.
|
|
36
|
+
Native implementations and assets may evolve through tested fixes starting with 1.4.17; historical
|
|
37
|
+
source and asset hashes are never rewritten to approve a candidate. The gate requires
|
|
38
|
+
every historical implementation path, captures all current `src/` files before
|
|
39
|
+
packing, and compares exact file inventories and bytes before importing the
|
|
40
|
+
packed candidate. It rejects changed, missing, additional, or symlinked source,
|
|
41
|
+
including new helpers. It also checks the exact package/subpath layout and runs
|
|
42
|
+
the shared observable toolkit contract against the packed package. A final
|
|
43
|
+
source comparison catches changes made during validation.
|
|
37
44
|
|
|
38
45
|
The performance check is bound to the immutable 1.1.41 commit, source tree,
|
|
39
|
-
and native-source manifest. It
|
|
46
|
+
and native-source manifest. It verifies the complete local dependency graph of
|
|
47
|
+
the measured historical parser and schematic renderer, checking each module's
|
|
48
|
+
bytes before following its imports and re-exports. Computed dynamic imports
|
|
49
|
+
are rejected because their full dependency graph cannot be verified statically.
|
|
50
|
+
Source outside that baseline graph can evolve without changing the historical
|
|
51
|
+
manifest. It measures legacy and canonical projections of
|
|
40
52
|
the same synthetic inputs. Default canonical parsing must stay inside both a
|
|
41
53
|
relative budget and a small envelope-construction allowance scaled by actual
|
|
42
54
|
project document count. Direct async execution, metadata/full asset modes, and
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "altium-toolkit",
|
|
3
|
-
"version": "1.4.
|
|
3
|
+
"version": "1.4.17",
|
|
4
4
|
"description": "Altium document parsing and non-interactive rendering utilities",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"altium",
|
|
@@ -67,7 +67,7 @@
|
|
|
67
67
|
"check:features": "node scripts/check-feature-preservation.mjs"
|
|
68
68
|
},
|
|
69
69
|
"dependencies": {
|
|
70
|
-
"circuitjson-toolkit": "^1.4.
|
|
70
|
+
"circuitjson-toolkit": "^1.4.3",
|
|
71
71
|
"fflate": "^0.8.2"
|
|
72
72
|
},
|
|
73
73
|
"devDependencies": {
|
|
@@ -18,23 +18,23 @@ vendor names, or library identifiers.
|
|
|
18
18
|
span.
|
|
19
19
|
- Use component height agreement only as supporting evidence for nearby
|
|
20
20
|
package ownership; height alone is insufficient.
|
|
21
|
-
- Preserve
|
|
22
|
-
|
|
21
|
+
- Preserve pad-centroid and nearby height-backed body positions because they
|
|
22
|
+
are valid authored source anchors, and mark height-backed anchors so the
|
|
23
|
+
runtime does not apply a second source-origin adjustment.
|
|
23
24
|
- Center proven corner-origin and row-origin bodies on the component owner and
|
|
24
25
|
retain the source offset as transform diagnostics.
|
|
25
26
|
- Recompute component side and authored vertical standoff after late owner
|
|
26
27
|
recovery.
|
|
27
|
-
-
|
|
28
|
-
|
|
29
|
-
class.
|
|
28
|
+
- Preserve authored component yaw; model-local axis normalization belongs to
|
|
29
|
+
the runtime that has access to the imported mesh envelope.
|
|
30
30
|
- Decline ambiguous matches.
|
|
31
31
|
|
|
32
32
|
## Verification
|
|
33
33
|
|
|
34
|
-
- Focused synthetic tests use obfuscated package identities and cover
|
|
35
|
-
|
|
36
|
-
|
|
34
|
+
- Focused synthetic tests use obfuscated package identities and cover exact and
|
|
35
|
+
near pad centroids, corner origin, row origin, authored source anchors, late
|
|
36
|
+
standoff, ambiguity rejection, and preserved component yaw.
|
|
37
37
|
- The full toolkit test suite and formatting check pass.
|
|
38
38
|
- A read-only probe of the supplied PCB must show real component designators
|
|
39
|
-
for the affected placements, owner-centered corner/row models,
|
|
40
|
-
top-side standoff, and
|
|
39
|
+
for the affected placements, owner-centered corner/row models, preserved
|
|
40
|
+
authored anchors, recovered top-side standoff, and source-authored yaw.
|