@combeenation/3d-viewer 5.0.1 → 5.0.3-beta2

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 (109) hide show
  1. package/README.md +111 -114
  2. package/dist/lib-cjs/api/classes/animationInterface.d.ts +8 -8
  3. package/dist/lib-cjs/api/classes/animationInterface.js +1 -1
  4. package/dist/lib-cjs/api/classes/dottedPath.d.ts +79 -79
  5. package/dist/lib-cjs/api/classes/dottedPath.js +187 -187
  6. package/dist/lib-cjs/api/classes/element.d.ts +139 -139
  7. package/dist/lib-cjs/api/classes/element.js +794 -794
  8. package/dist/lib-cjs/api/classes/element.js.map +1 -1
  9. package/dist/lib-cjs/api/classes/elementParameterizable.d.ts +14 -0
  10. package/dist/lib-cjs/api/classes/elementParameterizable.js +135 -0
  11. package/dist/lib-cjs/api/classes/elementParameterizable.js.map +1 -0
  12. package/dist/lib-cjs/api/classes/event.d.ts +326 -326
  13. package/dist/lib-cjs/api/classes/event.js +371 -371
  14. package/dist/lib-cjs/api/classes/eventBroadcaster.d.ts +26 -26
  15. package/dist/lib-cjs/api/classes/eventBroadcaster.js +53 -53
  16. package/dist/lib-cjs/api/classes/parameter.d.ts +316 -259
  17. package/dist/lib-cjs/api/classes/parameter.js +451 -388
  18. package/dist/lib-cjs/api/classes/parameter.js.map +1 -1
  19. package/dist/lib-cjs/api/classes/parameterObservable.d.ts +36 -36
  20. package/dist/lib-cjs/api/classes/parameterObservable.js +101 -101
  21. package/dist/lib-cjs/api/classes/parameterizable.d.ts +15 -15
  22. package/dist/lib-cjs/api/classes/parameterizable.js +149 -149
  23. package/dist/lib-cjs/api/classes/placementAnimation.d.ts +44 -44
  24. package/dist/lib-cjs/api/classes/placementAnimation.js +163 -163
  25. package/dist/lib-cjs/api/classes/variant.d.ts +234 -234
  26. package/dist/lib-cjs/api/classes/variant.js +1154 -1154
  27. package/dist/lib-cjs/api/classes/variantInstance.d.ts +45 -45
  28. package/dist/lib-cjs/api/classes/variantInstance.js +108 -108
  29. package/dist/lib-cjs/api/classes/variantParameterizable.d.ts +17 -17
  30. package/dist/lib-cjs/api/classes/variantParameterizable.js +99 -99
  31. package/dist/lib-cjs/api/classes/viewer.d.ts +177 -175
  32. package/dist/lib-cjs/api/classes/viewer.js +717 -701
  33. package/dist/lib-cjs/api/classes/viewer.js.map +1 -1
  34. package/dist/lib-cjs/api/classes/viewerLight.d.ts +66 -66
  35. package/dist/lib-cjs/api/classes/viewerLight.js +392 -392
  36. package/dist/lib-cjs/api/internal/debugViewer.d.ts +13 -13
  37. package/dist/lib-cjs/api/internal/debugViewer.js +86 -86
  38. package/dist/lib-cjs/api/internal/lensRendering.d.ts +8 -8
  39. package/dist/lib-cjs/api/internal/lensRendering.js +11 -11
  40. package/dist/lib-cjs/api/internal/sceneSetup.d.ts +13 -10
  41. package/dist/lib-cjs/api/internal/sceneSetup.js +238 -234
  42. package/dist/lib-cjs/api/internal/sceneSetup.js.map +1 -1
  43. package/dist/lib-cjs/api/manager/animationManager.d.ts +29 -29
  44. package/dist/lib-cjs/api/manager/animationManager.js +130 -130
  45. package/dist/lib-cjs/api/manager/gltfExportManager.d.ts +65 -65
  46. package/dist/lib-cjs/api/manager/gltfExportManager.js +223 -222
  47. package/dist/lib-cjs/api/manager/gltfExportManager.js.map +1 -1
  48. package/dist/lib-cjs/api/manager/sceneManager.d.ts +31 -32
  49. package/dist/lib-cjs/api/manager/sceneManager.js +153 -132
  50. package/dist/lib-cjs/api/manager/sceneManager.js.map +1 -1
  51. package/dist/lib-cjs/api/manager/variantInstanceManager.d.ts +92 -92
  52. package/dist/lib-cjs/api/manager/variantInstanceManager.js +335 -335
  53. package/dist/lib-cjs/api/store/specStorage.d.ts +24 -24
  54. package/dist/lib-cjs/api/store/specStorage.js +51 -51
  55. package/dist/lib-cjs/api/util/babylonHelper.d.ts +174 -166
  56. package/dist/lib-cjs/api/util/babylonHelper.js +575 -497
  57. package/dist/lib-cjs/api/util/babylonHelper.js.map +1 -1
  58. package/dist/lib-cjs/api/util/globalTypes.d.ts +366 -356
  59. package/dist/lib-cjs/api/util/globalTypes.js +1 -1
  60. package/dist/lib-cjs/api/util/resourceHelper.d.ts +58 -53
  61. package/dist/lib-cjs/api/util/resourceHelper.js +257 -242
  62. package/dist/lib-cjs/api/util/resourceHelper.js.map +1 -1
  63. package/dist/lib-cjs/api/util/stringHelper.d.ts +9 -9
  64. package/dist/lib-cjs/api/util/stringHelper.js +25 -25
  65. package/dist/lib-cjs/api/util/structureHelper.d.ts +9 -9
  66. package/dist/lib-cjs/api/util/structureHelper.js +48 -44
  67. package/dist/lib-cjs/api/util/structureHelper.js.map +1 -1
  68. package/dist/lib-cjs/buildinfo.json +3 -3
  69. package/dist/lib-cjs/index.d.ts +49 -49
  70. package/dist/lib-cjs/index.js +89 -89
  71. package/dist/webpack-stats.json +0 -0
  72. package/package.json +87 -87
  73. package/src/api/classes/animationInterface.ts +10 -10
  74. package/src/api/classes/dottedPath.ts +181 -181
  75. package/src/api/classes/element.ts +690 -692
  76. package/src/api/classes/event.ts +367 -367
  77. package/src/api/classes/eventBroadcaster.ts +52 -52
  78. package/src/api/classes/parameter.ts +474 -405
  79. package/src/api/classes/parameterObservable.ts +100 -100
  80. package/src/api/classes/parameterizable.ts +87 -87
  81. package/src/api/classes/placementAnimation.ts +160 -160
  82. package/src/api/classes/variant.ts +845 -845
  83. package/src/api/classes/variantInstance.ts +97 -97
  84. package/src/api/classes/variantParameterizable.ts +85 -85
  85. package/src/api/classes/viewer.ts +650 -624
  86. package/src/api/classes/viewerLight.ts +334 -334
  87. package/src/api/internal/debugViewer.ts +90 -90
  88. package/src/api/internal/lensRendering.ts +10 -10
  89. package/src/api/internal/sceneSetup.ts +204 -201
  90. package/src/api/manager/animationManager.ts +142 -142
  91. package/src/api/manager/gltfExportManager.ts +191 -191
  92. package/src/api/manager/sceneManager.ts +128 -102
  93. package/src/api/manager/variantInstanceManager.ts +265 -265
  94. package/src/api/store/specStorage.ts +51 -51
  95. package/src/api/util/babylonHelper.ts +628 -538
  96. package/src/api/util/globalTypes.ts +413 -402
  97. package/src/api/util/resourceHelper.ts +189 -173
  98. package/src/api/util/stringHelper.ts +23 -23
  99. package/src/api/util/structureHelper.ts +49 -43
  100. package/src/buildinfo.json +3 -3
  101. package/src/commonjs.tsconfig.json +10 -10
  102. package/src/declaration.tsconfig.json +8 -8
  103. package/src/dev.ts +42 -42
  104. package/src/es6.tsconfig.json +10 -10
  105. package/src/index.ts +94 -94
  106. package/src/pagesconfig.json +77 -73
  107. package/src/tsconfig.json +32 -32
  108. package/src/tsconfig.types.json +9 -9
  109. package/src/types.d.ts +3 -3
