altium-toolkit 1.1.32 → 1.1.35

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 (28) hide show
  1. package/docs/model-format.md +2 -3
  2. package/package.json +1 -1
  3. package/src/core/altium/AltiumGeneratedLibraryRecordBuilder.mjs +551 -0
  4. package/src/core/altium/AltiumLibraryRecordBuilder.mjs +286 -2
  5. package/src/core/altium/AltiumPcbLibExporter.mjs +9 -2
  6. package/src/core/altium/AltiumSchLibExporter.mjs +1 -1
  7. package/src/core/altium/PcbComponentBodyPlacementNormalizer.mjs +120 -15
  8. package/src/core/altium/PcbEmbeddedModelExtractor.mjs +52 -4
  9. package/src/core/altium/PcbShapeBasedBodyGeometryParser.mjs +85 -11
  10. package/src/core/altium/SourceComponentBundleNormalizer.mjs +31 -0
  11. package/src/core/circuit-json/CircuitJsonModelSchema.mjs +1 -1
  12. package/src/ui/AltiumScene3dAuthoredBodyAnchorAdapter.mjs +30 -2
  13. package/src/ui/AltiumScene3dExternalPlacementAdapter.mjs +27 -2
  14. package/src/ui/AltiumScene3dPlacementRotationPolicy.mjs +44 -0
  15. package/src/ui/AltiumScene3dRepeatedModelOwnerRepair.mjs +171 -6
  16. package/src/ui/AltiumScene3dShapeStackOwnerAdapter.mjs +782 -0
  17. package/src/ui/AltiumScene3dTwoRowFootprintDetector.mjs +90 -0
  18. package/src/ui/PcbScene3dBuilder.mjs +595 -28
  19. package/src/ui/PcbScene3dCopperRegionDetailBuilder.mjs +280 -0
  20. package/src/ui/PcbScene3dModelRegistry.mjs +16 -0
  21. package/src/ui/PcbScene3dPackageDimensionResolver.mjs +107 -0
  22. package/src/ui/PcbScene3dPackages.mjs +15 -3
  23. package/src/ui/PcbScene3dPadYawResolver.mjs +200 -0
  24. package/src/ui/PcbScene3dPlacementSideResolver.mjs +56 -0
  25. package/src/ui/PcbScene3dStaticBodyPlacementBuilder.mjs +638 -16
  26. package/src/ui/PcbScene3dStaticBodyRecovery.mjs +891 -0
  27. package/src/ui/PcbScene3dStaticBodySelectionKeyBuilder.mjs +358 -0
  28. package/src/ui/PcbScene3dStaticBodySymmetryRecovery.mjs +876 -0
@@ -64,6 +64,62 @@ export class PcbScene3dPlacementSideResolver {
64
64
  return standoffSide || 'top'
65
65
  }
66
66
 
67
+ /**
68
+ * Resolves which board side one authored static shape body should mount on.
69
+ * Shape bodies carry explicit mechanical-layer intent, so that side wins
70
+ * over loose nearby-package identity unless the body was directly matched.
71
+ * @param {{ layer?: string, positionMil?: { x?: number, y?: number }, standoffHeightMil?: number | null, overallHeightMil?: number | null }} componentBody
72
+ * @param {{ layer?: string } | null} matchedComponent
73
+ * @param {{ layer?: string, pattern?: string, source?: string, modelPath?: string, x?: number, y?: number }[]} components
74
+ * @param {{ minX?: number, minY?: number, widthMil?: number, heightMil?: number } | null} board
75
+ * @returns {'top' | 'bottom'}
76
+ */
77
+ static resolveStaticBodyPlacementSide(
78
+ componentBody,
79
+ matchedComponent,
80
+ components = [],
81
+ board = null
82
+ ) {
83
+ const matchedSide =
84
+ PcbScene3dPlacementSideResolver.#resolveComponentLayerSide(
85
+ matchedComponent?.layer
86
+ )
87
+ if (matchedSide) {
88
+ return matchedSide
89
+ }
90
+
91
+ const standoffSide =
92
+ PcbScene3dPlacementSideResolver.#resolveStandoffSide(componentBody)
93
+ if (
94
+ standoffSide &&
95
+ PcbScene3dPlacementSideResolver.#isBodyAnchorInsideBoard(
96
+ componentBody,
97
+ board
98
+ )
99
+ ) {
100
+ return standoffSide
101
+ }
102
+
103
+ const mechanicalSide =
104
+ PcbScene3dPlacementSideResolver.#resolveMechanicalLayerSide(
105
+ componentBody?.layer
106
+ )
107
+ if (mechanicalSide) {
108
+ return mechanicalSide
109
+ }
110
+
111
+ const nearbySide =
112
+ PcbScene3dPlacementSideResolver.#resolveNearbyComponentSide(
113
+ componentBody,
114
+ components
115
+ )
116
+ if (nearbySide) {
117
+ return nearbySide
118
+ }
119
+
120
+ return standoffSide || 'top'
121
+ }
122
+
67
123
  /**
68
124
  * Resolves the grouping key for repeated component-body matching.
69
125
  * @param {{ modelId?: string, name?: string, identifier?: string }} componentBody