@combeenation/3d-viewer 0.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/LICENSE +13 -0
- package/README.md +111 -0
- package/dist/types/api/classes/animationInterface.d.ts +8 -0
- package/dist/types/api/classes/dottedPath.d.ts +79 -0
- package/dist/types/api/classes/element.d.ts +153 -0
- package/dist/types/api/classes/event.d.ts +396 -0
- package/dist/types/api/classes/eventBroadcaster.d.ts +26 -0
- package/dist/types/api/classes/fuzzyMap.d.ts +7 -0
- package/dist/types/api/classes/parameter.d.ts +351 -0
- package/dist/types/api/classes/parameterObservable.d.ts +36 -0
- package/dist/types/api/classes/parameterizable.d.ts +15 -0
- package/dist/types/api/classes/placementAnimation.d.ts +45 -0
- package/dist/types/api/classes/variant.d.ts +253 -0
- package/dist/types/api/classes/variantInstance.d.ts +53 -0
- package/dist/types/api/classes/variantParameterizable.d.ts +17 -0
- package/dist/types/api/classes/viewer.d.ts +200 -0
- package/dist/types/api/classes/viewerLight.d.ts +66 -0
- package/dist/types/api/internal/lensRendering.d.ts +8 -0
- package/dist/types/api/internal/sceneSetup.d.ts +13 -0
- package/dist/types/api/manager/animationManager.d.ts +30 -0
- package/dist/types/api/manager/gltfExportManager.d.ts +78 -0
- package/dist/types/api/manager/sceneManager.d.ts +33 -0
- package/dist/types/api/manager/tagManager.d.ts +108 -0
- package/dist/types/api/manager/textureLoadManager.d.ts +22 -0
- package/dist/types/api/manager/variantInstanceManager.d.ts +103 -0
- package/dist/types/api/store/specStorage.d.ts +32 -0
- package/dist/types/api/util/babylonHelper.d.ts +235 -0
- package/dist/types/api/util/globalTypes.d.ts +436 -0
- package/dist/types/api/util/resourceHelper.d.ts +58 -0
- package/dist/types/api/util/sceneLoaderHelper.d.ts +44 -0
- package/dist/types/api/util/stringHelper.d.ts +13 -0
- package/dist/types/api/util/structureHelper.d.ts +9 -0
- package/dist/types/declaration.tsconfig.tsbuildinfo +1 -0
- package/dist/types/index.d.ts +27 -0
- package/package.json +87 -0
- package/src/api/classes/animationInterface.ts +10 -0
- package/src/api/classes/dottedPath.ts +181 -0
- package/src/api/classes/element.ts +731 -0
- package/src/api/classes/event.ts +452 -0
- package/src/api/classes/eventBroadcaster.ts +52 -0
- package/src/api/classes/fuzzyMap.ts +21 -0
- package/src/api/classes/parameter.ts +554 -0
- package/src/api/classes/parameterObservable.ts +73 -0
- package/src/api/classes/parameterizable.ts +87 -0
- package/src/api/classes/placementAnimation.ts +162 -0
- package/src/api/classes/variant.ts +933 -0
- package/src/api/classes/variantInstance.ts +123 -0
- package/src/api/classes/variantParameterizable.ts +85 -0
- package/src/api/classes/viewer.ts +742 -0
- package/src/api/classes/viewerLight.ts +339 -0
- package/src/api/internal/debugViewer.ts +90 -0
- package/src/api/internal/lensRendering.ts +9 -0
- package/src/api/internal/sceneSetup.ts +205 -0
- package/src/api/manager/animationManager.ts +143 -0
- package/src/api/manager/gltfExportManager.ts +236 -0
- package/src/api/manager/sceneManager.ts +136 -0
- package/src/api/manager/tagManager.ts +451 -0
- package/src/api/manager/textureLoadManager.ts +95 -0
- package/src/api/manager/variantInstanceManager.ts +298 -0
- package/src/api/store/specStorage.ts +68 -0
- package/src/api/util/babylonHelper.ts +822 -0
- package/src/api/util/globalTypes.ts +503 -0
- package/src/api/util/resourceHelper.ts +191 -0
- package/src/api/util/sceneLoaderHelper.ts +170 -0
- package/src/api/util/stringHelper.ts +30 -0
- package/src/api/util/structureHelper.ts +49 -0
- package/src/buildinfo.json +3 -0
- package/src/dev.ts +62 -0
- package/src/index.ts +79 -0
- package/src/types.d.ts +36 -0
|
@@ -0,0 +1,253 @@
|
|
|
1
|
+
import { DottedPath } from './dottedPath';
|
|
2
|
+
import { Element } from './element';
|
|
3
|
+
import { ParameterObservable } from './parameterObservable';
|
|
4
|
+
import { Parameterizable } from './parameterizable';
|
|
5
|
+
import { VariantParameterizable } from './variantParameterizable';
|
|
6
|
+
import { Viewer } from './viewer';
|
|
7
|
+
import { ViewerLight } from './viewerLight';
|
|
8
|
+
import { Light } from '@babylonjs/core/Lights/light';
|
|
9
|
+
import '@babylonjs/core/Loading/Plugins/babylonFileLoader';
|
|
10
|
+
import { Material } from '@babylonjs/core/Materials/material';
|
|
11
|
+
import { Mesh } from '@babylonjs/core/Meshes/mesh';
|
|
12
|
+
import { TransformNode } from '@babylonjs/core/Meshes/transformNode';
|
|
13
|
+
import { AssetContainer } from '@babylonjs/core/assetContainer';
|
|
14
|
+
import '@babylonjs/loaders/glTF/2.0/Extensions/KHR_draco_mesh_compression';
|
|
15
|
+
import '@babylonjs/loaders/glTF/2.0/Extensions/KHR_materials_clearcoat';
|
|
16
|
+
import '@babylonjs/loaders/glTF/2.0/Extensions/KHR_materials_ior';
|
|
17
|
+
import '@babylonjs/loaders/glTF/2.0/Extensions/KHR_materials_pbrSpecularGlossiness';
|
|
18
|
+
import '@babylonjs/loaders/glTF/2.0/Extensions/KHR_materials_sheen';
|
|
19
|
+
import '@babylonjs/loaders/glTF/2.0/Extensions/KHR_materials_specular';
|
|
20
|
+
import '@babylonjs/loaders/glTF/2.0/Extensions/KHR_materials_translucency';
|
|
21
|
+
import '@babylonjs/loaders/glTF/2.0/Extensions/KHR_materials_transmission';
|
|
22
|
+
import '@babylonjs/loaders/glTF/2.0/Extensions/KHR_materials_unlit';
|
|
23
|
+
import '@babylonjs/loaders/glTF/2.0/Extensions/KHR_materials_variants';
|
|
24
|
+
import '@babylonjs/loaders/glTF/2.0/Extensions/KHR_texture_basisu';
|
|
25
|
+
import '@babylonjs/loaders/glTF/2.0/Extensions/KHR_texture_transform';
|
|
26
|
+
import '@babylonjs/loaders/glTF/2.0/glTFLoader';
|
|
27
|
+
/**
|
|
28
|
+
* A concrete "Variant". Most of these are handled by either the {@link Viewer} or {@link VariantInstance}.
|
|
29
|
+
*/
|
|
30
|
+
export declare class Variant extends Parameterizable {
|
|
31
|
+
protected readonly _variantInstance: VariantInstance | null;
|
|
32
|
+
readonly name: string;
|
|
33
|
+
protected readonly _structureJson: StructureJson;
|
|
34
|
+
readonly viewer: Viewer;
|
|
35
|
+
readonly parent?: Variant | undefined;
|
|
36
|
+
assetContainer: AssetContainer;
|
|
37
|
+
readonly elements: Element[];
|
|
38
|
+
readonly viewerLights: ViewerLight[];
|
|
39
|
+
structureJson: StructureJson;
|
|
40
|
+
protected _dottedNodes: Map<DottedPath, TransformNode> | undefined;
|
|
41
|
+
protected readonly _children: Map<string, Variant>;
|
|
42
|
+
protected readonly _parameterObservers: Map<string, ParameterObserver[]>;
|
|
43
|
+
/**
|
|
44
|
+
* @internal
|
|
45
|
+
*/
|
|
46
|
+
private parametersInitialized;
|
|
47
|
+
/**
|
|
48
|
+
* Constructor.
|
|
49
|
+
*/
|
|
50
|
+
protected constructor(_variantInstance: VariantInstance | null, name: string, _structureJson: StructureJson, viewer: Viewer, parent?: Variant | undefined);
|
|
51
|
+
/**
|
|
52
|
+
* Creates the root {@link Variant}.
|
|
53
|
+
*/
|
|
54
|
+
static createRoot(structureJson: StructureJson, viewer: Viewer): Promise<Variant>;
|
|
55
|
+
/**
|
|
56
|
+
* Creates a {@link Variant} based on given parameters.
|
|
57
|
+
*
|
|
58
|
+
* @throws Error if "gltf" property is provided without a filename
|
|
59
|
+
*/
|
|
60
|
+
static create(variantInstance: VariantInstance | null, name: string, structureJson: StructureJson, viewer: Viewer, parent?: Variant): Promise<Variant>;
|
|
61
|
+
/**
|
|
62
|
+
* The ancestor {@link Variant}s ordered from top to bottom in the built tree.
|
|
63
|
+
*/
|
|
64
|
+
get ancestors(): Variant[];
|
|
65
|
+
/**
|
|
66
|
+
* The root {@link Variant}.
|
|
67
|
+
*/
|
|
68
|
+
get root(): Variant;
|
|
69
|
+
/**
|
|
70
|
+
* The {@link DottedPath} in the built tree of {@link Variant}s.
|
|
71
|
+
* E.g. "_.top-1.sub-2.sub-sub-3"
|
|
72
|
+
*/
|
|
73
|
+
get dottedPath(): DottedPath;
|
|
74
|
+
/**
|
|
75
|
+
* Gets the {@link VariantInstance} this variant was created for. There are variants without an instance (the "ghost"
|
|
76
|
+
* ones used for bootstrapping instances). The usage of {@link Variant}s without an instance is an absolute edge-case
|
|
77
|
+
* when deeply using the viewer api and working abroad best practices.
|
|
78
|
+
*/
|
|
79
|
+
get variantInstance(): VariantInstance | null;
|
|
80
|
+
/**
|
|
81
|
+
* The id representing a {@link DottedPath}.
|
|
82
|
+
*/
|
|
83
|
+
get id(): string;
|
|
84
|
+
/**
|
|
85
|
+
* The defined glTF Asset.
|
|
86
|
+
*/
|
|
87
|
+
get glTF(): Asset | undefined;
|
|
88
|
+
/**
|
|
89
|
+
* The defined glTF URI.
|
|
90
|
+
*/
|
|
91
|
+
get glTFUri(): string | undefined;
|
|
92
|
+
/**
|
|
93
|
+
* The inherited defined glTF URI.
|
|
94
|
+
*/
|
|
95
|
+
get inheritedGlTFUri(): string | undefined;
|
|
96
|
+
/**
|
|
97
|
+
* The TransformNodes of the {@link Variant}.
|
|
98
|
+
*/
|
|
99
|
+
get nodes(): TransformNode[];
|
|
100
|
+
/**
|
|
101
|
+
* The {@link ViewerLight}s of the {@link Variant}.
|
|
102
|
+
*/
|
|
103
|
+
get lights(): Light[];
|
|
104
|
+
/**
|
|
105
|
+
* All TransformNodes of the {@link Variant} mapped flat with a {@link DottedPath}.
|
|
106
|
+
*/
|
|
107
|
+
get dottedNodes(): Map<DottedPath, TransformNode>;
|
|
108
|
+
/**
|
|
109
|
+
* The Materials of the {@link Variant}.
|
|
110
|
+
*/
|
|
111
|
+
get materials(): Material[];
|
|
112
|
+
/**
|
|
113
|
+
* The cloned TransformNodes of all {@link Element}s created for this {@link Variant}.
|
|
114
|
+
*/
|
|
115
|
+
get elementNodes(): TransformNode[];
|
|
116
|
+
/**
|
|
117
|
+
* The cloned TransformNodes of all {@link Element}s created for this {@link Variant} flattened.
|
|
118
|
+
*/
|
|
119
|
+
get elementNodesFlat(): TransformNode[];
|
|
120
|
+
/**
|
|
121
|
+
* All {@link Element}s from this {@link Variant}'s parents.
|
|
122
|
+
*/
|
|
123
|
+
get inheritedElements(): Element[];
|
|
124
|
+
/**
|
|
125
|
+
* All {@link ViewerLight}s inherited from this {@link Variant}'s parents.
|
|
126
|
+
*/
|
|
127
|
+
get inheritedViewerLights(): ViewerLight[];
|
|
128
|
+
/**
|
|
129
|
+
* All TransformNodes inherited from this {@link Variant}'s parents.
|
|
130
|
+
*/
|
|
131
|
+
get inheritedNodes(): TransformNode[];
|
|
132
|
+
/**
|
|
133
|
+
* All TransformNodes inherited from this {@link Variant}'s parents mapped flat with a {@link DottedPath}.
|
|
134
|
+
*/
|
|
135
|
+
get inheritedDottedNodes(): Map<DottedPath, TransformNode>;
|
|
136
|
+
/**
|
|
137
|
+
* All Lights inherited from this {@link Variant}'s parents.
|
|
138
|
+
*/
|
|
139
|
+
get inheritedLights(): Light[];
|
|
140
|
+
/**
|
|
141
|
+
* The {@link ParameterDeclarations} inherited from this {@link Variant}'s parents.
|
|
142
|
+
*/
|
|
143
|
+
get inheritedParameterDeclaration(): ParameterDeclarations;
|
|
144
|
+
/**
|
|
145
|
+
* The {@link ParameterBag} inherited from this {@link Variant}'s parents.
|
|
146
|
+
*/
|
|
147
|
+
get inheritedParameters(): ParameterBag;
|
|
148
|
+
/**
|
|
149
|
+
* All Materials from this {@link Variant}'s parents.
|
|
150
|
+
*/
|
|
151
|
+
get inheritedMaterials(): Material[];
|
|
152
|
+
/**
|
|
153
|
+
* Gets the direct children of the current {@link Variant}.
|
|
154
|
+
*/
|
|
155
|
+
getChildren(): Promise<Variant[]>;
|
|
156
|
+
/**
|
|
157
|
+
* Gets a descendant {@link Variant} of the current {@link Variant} relative to its {@link DottedPath}.
|
|
158
|
+
* If you have the dotted path `_.product_x.variant_blue.with_yellow_highlight` in a tree and you operate on the
|
|
159
|
+
* `product_x`, you can call `this.getDescendant('variant_blue.with_yellow_highlight')` to get the lowermost
|
|
160
|
+
* {@link Variant}.
|
|
161
|
+
*/
|
|
162
|
+
getDescendant(dottedPath: DottedPathArgument): Promise<Variant>;
|
|
163
|
+
/**
|
|
164
|
+
* Gets the desired {@link Element} of the current {@link Variant} relative to its {@link DottedPath}.
|
|
165
|
+
* Uses the mechanism of {@link getDescendant} to resolve the appropriate variant in tree.
|
|
166
|
+
*/
|
|
167
|
+
getElement(dottedPath: DottedPathArgument): Promise<Element>;
|
|
168
|
+
/**
|
|
169
|
+
* Gets the desired {@link ViewerLight} of the current {@link Variant} relative to its {@link DottedPath}.
|
|
170
|
+
* Uses the mechanism of {@link getDescendant} to resolve the appropriate variant in tree.
|
|
171
|
+
*/
|
|
172
|
+
getViewerLight(dottedPath: DottedPathArgument): Promise<ViewerLight>;
|
|
173
|
+
/**
|
|
174
|
+
* A proxy for directly getting a Node from an {@link Element} by its {@link DottedPath}s.
|
|
175
|
+
*/
|
|
176
|
+
getNode(elementDottedPath: DottedPathArgument, nodeDottedPath: DottedPathArgument): Promise<TransformNode>;
|
|
177
|
+
/**
|
|
178
|
+
* A proxy for directly getting a Mesh from an {@link Element} by its {@link DottedPath}s.
|
|
179
|
+
*/
|
|
180
|
+
getMesh(elementDottedPath: DottedPathArgument, meshDottedPath: DottedPathArgument): Promise<Mesh | null>;
|
|
181
|
+
/**
|
|
182
|
+
* Creates a living clone of this {@link Variant}. Will clone all parent {@link Variant}s in tree.
|
|
183
|
+
*
|
|
184
|
+
* @emit {@link Event.VARIANT_CREATED}
|
|
185
|
+
* @ignore
|
|
186
|
+
*/
|
|
187
|
+
createLiving(variantInstance: VariantInstance, parameters?: ParameterBag): Promise<Variant>;
|
|
188
|
+
/**
|
|
189
|
+
* Destroys this {@link Variant}, all parents and destroy the {@link Element}s.
|
|
190
|
+
*/
|
|
191
|
+
destroy(): Variant;
|
|
192
|
+
/**
|
|
193
|
+
* Places the given {@link ParameterBag} in the {@link Variant}'s parameters, replaces all patterns in the
|
|
194
|
+
* {@link StructureJson}, broadcasts all {@link ParameterObserver}s and delegates them to its {@link Element}s.
|
|
195
|
+
*
|
|
196
|
+
* @emit {@link Event.VARIANT_PARAMETER_COMMITTED}
|
|
197
|
+
*/
|
|
198
|
+
commitParameters(parameters?: ParameterBag): Promise<Variant>;
|
|
199
|
+
/**
|
|
200
|
+
* Adds an observer function for camera matrix changes for given `dottedPath` representing the {@link Element}
|
|
201
|
+
* and the `traceable`. The `observer` gets 2 parameters: the `AbstractMesh` and a `ClientRect` object.
|
|
202
|
+
*/
|
|
203
|
+
addTraceableObserver(dottedPath: DottedPathArgument, observer: CallableFunction, payload?: any): Promise<Element>;
|
|
204
|
+
/**
|
|
205
|
+
* Loads {@link glTFUri} with assets, adds them to the {@link Variant}'s `assetContainer` and deactivates the meshes.
|
|
206
|
+
* (for further processing).
|
|
207
|
+
* @emits {@link Event.ASSET_LOADING_START}
|
|
208
|
+
* @emits {@link Event.ASSET_LOADING_END}
|
|
209
|
+
*/
|
|
210
|
+
protected loadAssets(): Promise<Variant>;
|
|
211
|
+
/**
|
|
212
|
+
* Commits given parameters to all {@link Element}s.
|
|
213
|
+
*/
|
|
214
|
+
protected commitParametersToElements(parameters: ParameterBag): Promise<void>;
|
|
215
|
+
/**
|
|
216
|
+
* Commits given parameters to all {@link ViewerLight}s.
|
|
217
|
+
*/
|
|
218
|
+
protected commitParametersToViewerLights(parameters: ParameterBag): Promise<void>;
|
|
219
|
+
/**
|
|
220
|
+
* Commits given parameters to a {@link VariantParameterizable} and updates the according definition with given
|
|
221
|
+
* key in the {@link StructureJson}. The `definitionKey` "elements" for example will update the definition in
|
|
222
|
+
* `this.structureJson.elements`.
|
|
223
|
+
*/
|
|
224
|
+
protected commitParametersToVariantParameterizable(parameters: ParameterBag, parameterizable: VariantParameterizable, definitionKey: string): Promise<ParameterObservable>;
|
|
225
|
+
/**
|
|
226
|
+
* Commits given {@link Parameter} to the {@link Variant}'s {@link Element}s.
|
|
227
|
+
*/
|
|
228
|
+
protected commitParameterToElements(parameter: string, value: ParameterValue): Promise<Variant>;
|
|
229
|
+
/**
|
|
230
|
+
* Commits given {@link Parameter} to the {@link Variant}'s {@link Element}s.
|
|
231
|
+
*/
|
|
232
|
+
protected commitParameterToViewerLights(parameter: string, value: ParameterValue): Promise<Variant>;
|
|
233
|
+
/**
|
|
234
|
+
* Adds the default {@link ParameterObserver}s which are called every time {@link commitParameters} is called.
|
|
235
|
+
*/
|
|
236
|
+
protected addParameterObservers(): Variant;
|
|
237
|
+
/**
|
|
238
|
+
* Creates {@link Element}s and clones nodes into them.
|
|
239
|
+
*/
|
|
240
|
+
protected createElements(forInstance?: string): Promise<Variant>;
|
|
241
|
+
/**
|
|
242
|
+
* Creates {@link ViewerLight}s.
|
|
243
|
+
*/
|
|
244
|
+
protected createViewerLights(): Promise<Variant>;
|
|
245
|
+
/**
|
|
246
|
+
* Bootstrapping for parameters. It sets the `parametersInitialized` to true for all ancestors.
|
|
247
|
+
*/
|
|
248
|
+
protected bootstrapParameters(parameters?: ParameterBag): Promise<Variant>;
|
|
249
|
+
/**
|
|
250
|
+
* Ensures there is at least one "Main" {@link Element} for the {@link Variant} with all "root nodes" defined in path.
|
|
251
|
+
*/
|
|
252
|
+
protected createElementDefinitionsIfNotExist(): void;
|
|
253
|
+
}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { Element } from './element';
|
|
2
|
+
import { EventBroadcaster } from './eventBroadcaster';
|
|
3
|
+
import { ParameterObservable } from './parameterObservable';
|
|
4
|
+
import { Variant } from './variant';
|
|
5
|
+
import { ViewerLight } from './viewerLight';
|
|
6
|
+
import { Mesh } from '@babylonjs/core/Meshes/mesh';
|
|
7
|
+
/**
|
|
8
|
+
* Class VariantInstance.
|
|
9
|
+
*/
|
|
10
|
+
export declare class VariantInstance extends EventBroadcaster {
|
|
11
|
+
name: string;
|
|
12
|
+
protected _variant: Variant | null;
|
|
13
|
+
/**
|
|
14
|
+
* Constructor
|
|
15
|
+
*/
|
|
16
|
+
protected constructor(name: string);
|
|
17
|
+
/**
|
|
18
|
+
* Creates a living clone of the given source {@link Variant} and instances a {@link VariantInstance} with given name
|
|
19
|
+
* and {@link ParameterBag}.
|
|
20
|
+
*/
|
|
21
|
+
static createLiving(sourceVariant: Variant, name: string, parameters?: ParameterBag): Promise<VariantInstance>;
|
|
22
|
+
/**
|
|
23
|
+
* WORK IN PROGRESS
|
|
24
|
+
*/
|
|
25
|
+
/**
|
|
26
|
+
* Gets the {@link Variant} attached to the {@link VariantInstance}.
|
|
27
|
+
*/
|
|
28
|
+
get variant(): Variant;
|
|
29
|
+
/**
|
|
30
|
+
* A proxy for {@link Variant.getElement}.
|
|
31
|
+
*/
|
|
32
|
+
getElement(dottedPath: DottedPathArgument): Promise<Element>;
|
|
33
|
+
/**
|
|
34
|
+
* A proxy for {@link Variant.getViewerLight}.
|
|
35
|
+
*/
|
|
36
|
+
getViewerLight(dottedPath: DottedPathArgument): Promise<ViewerLight>;
|
|
37
|
+
/**
|
|
38
|
+
* A proxy for {@link Variant.getNode}.
|
|
39
|
+
*/
|
|
40
|
+
getNode(elementDottedPath: DottedPathArgument, nodeDottedPath: DottedPathArgument): Promise<TransformNode>;
|
|
41
|
+
/**
|
|
42
|
+
* A proxy for {@link Variant.getMesh}.
|
|
43
|
+
*/
|
|
44
|
+
getMesh(elementDottedPath: DottedPathArgument, meshDottedPath: DottedPathArgument): Promise<Mesh | null>;
|
|
45
|
+
/**
|
|
46
|
+
* A proxy for {@link Variant.commitParameters}.
|
|
47
|
+
*/
|
|
48
|
+
commitParameters(parameters?: ParameterBag): Promise<Variant>;
|
|
49
|
+
/**
|
|
50
|
+
* A proxy for {@link ParameterObservable.commitParameter}.
|
|
51
|
+
*/
|
|
52
|
+
commitParameter(parameter: string, value: ParameterValue): Promise<ParameterObservable>;
|
|
53
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { Parameterizable } from './../classes/parameterizable';
|
|
2
|
+
import { Variant } from './../classes/variant';
|
|
3
|
+
export declare abstract class VariantParameterizable extends Parameterizable {
|
|
4
|
+
readonly variant: Variant;
|
|
5
|
+
readonly name: string;
|
|
6
|
+
protected readonly _parameterObservers: Map<string, ParameterObserver[]>;
|
|
7
|
+
protected constructor(variant: Variant, name: string);
|
|
8
|
+
/**
|
|
9
|
+
* Gets the inherited parameters from the {@link Variant} with cleaned {@link Parameterizable} prefix.
|
|
10
|
+
*/
|
|
11
|
+
get inheritedParameters(): ParameterBag;
|
|
12
|
+
/**
|
|
13
|
+
* Places the given {@link ParameterBag} in the {@link VariantParameterizable}'s parameters, replaces all patterns in
|
|
14
|
+
* the {@link StructureJson} and broadcasts all {@link ParameterObserver}s.
|
|
15
|
+
*/
|
|
16
|
+
commitParameters(parameters?: ParameterBag): Promise<VariantParameterizable>;
|
|
17
|
+
}
|
|
@@ -0,0 +1,200 @@
|
|
|
1
|
+
import { AnimationManager } from '../manager/animationManager';
|
|
2
|
+
import { GltfExportManager } from '../manager/gltfExportManager';
|
|
3
|
+
import { SceneManager } from '../manager/sceneManager';
|
|
4
|
+
import { TagManager } from '../manager/tagManager';
|
|
5
|
+
import { VariantInstanceManager } from '../manager/variantInstanceManager';
|
|
6
|
+
import { AnimationInterface } from './animationInterface';
|
|
7
|
+
import { EventBroadcaster } from './eventBroadcaster';
|
|
8
|
+
import { VariantInstance } from './variantInstance';
|
|
9
|
+
import { Engine } from '@babylonjs/core/Engines/engine';
|
|
10
|
+
import { Mesh } from '@babylonjs/core/Meshes/mesh';
|
|
11
|
+
import { Scene } from '@babylonjs/core/scene';
|
|
12
|
+
/**
|
|
13
|
+
* The main exposed object. This is the entry point into the application
|
|
14
|
+
*
|
|
15
|
+
* ```js
|
|
16
|
+
* const canvas = document.getElementById( 'babylon-canvas' );
|
|
17
|
+
* const viewer = Viewer( canvas, '/path/to/index.json' );
|
|
18
|
+
* ```
|
|
19
|
+
* The class does nothing on its own and needs to {@link bootstrap}
|
|
20
|
+
*/
|
|
21
|
+
export declare class Viewer extends EventBroadcaster {
|
|
22
|
+
readonly canvas: HTMLCanvasElement;
|
|
23
|
+
protected structureJson: string | StructureJson;
|
|
24
|
+
protected _scene: Scene | null;
|
|
25
|
+
protected _animationManager: AnimationManager | null;
|
|
26
|
+
protected _sceneManager: SceneManager | null;
|
|
27
|
+
protected _tagManager: TagManager | null;
|
|
28
|
+
protected _gltfExportManager: GltfExportManager | null;
|
|
29
|
+
protected _variantInstances: VariantInstanceManager | null;
|
|
30
|
+
protected _cloneMaterialsOnMutation: boolean;
|
|
31
|
+
protected _isRenderLoopPaused: boolean;
|
|
32
|
+
protected _inspectorLoaded: boolean;
|
|
33
|
+
protected _nodeNamingStrategyHandler: NodeNamingStrategyHandler | null;
|
|
34
|
+
static version: string;
|
|
35
|
+
private static readonly _autofocusConstants;
|
|
36
|
+
/**
|
|
37
|
+
* Help function for automatically creating a valid Spec from a list of variant names and dedicated GLB/babylon URLs.
|
|
38
|
+
* This data is most likely coming from babylon assets from the Combeenation system but other sources are also valid.
|
|
39
|
+
*/
|
|
40
|
+
static generateSpec(genData: SpecGenerationData[]): AutoSpecStructureJson;
|
|
41
|
+
/**
|
|
42
|
+
* Constructor
|
|
43
|
+
*/
|
|
44
|
+
constructor(canvas: HTMLCanvasElement, structureJson: string | StructureJson);
|
|
45
|
+
/**
|
|
46
|
+
* Gets the Babylon.js Scene that is attached to the instance.
|
|
47
|
+
*
|
|
48
|
+
* @throws Error if the `scene` has not been initialized.
|
|
49
|
+
*/
|
|
50
|
+
get scene(): Scene;
|
|
51
|
+
/**
|
|
52
|
+
* Gets the {@link SceneManager} attached to the viewer.
|
|
53
|
+
*
|
|
54
|
+
* @throws Error if the {@link SceneManager} has not been initialized.
|
|
55
|
+
*/
|
|
56
|
+
get sceneManager(): SceneManager;
|
|
57
|
+
/**
|
|
58
|
+
* Gets the {@link GltfExportManager} attached to the viewer.
|
|
59
|
+
*
|
|
60
|
+
* @throws Error if the {@link GltfExportManager} has not been initialized.
|
|
61
|
+
*/
|
|
62
|
+
get gltfExportManager(): GltfExportManager;
|
|
63
|
+
/**
|
|
64
|
+
* Gets the Babylon.js Engine that is attached to the viewer.
|
|
65
|
+
*/
|
|
66
|
+
get engine(): Engine;
|
|
67
|
+
/**
|
|
68
|
+
* Gets the {@link VariantInstanceManager} attached to the viewer.
|
|
69
|
+
*
|
|
70
|
+
* @throws Error if the {@link VariantInstanceManager} has not been initialized.
|
|
71
|
+
*/
|
|
72
|
+
get variantInstances(): VariantInstanceManager;
|
|
73
|
+
/**
|
|
74
|
+
* Gets the {@link AnimationManager} attached to the viewer.
|
|
75
|
+
*
|
|
76
|
+
* @throws Error if the {@link AnimationManager} has not been initialized.
|
|
77
|
+
*/
|
|
78
|
+
get animationManager(): AnimationManager;
|
|
79
|
+
get tagManager(): TagManager;
|
|
80
|
+
/**
|
|
81
|
+
* Gets the `cloneMaterialsOnMutation` flag, as defined in the spec
|
|
82
|
+
*/
|
|
83
|
+
get cloneMaterialsOnMutation(): boolean;
|
|
84
|
+
/**
|
|
85
|
+
* Gets the strategy handler for naming cloned nodes.
|
|
86
|
+
*/
|
|
87
|
+
get nodeNamingStrategyHandler(): NodeNamingStrategyHandler;
|
|
88
|
+
/**
|
|
89
|
+
* Sets the strategy handler for naming cloned nodes.\
|
|
90
|
+
* Check the docs of the tag managers
|
|
91
|
+
* [renaming](./../pages/documentation/Tag-Manager.html#uniqueness-of-node-and-tag-names)
|
|
92
|
+
* chapter for further details.
|
|
93
|
+
*/
|
|
94
|
+
set nodeNamingStrategyHandler(value: NodeNamingStrategyHandler);
|
|
95
|
+
/**
|
|
96
|
+
* Starts the application. This will
|
|
97
|
+
* * load the given "index" JSON file
|
|
98
|
+
* * setup the scene with the "scene" JSON file
|
|
99
|
+
* * create an (optional) default setup with different variant settings
|
|
100
|
+
* * sets up resizing by attaching a debounced version of {@link resize}
|
|
101
|
+
*
|
|
102
|
+
* @throws Error if any of the files is not found/valid
|
|
103
|
+
*
|
|
104
|
+
* @emits {@link Event.BOOTSTRAP_START}
|
|
105
|
+
* @emits {@link Event.BOOTSTRAP_END}
|
|
106
|
+
*/
|
|
107
|
+
bootstrap(tagManagerParameterValues: TagManagerParameterValue[]): Promise<Viewer>;
|
|
108
|
+
/**
|
|
109
|
+
* Enables the Babylon.js [Inspector](https://doc.babylonjs.com/toolsAndResources/tools/inspector).\
|
|
110
|
+
* Due to the additional size of the inspector, the CDN version is used instead of shipping the required code with
|
|
111
|
+
* the viewer.\
|
|
112
|
+
* This means that the code will be downloaded only when needed and calling `enableDebugLayer` can take a little while
|
|
113
|
+
* depending on your internet connection etc.
|
|
114
|
+
*/
|
|
115
|
+
enableDebugLayer(options?: IInspectorOptions): Promise<void>;
|
|
116
|
+
/**
|
|
117
|
+
* Destroys all registered {@link VariantInstance}s that are registered
|
|
118
|
+
*/
|
|
119
|
+
destroyVariantInstances(): Viewer;
|
|
120
|
+
/**
|
|
121
|
+
* Trigger a resize event for the `Engine`
|
|
122
|
+
*/
|
|
123
|
+
resize(): Viewer;
|
|
124
|
+
/**
|
|
125
|
+
* A convenience method for directly getting a Node from a {@link VariantInstance} and an {@link Element} by its
|
|
126
|
+
* {@link DottedPath}s.
|
|
127
|
+
*/
|
|
128
|
+
getNode(variantInstanceName: string, elementDottedPath: DottedPathArgument, nodeDottedPath: DottedPathArgument): Promise<TransformNode>;
|
|
129
|
+
/**
|
|
130
|
+
* A convenience method for directly getting a Node from a {@link VariantInstance} and an {@link Element} by its
|
|
131
|
+
* {@link DottedPath}s.
|
|
132
|
+
*/
|
|
133
|
+
getMesh(variantInstanceName: string, elementDottedPath: DottedPathArgument, meshDottedPath: DottedPathArgument): Promise<Mesh | null>;
|
|
134
|
+
/**
|
|
135
|
+
* Switches the camera
|
|
136
|
+
*
|
|
137
|
+
* @emits {@link Event.CAMERA_SWITCHED}
|
|
138
|
+
*/
|
|
139
|
+
switchCamera(newCamera: string, reset?: boolean): Viewer;
|
|
140
|
+
/**
|
|
141
|
+
* Moves or animates the active camera to given `placement`.
|
|
142
|
+
*/
|
|
143
|
+
moveActiveCameraTo(placement: string | PlacementDefinition, animation?: string | AnimationDefinition): Promise<AnimationInterface>;
|
|
144
|
+
/**
|
|
145
|
+
* Takes a sceenshot the the current scene. The result is a string containing a base64 encoded image
|
|
146
|
+
*/
|
|
147
|
+
screenshot(settings?: ScreenshotSettings): Promise<string>;
|
|
148
|
+
/**
|
|
149
|
+
* Checks whether the browser is capable of handling XR.
|
|
150
|
+
*/
|
|
151
|
+
isBrowserARCapable(): Promise<boolean>;
|
|
152
|
+
/**
|
|
153
|
+
* Calculates the bounding box from all visible meshes on the scene.
|
|
154
|
+
*/
|
|
155
|
+
calculateBoundingBox(excludeGeometry?: ExcludedGeometryList): Promise<Mesh>;
|
|
156
|
+
/**
|
|
157
|
+
* Focuses the camera to see every visible mesh in scene and tries to optimize wheel precision and panning
|
|
158
|
+
*/
|
|
159
|
+
autofocusActiveCamera(settings?: AutofocusSettings): Promise<void>;
|
|
160
|
+
/**
|
|
161
|
+
* Resets everything by calling {@link destroy} to clear all references and {@link bootstrap} to setup a clean
|
|
162
|
+
* environment
|
|
163
|
+
*/
|
|
164
|
+
reset(tagManagerParameterValues: TagManagerParameterValue[]): Promise<Viewer>;
|
|
165
|
+
/**
|
|
166
|
+
* Destroys
|
|
167
|
+
*
|
|
168
|
+
* * all {@link VariantInstance}s using {@link destroyVariantInstances}
|
|
169
|
+
* * calling `dispose` on the `Engine` and `Scene`
|
|
170
|
+
*/
|
|
171
|
+
destroy(): Viewer;
|
|
172
|
+
/**
|
|
173
|
+
* Show coordinate system with given dimension (for debugging purpose).
|
|
174
|
+
*/
|
|
175
|
+
showWorldCoordinates(dimension: number): void;
|
|
176
|
+
/**
|
|
177
|
+
* Pause render loop.
|
|
178
|
+
*/
|
|
179
|
+
pauseRendering(): void;
|
|
180
|
+
/**
|
|
181
|
+
* Resume render loop when paused.
|
|
182
|
+
*/
|
|
183
|
+
resumeRendering(): void;
|
|
184
|
+
/**
|
|
185
|
+
* @emits {@link Event.SCENE_PROCESSING_START}
|
|
186
|
+
* @emits {@link Event.SCENE_PROCESSING_END}
|
|
187
|
+
*/
|
|
188
|
+
protected initScene(): Promise<Scene>;
|
|
189
|
+
/**
|
|
190
|
+
* Register custom file loader for babylon files which adds "missing-material" metadata to meshes which reference
|
|
191
|
+
* materials that are not present in the `materials` section of the given babylon file.
|
|
192
|
+
*
|
|
193
|
+
* Required for babylon files & materials loaded from "Combeenation configurator assets".
|
|
194
|
+
*/
|
|
195
|
+
protected initCbnBabylonLoaderPlugin(): void;
|
|
196
|
+
/**
|
|
197
|
+
* Batch creation of multiple {@link VariantInstance} objects with a {@link SetupJson} object passed
|
|
198
|
+
*/
|
|
199
|
+
protected createVariantInstances(): Promise<VariantInstance[]>;
|
|
200
|
+
}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { DottedPath } from './dottedPath';
|
|
2
|
+
import { Variant } from './variant';
|
|
3
|
+
import { VariantParameterizable } from './variantParameterizable';
|
|
4
|
+
import { ShadowGenerator } from '@babylonjs/core/Lights/Shadows/shadowGenerator';
|
|
5
|
+
import '@babylonjs/core/Lights/Shadows/shadowGeneratorSceneComponent';
|
|
6
|
+
import { Light } from '@babylonjs/core/Lights/light';
|
|
7
|
+
import { ShadowLight } from '@babylonjs/core/Lights/shadowLight';
|
|
8
|
+
import '@babylonjs/loaders/glTF/2.0/Extensions/KHR_lights_punctual';
|
|
9
|
+
/**
|
|
10
|
+
* A {@link ViewerLight} of a {@link Variant}. Acts as a container for Babylon.js lights. Lives only in the context of a
|
|
11
|
+
* {@link Variant}.
|
|
12
|
+
*/
|
|
13
|
+
export declare class ViewerLight extends VariantParameterizable {
|
|
14
|
+
readonly variant: Variant;
|
|
15
|
+
readonly name: string;
|
|
16
|
+
protected _light: Light | undefined;
|
|
17
|
+
/**
|
|
18
|
+
* Constructor.
|
|
19
|
+
*/
|
|
20
|
+
protected constructor(variant: Variant, name: string);
|
|
21
|
+
/**
|
|
22
|
+
* Creates a {@link ViewerLight} with given name.
|
|
23
|
+
*/
|
|
24
|
+
static create(variant: Variant, name: string): Promise<ViewerLight>;
|
|
25
|
+
/**
|
|
26
|
+
* The wrapped Light.
|
|
27
|
+
*/
|
|
28
|
+
get light(): Light;
|
|
29
|
+
/**
|
|
30
|
+
* The {@link DottedPath} in the built tree of {@link ViewerLight}s.
|
|
31
|
+
* E.g. "_.top-1.sub-2.sub-sub-3.el-1"
|
|
32
|
+
*/
|
|
33
|
+
get dottedPath(): DottedPath;
|
|
34
|
+
/**
|
|
35
|
+
* The id representing a {@link DottedPath}.
|
|
36
|
+
*/
|
|
37
|
+
get id(): string;
|
|
38
|
+
/**
|
|
39
|
+
* The {@link LightDefinition} of the {@link ViewerLight}.
|
|
40
|
+
*/
|
|
41
|
+
get definition(): LightDefinition;
|
|
42
|
+
/**
|
|
43
|
+
* The type of the {@link ViewerLight}'s light.
|
|
44
|
+
*/
|
|
45
|
+
get type(): string;
|
|
46
|
+
/**
|
|
47
|
+
* @see {@link VariantParameterizable.commitParameters}
|
|
48
|
+
* @emit {@link Event.VIEWER_LIGHT_PARAMETER_COMMITTED}
|
|
49
|
+
*/
|
|
50
|
+
commitParameters(parameters?: ParameterBag): Promise<VariantParameterizable>;
|
|
51
|
+
/**
|
|
52
|
+
* Adds the default {@link ParameterObserver}s which are called every time {@link commitParameters} is called.
|
|
53
|
+
*/
|
|
54
|
+
protected addParameterObservers(): ViewerLight;
|
|
55
|
+
/**
|
|
56
|
+
* @param definition
|
|
57
|
+
* @protected
|
|
58
|
+
*/
|
|
59
|
+
protected createBabylonLightFromDefinition(definition: LightDefinition): Promise<Light>;
|
|
60
|
+
/**
|
|
61
|
+
* @param babylonLight
|
|
62
|
+
* @param definition
|
|
63
|
+
* @protected
|
|
64
|
+
*/
|
|
65
|
+
protected processShadowGenerator(babylonLight: ShadowLight, definition: ShadowGeneratorDefinition): Promise<ShadowGenerator>;
|
|
66
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Group the required LensRendering dependencies into a single file to allow a single "import"
|
|
3
|
+
*
|
|
4
|
+
* @internal
|
|
5
|
+
*/
|
|
6
|
+
import { LensRenderingPipeline } from '@babylonjs/core/PostProcesses/RenderPipeline/Pipelines/lensRenderingPipeline';
|
|
7
|
+
import '@babylonjs/core/Rendering/depthRendererSceneComponent';
|
|
8
|
+
export { LensRenderingPipeline };
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { Engine } from '@babylonjs/core/Engines/engine';
|
|
2
|
+
import '@babylonjs/core/Helpers/sceneHelpers';
|
|
3
|
+
import '@babylonjs/core/Materials/Textures/Loaders/ddsTextureLoader';
|
|
4
|
+
import { Color4 } from '@babylonjs/core/Maths/math.color';
|
|
5
|
+
import { Scene } from '@babylonjs/core/scene';
|
|
6
|
+
declare const defaultSceneClearColor: Color4;
|
|
7
|
+
declare const defaultEnvHelperColor: Color4;
|
|
8
|
+
/**
|
|
9
|
+
* @param engine
|
|
10
|
+
* @param sceneJson
|
|
11
|
+
*/
|
|
12
|
+
declare const sceneSetup: (engine: Engine, sceneJson: SceneJson) => Promise<Scene>;
|
|
13
|
+
export { sceneSetup, defaultSceneClearColor, defaultEnvHelperColor };
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { AnimationInterface } from '../classes/animationInterface';
|
|
2
|
+
import { Scene as BabylonScene } from '@babylonjs/core/scene';
|
|
3
|
+
export declare class AnimationManager {
|
|
4
|
+
protected scene: BabylonScene;
|
|
5
|
+
animations: AnimationInterface[];
|
|
6
|
+
/**
|
|
7
|
+
* Constructor.
|
|
8
|
+
*/
|
|
9
|
+
protected constructor(scene: BabylonScene);
|
|
10
|
+
/**
|
|
11
|
+
* Creates an {@link AnimationManager} based on given Babylon.js scene.
|
|
12
|
+
*/
|
|
13
|
+
static create(scene: BabylonScene): Promise<AnimationManager>;
|
|
14
|
+
/**
|
|
15
|
+
* @deprecated Use viewer.moveCameraTo().
|
|
16
|
+
*/
|
|
17
|
+
resetCamera(animate?: boolean): void;
|
|
18
|
+
/**
|
|
19
|
+
* @deprecated Use viewer.moveCameraTo().
|
|
20
|
+
*/
|
|
21
|
+
animateArcRotateCamera(targetAlpha: number, targetBeta: number, targetRadius: number): void;
|
|
22
|
+
/**
|
|
23
|
+
* Stops and kills all running animations.
|
|
24
|
+
*/
|
|
25
|
+
killAllAnimations(): void;
|
|
26
|
+
/**
|
|
27
|
+
* @see {@link PlacementAnimation.play}
|
|
28
|
+
*/
|
|
29
|
+
animateToPlacement(mutable: object, placement: PlacementDefinition | string, animation?: AnimationDefinition | string): Promise<AnimationInterface>;
|
|
30
|
+
}
|