@@ -1,102 +1,128 @@
1
- import { Camera } from '@babylonjs/core/Cameras/camera';
2
- import { CubeTexture } from '@babylonjs/core/Materials/Textures/cubeTexture';
3
- import { Scene as BabylonScene } from '@babylonjs/core/scene';
4
- import { cloneDeep, merge } from 'lodash-es';
5
- import { ParameterObservable } from '../classes/parameterObservable';
6
- import { Event } from '../classes/event';
7
- import { SpecStorage } from '../store/specStorage';
8
- import { mergeMaps } from '../util/resourceHelper';
9
-
10
- export class SceneManager extends ParameterObservable {
11
- protected readonly _parameterObservers: Map<string, ParameterObserver[]> = new Map();
12
-
13
- protected readonly parameterDeclaration: ParameterDeclarations = {
14
- 'environment': { type: 'string' },
15
- 'environment.rotation': { type: 'number' },
16
- };
17
-
18
- /**
19
- * Constructor.
20
- */
21
- protected constructor(public scene: BabylonScene) {
22
- super();
23
- this.addParameterObservers();
24
- }
25
-
26
- /**
27
- * Creates a {@link SceneManager} based on given BabylonJS scene.
28
- */
29
- public static async create(scene: BabylonScene): Promise<SceneManager> {
30
- const sceneManager = new SceneManager(scene);
31
- await sceneManager.bootstrapParameters(SpecStorage.get<ParameterBag>('scene.parameters'));
32
- return sceneManager;
33
- }
34
-
35
- /**
36
- * The active `Camera`.
37
- */
38
- get activeCamera(): Camera {
39
- if (!this.scene.activeCamera) {
40
- throw new Error('Scene has no active camera.');
41
- }
42
- return this.scene.activeCamera;
43
- }
44
-
45
- /**
46
- * Places the given {@link ParameterBag} in the {@link SceneManager}'s parameters, replaces all patterns in the
47
- * {@link StructureJson} and broadcasts all {@link ParameterObserver}s.
48
- *
49
- * @emit {@link Event.SCENE_PARAMETER_COMMITTED}
50
- */
51
- public async commitParameters(parameters?: ParameterBag): Promise<SceneManager> {
52
- if (!parameters) {
53
- parameters = {};
54
- }
55
- const oldParameters = cloneDeep(this.parameters);
56
- merge(this.parameters, parameters);
57
-
58
- // handle parameter observers
59
- for (const parameter in this.parameters) {
60
- const oldParameterValue = oldParameters[parameter];
61
- const newParameterValue = this.parameters[parameter];
62
- this.assertParameter(this.parameterDeclaration, parameter, newParameterValue);
63
- if (oldParameterValue === newParameterValue) {
64
- continue;
65
- }
66
- // parameter changed
67
- const parameterObservers = mergeMaps(this._parameterObservers, this.parameterObservers);
68
- if (parameterObservers.has(parameter)) {
69
- const observers = parameterObservers.get(parameter)!;
70
- observers.forEach(observer => {
71
- observer(this, oldParameterValue, newParameterValue);
72
- this.broadcastEvent(Event.SCENE_PARAMETER_COMMITTED, this, parameter, oldParameterValue, newParameterValue);
73
- });
74
- }
75
- }
76
- return this;
77
- }
78
-
79
- protected addParameterObservers(): SceneManager {
80
- this._parameterObservers.set('environment', [
81
- (manager: SceneManager, oldValue: ParameterValue, newValue: ParameterValue) => {
82
- manager.scene.environmentTexture = CubeTexture.CreateFromPrefilteredData(newValue.toString(), manager.scene);
83
- },
84
- ]);
85
- this._parameterObservers.set('environment.rotation', [
86
- (manager: SceneManager, oldValue: ParameterValue, newValue: ParameterValue) => {
87
- if (manager.scene.environmentTexture instanceof CubeTexture) {
88
- manager.scene.environmentTexture.rotationY = (parseFloat(newValue.toString()) * Math.PI) / 180;
89
- }
90
- },
91
- ]);
92
- return this;
93
- }
94
-
95
- /**
96
- * Bootstrapping for parameters. It sets the `parametersInitialized` to true for all ancestors.
97
- */
98
- protected async bootstrapParameters(parameters?: ParameterBag): Promise<SceneManager> {
99
- await this.commitParameters(merge(cloneDeep(this.parameters), parameters));
100
- return this;
101
- }
102
- }
1
+ import { Camera } from '@babylonjs/core/Cameras/camera';
2
+ import { Scene as BabylonScene } from '@babylonjs/core/scene';
3
+ import { cloneDeep, concat, merge } from 'lodash-es';
4
+ import { ParameterObservable } from '../classes/parameterObservable';
5
+ import { Event } from '../classes/event';
6
+ import { SpecStorage } from '../store/specStorage';
7
+ import { mergeMaps } from '../util/resourceHelper';
8
+ import { Parameter } from '../classes/parameter';
9
+ import { changeEnvironment } from '../util/babylonHelper';
10
+
11
+ export class SceneManager extends ParameterObservable {
12
+ protected readonly _parameterObservers: Map<string, ParameterObserver[]> = new Map();
13
+
14
+ /**
15
+ * Constructor.
16
+ */
17
+ protected constructor(public scene: BabylonScene) {
18
+ super();
19
+ this.addParameterObservers();
20
+ }
21
+
22
+ /**
23
+ * Creates a {@link SceneManager} based on given BabylonJS scene.
24
+ */
25
+ public static async create(scene: BabylonScene): Promise<SceneManager> {
26
+ const sceneManager = new SceneManager(scene);
27
+ await sceneManager.bootstrapParameters(SpecStorage.get<ParameterBag>('scene.parameters'));
28
+ return sceneManager;
29
+ }
30
+
31
+ /**
32
+ * The active `Camera`.
33
+ */
34
+ get activeCamera(): Camera {
35
+ if (!this.scene.activeCamera) {
36
+ throw new Error('Scene has no active camera.');
37
+ }
38
+ return this.scene.activeCamera;
39
+ }
40
+
41
+ /**
42
+ * Places the given {@link ParameterBag} in the {@link SceneManager}'s parameters, replaces all patterns in the
43
+ * {@link StructureJson} and broadcasts all {@link ParameterObserver}s.
44
+ *
45
+ * @emit {@link Event.SCENE_PARAMETER_COMMITTED}
46
+ */
47
+ public async commitParameters(parameters?: ParameterBag): Promise<SceneManager> {
48
+ if (!parameters) {
49
+ parameters = {};
50
+ }
51
+ const oldParameters = cloneDeep(this.parameters);
52
+ merge(this.parameters, parameters);
53
+
54
+ // handle parameter observers
55
+ let observerPromises: Promise<void | ParameterObserver>[] = [];
56
+ for (const parameter in this.parameters) {
57
+ const oldParameterValue = oldParameters[parameter];
58
+ const newParameterValue = this.parameters[parameter];
59
+ this.assertParameter(Parameter.declarations, parameter, newParameterValue);
60
+ if (oldParameterValue === newParameterValue) {
61
+ continue;
62
+ }
63
+ // parameter changed
64
+ const parameterObservers = mergeMaps(this._parameterObservers, this.parameterObservers);
65
+ if (parameterObservers.has(parameter)) {
66
+ const observers = parameterObservers.get(parameter)!;
67
+ observerPromises = concat(
68
+ observerPromises,
69
+ observers.map(observer => {
70
+ const observerResult = observer(this, oldParameterValue, newParameterValue);
71
+ const observerPromise = Promise.resolve(observerResult);
72
+ observerPromise.then(() => {
73
+ this.broadcastEvent(
74
+ Event.SCENE_PARAMETER_COMMITTED,
75
+ this,
76
+ parameter,
77
+ oldParameterValue,
78
+ newParameterValue
79
+ );
80
+ });
81
+ return observerPromise;
82
+ })
83
+ );
84
+ }
85
+ }
86
+ await Promise.all(observerPromises);
87
+ return this;
88
+ }
89
+
90
+ protected addParameterObservers(): SceneManager {
91
+ const handleEnvParamChange = (manager: SceneManager, oldValue: ParameterValue, newValue: ParameterValue) => {
92
+ // TODO: Check if `manager.parameters` actually holds the new values...
93
+ const params = {
94
+ color: manager.parameters[Parameter.ENVIRONMENT_COLOR],
95
+ intensity: manager.parameters[Parameter.ENVIRONMENT_INTENSITY],
96
+ env: manager.parameters[Parameter.ENVIRONMENT],
97
+ background: manager.parameters[Parameter.ENVIRONMENT_BACKGROUND],
98
+ rotation: manager.parameters[Parameter.ENVIRONMENT_ROTATION],
99
+ useDefault: manager.parameters[Parameter.ENVIRONMENT_USEDEFAULT],
100
+ };
101
+ const envDef: EnvironmentDefinition = {
102
+ environmentColor: params.color ? Parameter.parseColor(params.color) : undefined,
103
+ environmentIntensity: params.intensity !== undefined ? Parameter.parseNumber(params.intensity) : undefined,
104
+ environment: params.env ? (params.env as string) : undefined,
105
+ environmentBackground: params.background ? (params.background as string) : undefined,
106
+ environmentRotation: params.rotation !== undefined ? Parameter.parseNumber(params.rotation) : undefined,
107
+ environmentUseDefault: params.useDefault ? Parameter.parseBoolean(params.useDefault) : undefined,
108
+ };
109
+ changeEnvironment(manager.scene, envDef);
110
+ };
111
+
112
+ this._parameterObservers.set(Parameter.ENVIRONMENT_COLOR, [handleEnvParamChange]);
113
+ this._parameterObservers.set(Parameter.ENVIRONMENT_ROTATION, [handleEnvParamChange]);
114
+ this._parameterObservers.set(Parameter.ENVIRONMENT_USEDEFAULT, [handleEnvParamChange]);
115
+ this._parameterObservers.set(Parameter.ENVIRONMENT, [handleEnvParamChange]);
116
+ this._parameterObservers.set(Parameter.ENVIRONMENT_BACKGROUND, [handleEnvParamChange]);
117
+ this._parameterObservers.set(Parameter.ENVIRONMENT_INTENSITY, [handleEnvParamChange]);
118
+ return this;
119
+ }
120
+
121
+ /**
122
+ * Bootstrapping for parameters. It sets the `parametersInitialized` to true for all ancestors.
123
+ */
124
+ protected async bootstrapParameters(parameters?: ParameterBag): Promise<SceneManager> {
125
+ await this.commitParameters(merge(cloneDeep(this.parameters), parameters));
126
+ return this;
127
+ }
128
+ }