@3driseai/3drise-viewer 0.1.19 → 0.1.20
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/dist/components/CreatedObject.d.ts.map +1 -1
- package/dist/components/CreatedObject.js +18 -14
- package/dist/components/ModelMaterialPassContext.d.ts +7 -0
- package/dist/components/ModelMaterialPassContext.d.ts.map +1 -0
- package/dist/components/ModelMaterialPassContext.js +7 -0
- package/dist/components/ModelPrimitive.d.ts.map +1 -1
- package/dist/components/ModelPrimitive.js +7 -1
- package/dist/components/ParticlesGenerator.d.ts.map +1 -1
- package/dist/components/ParticlesGenerator.js +6 -0
- package/dist/components/particles/ChladniSandParticles.d.ts +15 -0
- package/dist/components/particles/ChladniSandParticles.d.ts.map +1 -0
- package/dist/components/particles/ChladniSandParticles.js +912 -0
- package/dist/components/particles/FaradayPowderParticles.d.ts +15 -0
- package/dist/components/particles/FaradayPowderParticles.d.ts.map +1 -0
- package/dist/components/particles/FaradayPowderParticles.js +783 -0
- package/dist/components/particles/NeonRainParticles.d.ts +15 -0
- package/dist/components/particles/NeonRainParticles.d.ts.map +1 -0
- package/dist/components/particles/NeonRainParticles.js +716 -0
- package/dist/components/particles/index.d.ts +6 -0
- package/dist/components/particles/index.d.ts.map +1 -1
- package/dist/components/particles/index.js +3 -0
- package/dist/hooks/index.d.ts +1 -0
- package/dist/hooks/index.d.ts.map +1 -1
- package/dist/hooks/index.js +1 -0
- package/dist/hooks/useMaterialApplication.d.ts.map +1 -1
- package/dist/hooks/useMaterialApplication.js +1 -0
- package/dist/hooks/useNodeOverrides.d.ts +13 -0
- package/dist/hooks/useNodeOverrides.d.ts.map +1 -0
- package/dist/hooks/useNodeOverrides.js +254 -0
- package/package.json +2 -2
|
@@ -8,4 +8,10 @@ export { default as ElectronOrbitalsParticles } from './ElectronOrbitalsParticle
|
|
|
8
8
|
export type { ElectronOrbitalsParticlesProps } from './ElectronOrbitalsParticles';
|
|
9
9
|
export { default as GrinderSparksParticles } from './GrinderSparksParticles';
|
|
10
10
|
export type { GrinderSparksParticlesProps } from './GrinderSparksParticles';
|
|
11
|
+
export { default as ChladniSandParticles } from './ChladniSandParticles';
|
|
12
|
+
export type { ChladniSandParticlesProps } from './ChladniSandParticles';
|
|
13
|
+
export { default as FaradayPowderParticles } from './FaradayPowderParticles';
|
|
14
|
+
export type { FaradayPowderParticlesProps } from './FaradayPowderParticles';
|
|
15
|
+
export { default as NeonRainParticles } from './NeonRainParticles';
|
|
16
|
+
export type { NeonRainParticlesProps } from './NeonRainParticles';
|
|
11
17
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/particles/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,IAAI,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AACzE,YAAY,EAAE,yBAAyB,EAAE,MAAM,wBAAwB,CAAC;AACxE,OAAO,EAAE,OAAO,IAAI,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAC3E,YAAY,EAAE,0BAA0B,EAAE,MAAM,yBAAyB,CAAC;AAC1E,OAAO,EAAE,OAAO,IAAI,2BAA2B,EAAE,MAAM,+BAA+B,CAAC;AACvF,YAAY,EAAE,gCAAgC,EAAE,MAAM,+BAA+B,CAAC;AACtF,OAAO,EAAE,OAAO,IAAI,yBAAyB,EAAE,MAAM,6BAA6B,CAAC;AACnF,YAAY,EAAE,8BAA8B,EAAE,MAAM,6BAA6B,CAAC;AAClF,OAAO,EAAE,OAAO,IAAI,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAC7E,YAAY,EAAE,2BAA2B,EAAE,MAAM,0BAA0B,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/particles/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,IAAI,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AACzE,YAAY,EAAE,yBAAyB,EAAE,MAAM,wBAAwB,CAAC;AACxE,OAAO,EAAE,OAAO,IAAI,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAC3E,YAAY,EAAE,0BAA0B,EAAE,MAAM,yBAAyB,CAAC;AAC1E,OAAO,EAAE,OAAO,IAAI,2BAA2B,EAAE,MAAM,+BAA+B,CAAC;AACvF,YAAY,EAAE,gCAAgC,EAAE,MAAM,+BAA+B,CAAC;AACtF,OAAO,EAAE,OAAO,IAAI,yBAAyB,EAAE,MAAM,6BAA6B,CAAC;AACnF,YAAY,EAAE,8BAA8B,EAAE,MAAM,6BAA6B,CAAC;AAClF,OAAO,EAAE,OAAO,IAAI,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAC7E,YAAY,EAAE,2BAA2B,EAAE,MAAM,0BAA0B,CAAC;AAC5E,OAAO,EAAE,OAAO,IAAI,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AACzE,YAAY,EAAE,yBAAyB,EAAE,MAAM,wBAAwB,CAAC;AACxE,OAAO,EAAE,OAAO,IAAI,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAC7E,YAAY,EAAE,2BAA2B,EAAE,MAAM,0BAA0B,CAAC;AAC5E,OAAO,EAAE,OAAO,IAAI,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACnE,YAAY,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC"}
|
|
@@ -4,3 +4,6 @@ export { default as BrownianDustParticles } from './BrownianDustParticles.js';
|
|
|
4
4
|
export { default as BioluminescentWakeParticles } from './BioluminescentWakeParticles.js';
|
|
5
5
|
export { default as ElectronOrbitalsParticles } from './ElectronOrbitalsParticles.js';
|
|
6
6
|
export { default as GrinderSparksParticles } from './GrinderSparksParticles.js';
|
|
7
|
+
export { default as ChladniSandParticles } from './ChladniSandParticles.js';
|
|
8
|
+
export { default as FaradayPowderParticles } from './FaradayPowderParticles.js';
|
|
9
|
+
export { default as NeonRainParticles } from './NeonRainParticles.js';
|
package/dist/hooks/index.d.ts
CHANGED
|
@@ -57,6 +57,7 @@ export { useObjectEdges } from './useObjectEdges';
|
|
|
57
57
|
export type { ObjectEffectsFunctions, ObjectEffectsState, UseObjectEffectsReturn } from './useObjectEffects';
|
|
58
58
|
export { useObjectEffects } from './useObjectEffects';
|
|
59
59
|
export { useModelObject } from './useModelObject';
|
|
60
|
+
export { useNodeOverrides, reconcileNodeOverrides, restoreNodeOverrides } from './useNodeOverrides';
|
|
60
61
|
export { useObjectReady, useObjectReadyReporter } from './useObjectReady';
|
|
61
62
|
export type { GridSurfaceOptions, GridSurfaceUniforms } from './useGridSurface';
|
|
62
63
|
export { useGridSurface } from './useGridSurface';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/hooks/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/hooks/index.ts"],"names":[],"mappings":"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"}
|
package/dist/hooks/index.js
CHANGED
|
@@ -40,6 +40,7 @@ export { useObjectAnimation } from './useObjectAnimation.js';
|
|
|
40
40
|
export { useObjectEdges } from './useObjectEdges.js';
|
|
41
41
|
export { useObjectEffects } from './useObjectEffects.js';
|
|
42
42
|
export { useModelObject } from './useModelObject.js';
|
|
43
|
+
export { useNodeOverrides, reconcileNodeOverrides, restoreNodeOverrides } from './useNodeOverrides.js';
|
|
43
44
|
export { useObjectReady, useObjectReadyReporter } from './useObjectReady.js';
|
|
44
45
|
export { useGridSurface } from './useGridSurface.js';
|
|
45
46
|
export { useOrbitControls } from './useOrbitControls.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useMaterialApplication.d.ts","sourceRoot":"","sources":["../../src/hooks/useMaterialApplication.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAG9D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAG/D,eAAO,MAAM,sBAAsB,GAAI,QAAQ,cAAc,EAAE,kBAAkB,gBAAgB,EAAE,4BAA4B,OAAO,EAAE,YAAY,MAAM,IAAI,KAAG,
|
|
1
|
+
{"version":3,"file":"useMaterialApplication.d.ts","sourceRoot":"","sources":["../../src/hooks/useMaterialApplication.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAG9D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAG/D,eAAO,MAAM,sBAAsB,GAAI,QAAQ,cAAc,EAAE,kBAAkB,gBAAgB,EAAE,4BAA4B,OAAO,EAAE,YAAY,MAAM,IAAI,KAAG,IAwIhK,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { Object3D } from 'three';
|
|
2
|
+
import type { NodeOverrides } from '@3driseai/3drise-core';
|
|
3
|
+
export declare function reconcileNodeOverrides(root: Object3D, overrides: NodeOverrides | undefined, master?: Object3D | null): void;
|
|
4
|
+
/** Put every node this root touched back to its original state and free our materials. */
|
|
5
|
+
export declare function restoreNodeOverrides(root: Object3D, master?: Object3D | null): void;
|
|
6
|
+
/**
|
|
7
|
+
* @param object the mounted model clone (one layout slot)
|
|
8
|
+
* @param overrides createdObject.config.nodeOverrides (getNodeOverrides)
|
|
9
|
+
* @param master the cache master scene (peekModelAsset(url)?.scene) — source of originals
|
|
10
|
+
*/
|
|
11
|
+
export declare function useNodeOverrides(object: Object3D | null, overrides: NodeOverrides | undefined, master?: Object3D | null): void;
|
|
12
|
+
export default useNodeOverrides;
|
|
13
|
+
//# sourceMappingURL=useNodeOverrides.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useNodeOverrides.d.ts","sourceRoot":"","sources":["../../src/hooks/useNodeOverrides.ts"],"names":[],"mappings":"AAoBA,OAAO,KAAK,EAAY,QAAQ,EAAE,MAAM,OAAO,CAAC;AAUhD,OAAO,KAAK,EAAwD,aAAa,EAAgB,MAAM,uBAAuB,CAAC;AAiM/H,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,aAAa,GAAG,SAAS,EAAE,MAAM,CAAC,EAAE,QAAQ,GAAG,IAAI,GAAG,IAAI,CA0C3H;AAED,0FAA0F;AAC1F,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,CAAC,EAAE,QAAQ,GAAG,IAAI,GAAG,IAAI,CAEnF;AAID;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,QAAQ,GAAG,IAAI,EAAE,SAAS,EAAE,aAAa,GAAG,SAAS,EAAE,MAAM,CAAC,EAAE,QAAQ,GAAG,IAAI,GAAG,IAAI,CAa9H;AAED,eAAe,gBAAgB,CAAC"}
|
|
@@ -0,0 +1,254 @@
|
|
|
1
|
+
// =============================================================================
|
|
2
|
+
// useNodeOverrides — apply per-mesh overrides to a mounted model instance
|
|
3
|
+
// =============================================================================
|
|
4
|
+
//
|
|
5
|
+
// Reconciles `createdObject.config.nodeOverrides` (keyed by node name, or "/i/j" index path for
|
|
6
|
+
// unnamed nodes — see core nodeOverrides.ts) onto one model clone:
|
|
7
|
+
// visibility, local transform, and material (tweak the mesh's own material, or replace it
|
|
8
|
+
// with a full 3drise material).
|
|
9
|
+
//
|
|
10
|
+
// Reconcile, not patch: every run computes the desired state for every node it has ever
|
|
11
|
+
// touched, so removing an override (or one field of it) restores the original value.
|
|
12
|
+
//
|
|
13
|
+
// Originals:
|
|
14
|
+
// - transform / visibility come from the cache master (the never-mounted GLB scene), so
|
|
15
|
+
// a gizmo that moved the live node before the override was saved cannot corrupt them.
|
|
16
|
+
// - material "base" is whatever the model-level pass left on the mesh (GLB material, or
|
|
17
|
+
// the object's materialSettings when `apply` is on). Materials this hook creates are
|
|
18
|
+
// tagged so they are never mistaken for a base.
|
|
19
|
+
//
|
|
20
|
+
import { useContext, useEffect } from 'react';
|
|
21
|
+
import { MaterialRegistryAPI, NODE_OVERRIDE_MATERIAL_KEY, applyMaterialTweak, collectOverrideTargets, createAndApplyMaterial, resolveNodeKey, resolveTextures, } from '@3driseai/3drise-core';
|
|
22
|
+
import { ModelMaterialPassContext } from '../components/ModelMaterialPassContext.js';
|
|
23
|
+
const nodeStates = new WeakMap();
|
|
24
|
+
const touchedByRoot = new WeakMap();
|
|
25
|
+
const stateOf = (node) => {
|
|
26
|
+
let s = nodeStates.get(node);
|
|
27
|
+
if (!s) {
|
|
28
|
+
s = {};
|
|
29
|
+
nodeStates.set(node, s);
|
|
30
|
+
}
|
|
31
|
+
return s;
|
|
32
|
+
};
|
|
33
|
+
const isOwn = (material) => {
|
|
34
|
+
if (!material)
|
|
35
|
+
return false;
|
|
36
|
+
const list = Array.isArray(material) ? material : [material];
|
|
37
|
+
return list.some(m => m?.userData?.[NODE_OVERRIDE_MATERIAL_KEY]);
|
|
38
|
+
};
|
|
39
|
+
const tag = (m) => {
|
|
40
|
+
m.userData[NODE_OVERRIDE_MATERIAL_KEY] = true;
|
|
41
|
+
return m;
|
|
42
|
+
};
|
|
43
|
+
const disposeOwn = (s) => {
|
|
44
|
+
if (s.ownInstance) {
|
|
45
|
+
try {
|
|
46
|
+
MaterialRegistryAPI.releaseMaterial(s.ownInstance);
|
|
47
|
+
}
|
|
48
|
+
catch { /* ignore */ }
|
|
49
|
+
}
|
|
50
|
+
else if (s.ownMaterial) {
|
|
51
|
+
(Array.isArray(s.ownMaterial) ? s.ownMaterial : [s.ownMaterial]).forEach(m => m?.dispose());
|
|
52
|
+
}
|
|
53
|
+
s.ownMaterial = undefined;
|
|
54
|
+
s.ownInstance = undefined;
|
|
55
|
+
s.materialKey = undefined;
|
|
56
|
+
};
|
|
57
|
+
/** Original local transform + visibility for `node`: master first, snapshot fallback. */
|
|
58
|
+
const originalOf = (node) => {
|
|
59
|
+
const m = stateOf(node).masterNode;
|
|
60
|
+
if (m) {
|
|
61
|
+
return {
|
|
62
|
+
position: [m.position.x, m.position.y, m.position.z],
|
|
63
|
+
rotation: [m.rotation.x, m.rotation.y, m.rotation.z],
|
|
64
|
+
scale: [m.scale.x, m.scale.y, m.scale.z],
|
|
65
|
+
visible: m.visible,
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
const s = stateOf(node);
|
|
69
|
+
if (!s.snapshot) {
|
|
70
|
+
s.snapshot = {
|
|
71
|
+
position: [node.position.x, node.position.y, node.position.z],
|
|
72
|
+
rotation: [node.rotation.x, node.rotation.y, node.rotation.z],
|
|
73
|
+
scale: [node.scale.x, node.scale.y, node.scale.z],
|
|
74
|
+
visible: node.visible,
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
return s.snapshot;
|
|
78
|
+
};
|
|
79
|
+
// ── Transform / visibility ──────────────────────────────────────────────────
|
|
80
|
+
const reconcileTransform = (node, override) => {
|
|
81
|
+
const s = stateOf(node);
|
|
82
|
+
const hasTransform = !!(override?.position || override?.rotation || override?.scale);
|
|
83
|
+
const hasVisible = override?.visible !== undefined;
|
|
84
|
+
if (!hasTransform && !hasVisible && !s.transformTouched && !s.visibleTouched)
|
|
85
|
+
return;
|
|
86
|
+
const orig = originalOf(node);
|
|
87
|
+
if (hasTransform || s.transformTouched) {
|
|
88
|
+
node.position.set(...(override?.position ?? orig.position));
|
|
89
|
+
node.rotation.set(...(override?.rotation ?? orig.rotation));
|
|
90
|
+
node.scale.set(...(override?.scale ?? orig.scale));
|
|
91
|
+
s.transformTouched = hasTransform;
|
|
92
|
+
}
|
|
93
|
+
if (hasVisible || s.visibleTouched) {
|
|
94
|
+
node.visible = override?.visible ?? orig.visible;
|
|
95
|
+
s.visibleTouched = hasVisible;
|
|
96
|
+
}
|
|
97
|
+
};
|
|
98
|
+
// ── Material ────────────────────────────────────────────────────────────────
|
|
99
|
+
const assign = (mesh, material) => {
|
|
100
|
+
mesh.material = material;
|
|
101
|
+
};
|
|
102
|
+
const reconcileMaterial = (mesh, desired) => {
|
|
103
|
+
const current = mesh.material;
|
|
104
|
+
if (!current)
|
|
105
|
+
return;
|
|
106
|
+
const s = stateOf(mesh);
|
|
107
|
+
// A material that isn't ours is a fresh base (GLB, or the model-level pass replaced
|
|
108
|
+
// what we had). Ours still on the mesh means the stored base is still valid.
|
|
109
|
+
if (!isOwn(current)) {
|
|
110
|
+
if (s.ownMaterial || s.ownInstance) {
|
|
111
|
+
// Our material was swapped out from under us — release it, it's orphaned.
|
|
112
|
+
disposeOwn(s);
|
|
113
|
+
}
|
|
114
|
+
s.baseMaterial = current;
|
|
115
|
+
}
|
|
116
|
+
const base = s.baseMaterial ?? current;
|
|
117
|
+
if (!desired) {
|
|
118
|
+
if (isOwn(current)) {
|
|
119
|
+
assign(mesh, base);
|
|
120
|
+
disposeOwn(s);
|
|
121
|
+
}
|
|
122
|
+
s.token = (s.token ?? 0) + 1; // cancel any in-flight replace
|
|
123
|
+
return;
|
|
124
|
+
}
|
|
125
|
+
const key = JSON.stringify(desired.mode === 'replace' ? { r: desired.settings } : { t: desired.tweak });
|
|
126
|
+
if (isOwn(current) && s.materialKey === key)
|
|
127
|
+
return; // already up to date
|
|
128
|
+
const token = (s.token ?? 0) + 1;
|
|
129
|
+
s.token = token;
|
|
130
|
+
if (desired.mode === 'tweak') {
|
|
131
|
+
const make = (m) => {
|
|
132
|
+
const copy = tag(m.clone());
|
|
133
|
+
applyMaterialTweak(copy, desired.tweak);
|
|
134
|
+
return copy;
|
|
135
|
+
};
|
|
136
|
+
const next = Array.isArray(base) ? base.map(make) : make(base);
|
|
137
|
+
const prev = { ownMaterial: s.ownMaterial, ownInstance: s.ownInstance };
|
|
138
|
+
assign(mesh, next);
|
|
139
|
+
disposeOwn({ ...prev });
|
|
140
|
+
s.ownMaterial = next;
|
|
141
|
+
s.ownInstance = undefined;
|
|
142
|
+
s.materialKey = key;
|
|
143
|
+
return;
|
|
144
|
+
}
|
|
145
|
+
// replace — full 3drise material
|
|
146
|
+
const settings = desired.settings;
|
|
147
|
+
if (!settings) {
|
|
148
|
+
if (isOwn(current)) {
|
|
149
|
+
assign(mesh, base);
|
|
150
|
+
disposeOwn(s);
|
|
151
|
+
}
|
|
152
|
+
return;
|
|
153
|
+
}
|
|
154
|
+
const typeDef = MaterialRegistryAPI.getTypeDefinition(settings.materialType);
|
|
155
|
+
if (!typeDef)
|
|
156
|
+
return;
|
|
157
|
+
const variant = settings.materialVariant || Object.keys(typeDef.variants)[0];
|
|
158
|
+
resolveTextures(variant, settings).then(resolved => {
|
|
159
|
+
if (stateOf(mesh).token !== token)
|
|
160
|
+
return; // superseded
|
|
161
|
+
let instance;
|
|
162
|
+
try {
|
|
163
|
+
instance = createAndApplyMaterial(variant, resolved);
|
|
164
|
+
}
|
|
165
|
+
catch {
|
|
166
|
+
return;
|
|
167
|
+
}
|
|
168
|
+
tag(instance.material);
|
|
169
|
+
const prev = { ownMaterial: s.ownMaterial, ownInstance: s.ownInstance };
|
|
170
|
+
assign(mesh, instance.material);
|
|
171
|
+
disposeOwn({ ...prev });
|
|
172
|
+
s.ownInstance = instance;
|
|
173
|
+
s.ownMaterial = instance.material;
|
|
174
|
+
s.materialKey = key;
|
|
175
|
+
});
|
|
176
|
+
};
|
|
177
|
+
/** A named node's material targets: itself if it has one, else every descendant mesh. */
|
|
178
|
+
const materialTargetsOf = (node) => {
|
|
179
|
+
if (node.material)
|
|
180
|
+
return [node];
|
|
181
|
+
const out = [];
|
|
182
|
+
node.traverse(child => {
|
|
183
|
+
if (child !== node && child.material)
|
|
184
|
+
out.push(child);
|
|
185
|
+
});
|
|
186
|
+
return out;
|
|
187
|
+
};
|
|
188
|
+
// ── Reconcile / restore ─────────────────────────────────────────────────────
|
|
189
|
+
export function reconcileNodeOverrides(root, overrides, master) {
|
|
190
|
+
let touched = touchedByRoot.get(root);
|
|
191
|
+
if (!touched) {
|
|
192
|
+
touched = new Set();
|
|
193
|
+
touchedByRoot.set(root, touched);
|
|
194
|
+
}
|
|
195
|
+
const targets = collectOverrideTargets(root, overrides);
|
|
196
|
+
const desiredNode = new Map();
|
|
197
|
+
const desiredMaterial = new Map();
|
|
198
|
+
// Parents come first in traversal order, so a child's own material override wins
|
|
199
|
+
// over one set on its group.
|
|
200
|
+
targets.forEach((nodes, key) => {
|
|
201
|
+
const override = overrides[key];
|
|
202
|
+
// Resolve the master counterpart once per node, by the same key.
|
|
203
|
+
const masterNodes = master ? resolveNodeKey(master, key) : [];
|
|
204
|
+
nodes.forEach((node, i) => {
|
|
205
|
+
const s = stateOf(node);
|
|
206
|
+
if (master && s.masterNode === undefined)
|
|
207
|
+
s.masterNode = masterNodes[i] ?? masterNodes[0] ?? null;
|
|
208
|
+
desiredNode.set(node, override);
|
|
209
|
+
if (override.material) {
|
|
210
|
+
materialTargetsOf(node).forEach(mesh => desiredMaterial.set(mesh, override.material));
|
|
211
|
+
}
|
|
212
|
+
});
|
|
213
|
+
});
|
|
214
|
+
const all = new Set([...touched, ...desiredNode.keys(), ...desiredMaterial.keys()]);
|
|
215
|
+
all.forEach(node => {
|
|
216
|
+
reconcileTransform(node, desiredNode.get(node));
|
|
217
|
+
if (node.material)
|
|
218
|
+
reconcileMaterial(node, desiredMaterial.get(node));
|
|
219
|
+
});
|
|
220
|
+
// Keep tracking only what still differs from the original.
|
|
221
|
+
const stillTouched = new Set();
|
|
222
|
+
all.forEach(node => {
|
|
223
|
+
const s = nodeStates.get(node);
|
|
224
|
+
if (s && (s.transformTouched || s.visibleTouched || s.ownMaterial || s.ownInstance || desiredMaterial.has(node))) {
|
|
225
|
+
stillTouched.add(node);
|
|
226
|
+
}
|
|
227
|
+
});
|
|
228
|
+
touchedByRoot.set(root, stillTouched);
|
|
229
|
+
}
|
|
230
|
+
/** Put every node this root touched back to its original state and free our materials. */
|
|
231
|
+
export function restoreNodeOverrides(root, master) {
|
|
232
|
+
reconcileNodeOverrides(root, {}, master);
|
|
233
|
+
}
|
|
234
|
+
// ── Hook ────────────────────────────────────────────────────────────────────
|
|
235
|
+
/**
|
|
236
|
+
* @param object the mounted model clone (one layout slot)
|
|
237
|
+
* @param overrides createdObject.config.nodeOverrides (getNodeOverrides)
|
|
238
|
+
* @param master the cache master scene (peekModelAsset(url)?.scene) — source of originals
|
|
239
|
+
*/
|
|
240
|
+
export function useNodeOverrides(object, overrides, master) {
|
|
241
|
+
const materialPass = useContext(ModelMaterialPassContext);
|
|
242
|
+
useEffect(() => {
|
|
243
|
+
if (!object)
|
|
244
|
+
return;
|
|
245
|
+
reconcileNodeOverrides(object, overrides, master);
|
|
246
|
+
}, [object, overrides, master, materialPass]);
|
|
247
|
+
// Unmount / instance swap: leave the instance as the GLB made it.
|
|
248
|
+
useEffect(() => {
|
|
249
|
+
if (!object)
|
|
250
|
+
return;
|
|
251
|
+
return () => restoreNodeOverrides(object, master);
|
|
252
|
+
}, [object, master]);
|
|
253
|
+
}
|
|
254
|
+
export default useNodeOverrides;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@3driseai/3drise-viewer",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.20",
|
|
4
4
|
"private": false,
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -39,6 +39,6 @@
|
|
|
39
39
|
},
|
|
40
40
|
"dependencies": {
|
|
41
41
|
"@3driseai/3drise-common": "^1.0.1",
|
|
42
|
-
"@3driseai/3drise-core": "^1.0.
|
|
42
|
+
"@3driseai/3drise-core": "^1.0.14"
|
|
43
43
|
}
|
|
44
44
|
}
|