pcb-scene3d-viewer 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/AGENTS.md +67 -0
- package/COMMERCIAL-LICENSE.md +15 -0
- package/CONTRIBUTING.md +14 -0
- package/LICENSE +19 -0
- package/LICENSES/AGPL-3.0-or-later.txt +235 -0
- package/LICENSES/CC-BY-SA-4.0.txt +170 -0
- package/LICENSES/LGPL-2.1-or-later.txt +176 -0
- package/LICENSES/LicenseRef-PolyForm-Noncommercial-1.0.0.txt +131 -0
- package/NOTICE.md +36 -0
- package/README.md +128 -0
- package/REUSE.toml +16 -0
- package/docs/api.md +148 -0
- package/docs/circuitjson.md +190 -0
- package/docs/model-format.md +117 -0
- package/docs/testing.md +23 -0
- package/package.json +65 -0
- package/spec/library-scope.md +36 -0
- package/src/PcbModelArchiveExporter.mjs +320 -0
- package/src/PcbScene3dArcUtils.mjs +27 -0
- package/src/PcbScene3dBoardAssemblyPlacement.mjs +36 -0
- package/src/PcbScene3dBoardAssemblyPresentation.mjs +859 -0
- package/src/PcbScene3dBoardEdgeCutoutBuilder.mjs +537 -0
- package/src/PcbScene3dBoardMaterialPalette.mjs +40 -0
- package/src/PcbScene3dBoardShapeFactory.mjs +895 -0
- package/src/PcbScene3dBoardSolderMaskFactory.mjs +613 -0
- package/src/PcbScene3dCameraRig.mjs +168 -0
- package/src/PcbScene3dCircuitJsonAdapter.mjs +545 -0
- package/src/PcbScene3dController.mjs +956 -0
- package/src/PcbScene3dCopperDetailFilter.mjs +490 -0
- package/src/PcbScene3dCopperFactory.mjs +559 -0
- package/src/PcbScene3dCopperTextFactory.mjs +534 -0
- package/src/PcbScene3dCutoutGeometryFilter.mjs +873 -0
- package/src/PcbScene3dDetailCoordinateNormalizer.mjs +65 -0
- package/src/PcbScene3dDrillCutoutFilter.mjs +224 -0
- package/src/PcbScene3dDrillPathFactory.mjs +362 -0
- package/src/PcbScene3dDrillVoidFactory.mjs +268 -0
- package/src/PcbScene3dExternalModelLoadOrder.mjs +54 -0
- package/src/PcbScene3dExternalModels.mjs +968 -0
- package/src/PcbScene3dFallbackVisibility.mjs +82 -0
- package/src/PcbScene3dInteractionHints.mjs +56 -0
- package/src/PcbScene3dMountRig.mjs +53 -0
- package/src/PcbScene3dOutlineBuilder.mjs +210 -0
- package/src/PcbScene3dPadFactory.mjs +553 -0
- package/src/PcbScene3dPresetState.mjs +48 -0
- package/src/PcbScene3dRenderGroupVisibility.mjs +134 -0
- package/src/PcbScene3dRuntime.mjs +996 -0
- package/src/PcbScene3dRuntimeBoardMeshes.mjs +99 -0
- package/src/PcbScene3dSelectionStyler.mjs +252 -0
- package/src/PcbScene3dShapePathFactory.mjs +220 -0
- package/src/PcbScene3dShellRenderer.mjs +131 -0
- package/src/PcbScene3dSilkscreenFactory.mjs +854 -0
- package/src/PcbScene3dSilkscreenStrokeWidthResolver.mjs +81 -0
- package/src/PcbScene3dStepLoader.mjs +611 -0
- package/src/PcbScene3dStrokeFont.mjs +671 -0
- package/src/PcbScene3dStrokeGeometryBuilder.mjs +322 -0
- package/src/PcbScene3dText.mjs +99 -0
- package/src/PcbScene3dTrueTypeTextFactory.mjs +885 -0
- package/src/PcbScene3dViaFactory.mjs +176 -0
- package/src/PcbScene3dViewCompensation.mjs +109 -0
- package/src/PcbScene3dViewScale.mjs +24 -0
- package/src/PcbScene3dViewportResize.mjs +35 -0
- package/src/PcbScene3dWorkerClient.mjs +123 -0
- package/src/index.mjs +1 -0
- package/src/scene3d.mjs +44 -0
- package/src/styles/scene3d.css +295 -0
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
import { PcbScene3dFallbackVisibility } from './PcbScene3dFallbackVisibility.mjs'
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Applies visibility toggles to the PCB 3D runtime render groups.
|
|
5
|
+
*/
|
|
6
|
+
export class PcbScene3dRenderGroupVisibility {
|
|
7
|
+
/** @type {number} */
|
|
8
|
+
static #BOARD_ASSEMBLY_DETAIL_RENDER_ORDER = 40
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Applies the active 3D detail visibility state.
|
|
12
|
+
* @param {{ groups: Map<string, any>, toggles: { 'external-models': boolean, 'fallback-bodies': boolean, copper: boolean }, fallbackBodyRoots: Map<string, Set<any>>, loadedExternalModelDesignators: Set<string>, hasLoadedBoardAssemblyModel?: boolean }} state Visibility state.
|
|
13
|
+
* @returns {void}
|
|
14
|
+
*/
|
|
15
|
+
static apply(state) {
|
|
16
|
+
const boardAssemblyActive =
|
|
17
|
+
Boolean(state?.hasLoadedBoardAssemblyModel) &&
|
|
18
|
+
Boolean(state?.toggles?.['external-models'])
|
|
19
|
+
|
|
20
|
+
PcbScene3dRenderGroupVisibility.#setVisible(
|
|
21
|
+
state?.groups?.get('board'),
|
|
22
|
+
true
|
|
23
|
+
)
|
|
24
|
+
PcbScene3dRenderGroupVisibility.#setVisible(
|
|
25
|
+
state?.groups?.get('silkscreen'),
|
|
26
|
+
true
|
|
27
|
+
)
|
|
28
|
+
PcbScene3dRenderGroupVisibility.#setVisible(
|
|
29
|
+
state?.groups?.get('copper'),
|
|
30
|
+
Boolean(state?.toggles?.copper)
|
|
31
|
+
)
|
|
32
|
+
PcbScene3dRenderGroupVisibility.#applyDetailOverlayPresentation(
|
|
33
|
+
state?.groups?.get('silkscreen'),
|
|
34
|
+
boardAssemblyActive
|
|
35
|
+
)
|
|
36
|
+
PcbScene3dRenderGroupVisibility.#applyDetailOverlayPresentation(
|
|
37
|
+
state?.groups?.get('copper'),
|
|
38
|
+
boardAssemblyActive
|
|
39
|
+
)
|
|
40
|
+
PcbScene3dRenderGroupVisibility.#setVisible(
|
|
41
|
+
state?.groups?.get('fallback-bodies'),
|
|
42
|
+
Boolean(state?.toggles?.['fallback-bodies']) && !boardAssemblyActive
|
|
43
|
+
)
|
|
44
|
+
|
|
45
|
+
PcbScene3dFallbackVisibility.applyVisibility(
|
|
46
|
+
state?.fallbackBodyRoots,
|
|
47
|
+
state?.loadedExternalModelDesignators,
|
|
48
|
+
state?.toggles
|
|
49
|
+
)
|
|
50
|
+
PcbScene3dRenderGroupVisibility.#setVisible(
|
|
51
|
+
state?.groups?.get('external-models'),
|
|
52
|
+
Boolean(state?.toggles?.['external-models'])
|
|
53
|
+
)
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
/**
|
|
57
|
+
* Sets group visibility when a group is available.
|
|
58
|
+
* @param {{ visible?: boolean } | undefined} group Render group.
|
|
59
|
+
* @param {boolean} visible Visibility value.
|
|
60
|
+
* @returns {void}
|
|
61
|
+
*/
|
|
62
|
+
static #setVisible(group, visible) {
|
|
63
|
+
if (group) {
|
|
64
|
+
group.visible = visible
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
/**
|
|
69
|
+
* Draws PCB-derived detail above a board assembly substrate.
|
|
70
|
+
* @param {any} group Detail render group.
|
|
71
|
+
* @param {boolean} active Whether overlay rendering is active.
|
|
72
|
+
* @returns {void}
|
|
73
|
+
*/
|
|
74
|
+
static #applyDetailOverlayPresentation(group, active) {
|
|
75
|
+
PcbScene3dRenderGroupVisibility.#traverseGroup(group, (object) => {
|
|
76
|
+
PcbScene3dRenderGroupVisibility.#applyObjectRenderOrder(
|
|
77
|
+
object,
|
|
78
|
+
active
|
|
79
|
+
)
|
|
80
|
+
})
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
/**
|
|
84
|
+
* Applies or restores render ordering for one render object.
|
|
85
|
+
* @param {any} object Render object.
|
|
86
|
+
* @param {boolean} active Whether overlay rendering is active.
|
|
87
|
+
* @returns {void}
|
|
88
|
+
*/
|
|
89
|
+
static #applyObjectRenderOrder(object, active) {
|
|
90
|
+
if (!object) {
|
|
91
|
+
return
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
object.userData = object.userData || {}
|
|
95
|
+
if (active) {
|
|
96
|
+
if (object.userData.scene3dOriginalRenderOrder === undefined) {
|
|
97
|
+
object.userData.scene3dOriginalRenderOrder = Number(
|
|
98
|
+
object.renderOrder || 0
|
|
99
|
+
)
|
|
100
|
+
}
|
|
101
|
+
object.renderOrder =
|
|
102
|
+
PcbScene3dRenderGroupVisibility.#BOARD_ASSEMBLY_DETAIL_RENDER_ORDER
|
|
103
|
+
return
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
if (object.userData.scene3dOriginalRenderOrder !== undefined) {
|
|
107
|
+
object.renderOrder = object.userData.scene3dOriginalRenderOrder
|
|
108
|
+
delete object.userData.scene3dOriginalRenderOrder
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
/**
|
|
113
|
+
* Traverses a group tree, including simple test doubles.
|
|
114
|
+
* @param {any} group Render group.
|
|
115
|
+
* @param {(object: any) => void} visitor Visitor callback.
|
|
116
|
+
* @returns {void}
|
|
117
|
+
*/
|
|
118
|
+
static #traverseGroup(group, visitor) {
|
|
119
|
+
if (!group) {
|
|
120
|
+
return
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
if (typeof group.traverse === 'function') {
|
|
124
|
+
group.traverse(visitor)
|
|
125
|
+
return
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
visitor(group)
|
|
129
|
+
;(Array.isArray(group.children) ? group.children : []).forEach(
|
|
130
|
+
(child) =>
|
|
131
|
+
PcbScene3dRenderGroupVisibility.#traverseGroup(child, visitor)
|
|
132
|
+
)
|
|
133
|
+
}
|
|
134
|
+
}
|