@babylonjs/viewer 7.22.1-alpha → 7.22.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/configuration/configuration.d.ts +107 -0
- package/configuration/configuration.js +16 -0
- package/configuration/configuration.js.map +1 -0
- package/configuration/configurationCompatibility.d.ts +8 -0
- package/configuration/configurationCompatibility.js +66 -0
- package/configuration/configurationCompatibility.js.map +1 -0
- package/configuration/configurationContainer.d.ts +10 -0
- package/configuration/configurationContainer.js +10 -0
- package/configuration/configurationContainer.js.map +1 -0
- package/configuration/globals.d.ts +6 -0
- package/configuration/globals.js +18 -0
- package/configuration/globals.js.map +1 -0
- package/configuration/index.d.ts +2 -0
- package/configuration/index.js +4 -0
- package/configuration/index.js.map +1 -0
- package/configuration/interfaces/cameraConfiguration.d.ts +31 -0
- package/configuration/interfaces/cameraConfiguration.js +2 -0
- package/configuration/interfaces/cameraConfiguration.js.map +1 -0
- package/configuration/interfaces/colorGradingConfiguration.d.ts +81 -0
- package/configuration/interfaces/colorGradingConfiguration.js +2 -0
- package/configuration/interfaces/colorGradingConfiguration.js.map +1 -0
- package/configuration/interfaces/defaultRenderingPipelineConfiguration.d.ts +20 -0
- package/configuration/interfaces/defaultRenderingPipelineConfiguration.js +2 -0
- package/configuration/interfaces/defaultRenderingPipelineConfiguration.js.map +1 -0
- package/configuration/interfaces/environmentMapConfiguration.d.ts +22 -0
- package/configuration/interfaces/environmentMapConfiguration.js +2 -0
- package/configuration/interfaces/environmentMapConfiguration.js.map +1 -0
- package/configuration/interfaces/groundConfiguration.d.ts +24 -0
- package/configuration/interfaces/groundConfiguration.js +2 -0
- package/configuration/interfaces/groundConfiguration.js.map +1 -0
- package/configuration/interfaces/imageProcessingConfiguration.d.ts +45 -0
- package/configuration/interfaces/imageProcessingConfiguration.js +2 -0
- package/configuration/interfaces/imageProcessingConfiguration.js.map +1 -0
- package/configuration/interfaces/index.d.ts +15 -0
- package/configuration/interfaces/index.js +16 -0
- package/configuration/interfaces/index.js.map +1 -0
- package/configuration/interfaces/lightConfiguration.d.ts +60 -0
- package/configuration/interfaces/lightConfiguration.js +2 -0
- package/configuration/interfaces/lightConfiguration.js.map +1 -0
- package/configuration/interfaces/modelAnimationConfiguration.d.ts +26 -0
- package/configuration/interfaces/modelAnimationConfiguration.js +2 -0
- package/configuration/interfaces/modelAnimationConfiguration.js.map +1 -0
- package/configuration/interfaces/modelConfiguration.d.ts +65 -0
- package/configuration/interfaces/modelConfiguration.js +2 -0
- package/configuration/interfaces/modelConfiguration.js.map +1 -0
- package/configuration/interfaces/observersConfiguration.d.ts +5 -0
- package/configuration/interfaces/observersConfiguration.js +2 -0
- package/configuration/interfaces/observersConfiguration.js.map +1 -0
- package/configuration/interfaces/sceneConfiguration.d.ts +48 -0
- package/configuration/interfaces/sceneConfiguration.js +2 -0
- package/configuration/interfaces/sceneConfiguration.js.map +1 -0
- package/configuration/interfaces/sceneOptimizerConfiguration.d.ts +23 -0
- package/configuration/interfaces/sceneOptimizerConfiguration.js +2 -0
- package/configuration/interfaces/sceneOptimizerConfiguration.js.map +1 -0
- package/configuration/interfaces/skyboxConfiguration.d.ts +21 -0
- package/configuration/interfaces/skyboxConfiguration.js +2 -0
- package/configuration/interfaces/skyboxConfiguration.js.map +1 -0
- package/configuration/interfaces/templateConfiguration.d.ts +67 -0
- package/configuration/interfaces/templateConfiguration.js +2 -0
- package/configuration/interfaces/templateConfiguration.js.map +1 -0
- package/configuration/interfaces/vrConfiguration.d.ts +16 -0
- package/configuration/interfaces/vrConfiguration.js +2 -0
- package/configuration/interfaces/vrConfiguration.js.map +1 -0
- package/configuration/loader.d.ts +4 -0
- package/configuration/loader.js +17 -0
- package/configuration/loader.js.map +1 -0
- package/configuration/mappers.d.ts +43 -0
- package/configuration/mappers.js +192 -0
- package/configuration/mappers.js.map +1 -0
- package/configuration/renderOnlyLoader.d.ts +33 -0
- package/configuration/renderOnlyLoader.js +162 -0
- package/configuration/renderOnlyLoader.js.map +1 -0
- package/configuration/types/default.d.ts +6 -0
- package/configuration/types/default.js +121 -0
- package/configuration/types/default.js.map +1 -0
- package/configuration/types/environmentMap.d.ts +5 -0
- package/configuration/types/environmentMap.js +14 -0
- package/configuration/types/environmentMap.js.map +1 -0
- package/configuration/types/extended.d.ts +6 -0
- package/configuration/types/extended.js +317 -0
- package/configuration/types/extended.js.map +1 -0
- package/configuration/types/index.d.ts +14 -0
- package/configuration/types/index.js +51 -0
- package/configuration/types/index.js.map +1 -0
- package/configuration/types/minimal.d.ts +6 -0
- package/configuration/types/minimal.js +43 -0
- package/configuration/types/minimal.js.map +1 -0
- package/configuration/types/renderOnlyDefault.d.ts +30 -0
- package/configuration/types/renderOnlyDefault.js +31 -0
- package/configuration/types/renderOnlyDefault.js.map +1 -0
- package/configuration/types/shadowLight.d.ts +9 -0
- package/configuration/types/shadowLight.js +64 -0
- package/configuration/types/shadowLight.js.map +1 -0
- package/helper/index.d.ts +29 -0
- package/helper/index.js +66 -0
- package/helper/index.js.map +1 -0
- package/index.d.ts +30 -0
- package/index.js +46 -0
- package/index.js.map +1 -0
- package/initializer.d.ts +11 -0
- package/initializer.js +35 -0
- package/initializer.js.map +1 -0
- package/interfaces.d.ts +5 -0
- package/interfaces.js +7 -0
- package/interfaces.js.map +1 -0
- package/labs/environmentSerializer.d.ts +126 -0
- package/labs/environmentSerializer.js +191 -0
- package/labs/environmentSerializer.js.map +1 -0
- package/labs/texture.d.ts +183 -0
- package/labs/texture.js +351 -0
- package/labs/texture.js.map +1 -0
- package/labs/viewerLabs.d.ts +51 -0
- package/labs/viewerLabs.js +134 -0
- package/labs/viewerLabs.js.map +1 -0
- package/loader/modelLoader.d.ts +56 -0
- package/loader/modelLoader.js +199 -0
- package/loader/modelLoader.js.map +1 -0
- package/loader/plugins/applyMaterialConfig.d.ts +12 -0
- package/loader/plugins/applyMaterialConfig.js +16 -0
- package/loader/plugins/applyMaterialConfig.js.map +1 -0
- package/loader/plugins/extendedMaterialLoaderPlugin.d.ts +9 -0
- package/loader/plugins/extendedMaterialLoaderPlugin.js +16 -0
- package/loader/plugins/extendedMaterialLoaderPlugin.js.map +1 -0
- package/loader/plugins/index.d.ts +19 -0
- package/loader/plugins/index.js +44 -0
- package/loader/plugins/index.js.map +1 -0
- package/loader/plugins/loaderPlugin.d.ts +24 -0
- package/loader/plugins/loaderPlugin.js +2 -0
- package/loader/plugins/loaderPlugin.js.map +1 -0
- package/loader/plugins/msftLodLoaderPlugin.d.ts +12 -0
- package/loader/plugins/msftLodLoaderPlugin.js +21 -0
- package/loader/plugins/msftLodLoaderPlugin.js.map +1 -0
- package/loader/plugins/telemetryLoaderPlugin.d.ts +12 -0
- package/loader/plugins/telemetryLoaderPlugin.js +36 -0
- package/loader/plugins/telemetryLoaderPlugin.js.map +1 -0
- package/managers/observablesManager.d.ts +66 -0
- package/managers/observablesManager.js +35 -0
- package/managers/observablesManager.js.map +1 -0
- package/managers/sceneManager.d.ts +245 -0
- package/managers/sceneManager.js +1375 -0
- package/managers/sceneManager.js.map +1 -0
- package/managers/telemetryManager.d.ts +78 -0
- package/managers/telemetryManager.js +117 -0
- package/managers/telemetryManager.js.map +1 -0
- package/model/modelAnimation.d.ts +215 -0
- package/model/modelAnimation.js +237 -0
- package/model/modelAnimation.js.map +1 -0
- package/model/viewerModel.d.ts +233 -0
- package/model/viewerModel.js +673 -0
- package/model/viewerModel.js.map +1 -0
- package/optimizer/custom/extended.d.ts +13 -0
- package/optimizer/custom/extended.js +101 -0
- package/optimizer/custom/extended.js.map +1 -0
- package/optimizer/custom/index.d.ts +9 -0
- package/optimizer/custom/index.js +26 -0
- package/optimizer/custom/index.js.map +1 -0
- package/package.json +29 -16
- package/readme.md +21 -35
- package/renderOnlyIndex.d.ts +11 -0
- package/renderOnlyIndex.js +18 -0
- package/renderOnlyIndex.js.map +1 -0
- package/templating/eventManager.d.ts +35 -0
- package/templating/eventManager.js +66 -0
- package/templating/eventManager.js.map +1 -0
- package/templating/plugins/hdButtonPlugin.d.ts +9 -0
- package/templating/plugins/hdButtonPlugin.js +21 -0
- package/templating/plugins/hdButtonPlugin.js.map +1 -0
- package/templating/plugins/printButton.d.ts +9 -0
- package/templating/plugins/printButton.js +40 -0
- package/templating/plugins/printButton.js.map +1 -0
- package/templating/templateManager.d.ts +197 -0
- package/templating/templateManager.js +561 -0
- package/templating/templateManager.js.map +1 -0
- package/templating/viewerTemplatePlugin.d.ts +21 -0
- package/templating/viewerTemplatePlugin.js +69 -0
- package/templating/viewerTemplatePlugin.js.map +1 -0
- package/viewer/defaultViewer.d.ts +130 -0
- package/viewer/defaultViewer.js +675 -0
- package/viewer/defaultViewer.js.map +1 -0
- package/viewer/renderOnlyViewer.d.ts +9 -0
- package/viewer/renderOnlyViewer.js +46 -0
- package/viewer/renderOnlyViewer.js.map +1 -0
- package/viewer/viewer.d.ts +258 -0
- package/viewer/viewer.js +783 -0
- package/viewer/viewer.js.map +1 -0
- package/viewer/viewerManager.d.ts +58 -0
- package/viewer/viewerManager.js +91 -0
- package/viewer/viewerManager.js.map +1 -0
- package/viewer/viewerWithTemplate.d.ts +9 -0
- package/viewer/viewerWithTemplate.js +20 -0
- package/viewer/viewerWithTemplate.js.map +1 -0
- package/dist/babylon-viewer.esm.js +0 -116321
- package/dist/babylon-viewer.esm.js.map +0 -1
- package/dist/babylon-viewer.esm.min.js +0 -2
- package/dist/babylon-viewer.esm.min.js.map +0 -1
- package/lib/index.d.ts +0 -132
- package/lib/index.js +0 -369
- package/lib/index.js.map +0 -1
|
@@ -0,0 +1,675 @@
|
|
|
1
|
+
import { __awaiter, __extends, __generator } from "@babylonjs/core/tslib.es6.js";
|
|
2
|
+
import { TemplateManager } from "../templating/templateManager.js";
|
|
3
|
+
import { FilesInput } from "@babylonjs/core/Misc/filesInput.js";
|
|
4
|
+
import { SpotLight } from "@babylonjs/core/Lights/spotLight.js";
|
|
5
|
+
import { Vector3 } from "@babylonjs/core/Maths/math.js";
|
|
6
|
+
import { AbstractViewerWithTemplate } from "./viewerWithTemplate.js";
|
|
7
|
+
import { StandardMaterial } from "@babylonjs/core/Materials/standardMaterial.js";
|
|
8
|
+
import { PBRMaterial } from "@babylonjs/core/Materials/PBR/pbrMaterial.js";
|
|
9
|
+
// eslint-disable-next-line import/no-internal-modules
|
|
10
|
+
import { extendClassWithConfig } from "../helper/index.js";
|
|
11
|
+
import { AnimationState } from "../model/modelAnimation.js";
|
|
12
|
+
import { HDButtonPlugin } from "../templating/plugins/hdButtonPlugin.js";
|
|
13
|
+
import { PrintButtonPlugin } from "../templating/plugins/printButton.js";
|
|
14
|
+
import { Logger } from "@babylonjs/core/Misc/logger.js";
|
|
15
|
+
import "@babylonjs/core/Lights/Shadows/shadowGeneratorSceneComponent.js";
|
|
16
|
+
/**
|
|
17
|
+
* The Default viewer is the default implementation of the AbstractViewer.
|
|
18
|
+
* It uses the templating system to render a new canvas and controls.
|
|
19
|
+
*/
|
|
20
|
+
var DefaultViewer = /** @class */ (function (_super) {
|
|
21
|
+
__extends(DefaultViewer, _super);
|
|
22
|
+
/**
|
|
23
|
+
* Create a new default viewer
|
|
24
|
+
* @param containerElement the element in which the templates will be rendered
|
|
25
|
+
* @param initialConfiguration the initial configuration. Defaults to extending the default configuration
|
|
26
|
+
*/
|
|
27
|
+
function DefaultViewer(containerElement, initialConfiguration) {
|
|
28
|
+
if (initialConfiguration === void 0) { initialConfiguration = { extends: "default" }; }
|
|
29
|
+
var _this = _super.call(this, containerElement, initialConfiguration) || this;
|
|
30
|
+
_this.containerElement = containerElement;
|
|
31
|
+
_this._registeredPlugins = [];
|
|
32
|
+
_this._handlePointerClick = function (event) {
|
|
33
|
+
var pointerDown = event.event;
|
|
34
|
+
if (pointerDown.button !== 0) {
|
|
35
|
+
return;
|
|
36
|
+
}
|
|
37
|
+
var element = event.event.target;
|
|
38
|
+
if (!element) {
|
|
39
|
+
return;
|
|
40
|
+
}
|
|
41
|
+
var parentClasses = element.parentElement.classList;
|
|
42
|
+
var elementClasses = element.classList;
|
|
43
|
+
var elementName = "";
|
|
44
|
+
for (var i = 0; i < elementClasses.length; ++i) {
|
|
45
|
+
var className = elementClasses[i];
|
|
46
|
+
if (className.indexOf("-button") !== -1 || className.indexOf("-wrapper") !== -1) {
|
|
47
|
+
elementName = className;
|
|
48
|
+
break;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
switch (elementName) {
|
|
52
|
+
case "speed-button":
|
|
53
|
+
case "types-button":
|
|
54
|
+
if (parentClasses.contains("open")) {
|
|
55
|
+
parentClasses.remove("open");
|
|
56
|
+
}
|
|
57
|
+
else {
|
|
58
|
+
parentClasses.add("open");
|
|
59
|
+
}
|
|
60
|
+
break;
|
|
61
|
+
case "play-pause-button":
|
|
62
|
+
_this._togglePlayPause();
|
|
63
|
+
break;
|
|
64
|
+
case "label-option-button": {
|
|
65
|
+
var value = element.dataset["value"];
|
|
66
|
+
var label = element.querySelector("span.animation-label");
|
|
67
|
+
if (label && value) {
|
|
68
|
+
_this._updateAnimationType({ value: value.trim(), label: label.innerHTML });
|
|
69
|
+
}
|
|
70
|
+
break;
|
|
71
|
+
}
|
|
72
|
+
case "speed-option-button": {
|
|
73
|
+
if (!_this._currentAnimation) {
|
|
74
|
+
return;
|
|
75
|
+
}
|
|
76
|
+
var speed = element.dataset["value"];
|
|
77
|
+
if (speed) {
|
|
78
|
+
_this._updateAnimationSpeed(speed);
|
|
79
|
+
}
|
|
80
|
+
break;
|
|
81
|
+
}
|
|
82
|
+
case "progress-wrapper":
|
|
83
|
+
_this._resumePlay = !_this._isAnimationPaused;
|
|
84
|
+
if (_this._resumePlay) {
|
|
85
|
+
_this._togglePlayPause(true);
|
|
86
|
+
}
|
|
87
|
+
break;
|
|
88
|
+
case "fullscreen-button":
|
|
89
|
+
_this.toggleFullscreen();
|
|
90
|
+
break;
|
|
91
|
+
case "vr-button":
|
|
92
|
+
_this.toggleVR();
|
|
93
|
+
break;
|
|
94
|
+
default:
|
|
95
|
+
return;
|
|
96
|
+
}
|
|
97
|
+
};
|
|
98
|
+
/**
|
|
99
|
+
* Plays or Pauses animation
|
|
100
|
+
* @param noUiUpdate
|
|
101
|
+
*/
|
|
102
|
+
_this._togglePlayPause = function (noUiUpdate) {
|
|
103
|
+
if (!_this._currentAnimation) {
|
|
104
|
+
return;
|
|
105
|
+
}
|
|
106
|
+
if (_this._isAnimationPaused) {
|
|
107
|
+
_this._currentAnimation.restart();
|
|
108
|
+
}
|
|
109
|
+
else {
|
|
110
|
+
_this._currentAnimation.pause();
|
|
111
|
+
}
|
|
112
|
+
_this._isAnimationPaused = !_this._isAnimationPaused;
|
|
113
|
+
if (noUiUpdate) {
|
|
114
|
+
return;
|
|
115
|
+
}
|
|
116
|
+
var navbar = _this.templateManager.getTemplate("navBar");
|
|
117
|
+
if (!navbar) {
|
|
118
|
+
return;
|
|
119
|
+
}
|
|
120
|
+
navbar.updateParams({
|
|
121
|
+
paused: _this._isAnimationPaused,
|
|
122
|
+
});
|
|
123
|
+
};
|
|
124
|
+
/**
|
|
125
|
+
* Control progress bar position based on animation current frame
|
|
126
|
+
*/
|
|
127
|
+
_this._updateProgressBar = function () {
|
|
128
|
+
var navbar = _this.templateManager.getTemplate("navBar");
|
|
129
|
+
if (!navbar) {
|
|
130
|
+
return;
|
|
131
|
+
}
|
|
132
|
+
var progressSlider = navbar.parent.querySelector("input.progress-wrapper");
|
|
133
|
+
if (progressSlider && _this._currentAnimation) {
|
|
134
|
+
var progress = (_this._currentAnimation.currentFrame / _this._currentAnimation.frames) * 100;
|
|
135
|
+
var currentValue = progressSlider.valueAsNumber;
|
|
136
|
+
if (Math.abs(currentValue - progress) > 0.5) {
|
|
137
|
+
// Only move if greater than a 1% change
|
|
138
|
+
progressSlider.value = "" + progress;
|
|
139
|
+
}
|
|
140
|
+
if (_this._currentAnimation.state === AnimationState.PLAYING) {
|
|
141
|
+
if (_this.sceneManager.camera.autoRotationBehavior && !_this._oldIdleRotationValue) {
|
|
142
|
+
_this._oldIdleRotationValue = _this.sceneManager.camera.autoRotationBehavior.idleRotationSpeed;
|
|
143
|
+
_this.sceneManager.camera.autoRotationBehavior.idleRotationSpeed = 0;
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
else {
|
|
147
|
+
if (_this.sceneManager.camera.autoRotationBehavior && _this._oldIdleRotationValue) {
|
|
148
|
+
_this.sceneManager.camera.autoRotationBehavior.idleRotationSpeed = _this._oldIdleRotationValue;
|
|
149
|
+
_this._oldIdleRotationValue = 0;
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
};
|
|
154
|
+
/**
|
|
155
|
+
* Update Current Animation Speed
|
|
156
|
+
* @param speed
|
|
157
|
+
* @param paramsObject
|
|
158
|
+
*/
|
|
159
|
+
_this._updateAnimationSpeed = function (speed, paramsObject) {
|
|
160
|
+
var navbar = _this.templateManager.getTemplate("navBar");
|
|
161
|
+
if (!navbar) {
|
|
162
|
+
return;
|
|
163
|
+
}
|
|
164
|
+
if (speed && _this._currentAnimation) {
|
|
165
|
+
_this._currentAnimation.speedRatio = parseFloat(speed);
|
|
166
|
+
if (!_this._isAnimationPaused) {
|
|
167
|
+
_this._currentAnimation.restart();
|
|
168
|
+
}
|
|
169
|
+
if (paramsObject) {
|
|
170
|
+
paramsObject.selectedSpeed = speed + "x";
|
|
171
|
+
}
|
|
172
|
+
else {
|
|
173
|
+
navbar.updateParams({
|
|
174
|
+
selectedSpeed: speed + "x",
|
|
175
|
+
});
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
};
|
|
179
|
+
/**
|
|
180
|
+
* Update Current Animation Type
|
|
181
|
+
* @param data
|
|
182
|
+
* @param data.label
|
|
183
|
+
* @param data.value
|
|
184
|
+
* @param paramsObject
|
|
185
|
+
*/
|
|
186
|
+
_this._updateAnimationType = function (data, paramsObject) {
|
|
187
|
+
var navbar = _this.templateManager.getTemplate("navBar");
|
|
188
|
+
if (!navbar) {
|
|
189
|
+
return;
|
|
190
|
+
}
|
|
191
|
+
if (data) {
|
|
192
|
+
_this._currentAnimation = _this.sceneManager.models[0].setCurrentAnimationByName(data.value);
|
|
193
|
+
}
|
|
194
|
+
if (paramsObject) {
|
|
195
|
+
paramsObject.selectedAnimation = _this._animationList.indexOf(data.value) + 1;
|
|
196
|
+
paramsObject.selectedAnimationName = data.label;
|
|
197
|
+
}
|
|
198
|
+
else {
|
|
199
|
+
navbar.updateParams({
|
|
200
|
+
selectedAnimation: _this._animationList.indexOf(data.value) + 1,
|
|
201
|
+
selectedAnimationName: data.label,
|
|
202
|
+
});
|
|
203
|
+
}
|
|
204
|
+
_this._updateAnimationSpeed("1.0", paramsObject);
|
|
205
|
+
};
|
|
206
|
+
/**
|
|
207
|
+
* Toggle fullscreen of the entire viewer
|
|
208
|
+
*/
|
|
209
|
+
_this.toggleFullscreen = function () {
|
|
210
|
+
var viewerTemplate = _this.templateManager.getTemplate("viewer");
|
|
211
|
+
var viewerElement = viewerTemplate && viewerTemplate.parent;
|
|
212
|
+
var fullscreenElement = _this.fullscreenElement || viewerElement;
|
|
213
|
+
if (fullscreenElement) {
|
|
214
|
+
var currentElement = document.fullscreenElement || document.webkitFullscreenElement || document.mozFullScreenElement || document.msFullscreenElement;
|
|
215
|
+
if (!currentElement) {
|
|
216
|
+
var requestFullScreen = fullscreenElement.requestFullscreen ||
|
|
217
|
+
fullscreenElement.webkitRequestFullscreen ||
|
|
218
|
+
fullscreenElement.msRequestFullscreen ||
|
|
219
|
+
fullscreenElement.mozRequestFullScreen;
|
|
220
|
+
requestFullScreen.call(fullscreenElement);
|
|
221
|
+
if (viewerElement) {
|
|
222
|
+
viewerElement.classList.add("in-fullscreen");
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
else {
|
|
226
|
+
var exitFullscreen = document.exitFullscreen || document.webkitExitFullscreen || document.msExitFullscreen || document.mozCancelFullScreen;
|
|
227
|
+
exitFullscreen.call(document);
|
|
228
|
+
if (viewerElement) {
|
|
229
|
+
viewerElement.classList.remove("in-fullscreen");
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
};
|
|
234
|
+
_this._onModelLoaded = function (model) {
|
|
235
|
+
_this._configureTemplate(model);
|
|
236
|
+
// with a short timeout, making sure everything is there already.
|
|
237
|
+
var hideLoadingDelay = 20;
|
|
238
|
+
if (_this.configuration.lab && _this.configuration.lab.hideLoadingDelay !== undefined) {
|
|
239
|
+
hideLoadingDelay = _this.configuration.lab.hideLoadingDelay;
|
|
240
|
+
}
|
|
241
|
+
setTimeout(function () {
|
|
242
|
+
_this.sceneManager.scene.executeWhenReady(function () {
|
|
243
|
+
_this.hideLoadingScreen();
|
|
244
|
+
});
|
|
245
|
+
}, hideLoadingDelay);
|
|
246
|
+
return;
|
|
247
|
+
};
|
|
248
|
+
_this.onModelLoadedObservable.add(_this._onModelLoaded);
|
|
249
|
+
_this.onModelRemovedObservable.add(function () {
|
|
250
|
+
_this._configureTemplate();
|
|
251
|
+
});
|
|
252
|
+
_this.onEngineInitObservable.add(function () {
|
|
253
|
+
_this.sceneManager.onLightsConfiguredObservable.add(function () {
|
|
254
|
+
_this._configureLights();
|
|
255
|
+
});
|
|
256
|
+
_this.sceneManager.setDefaultMaterial = function (sceneConfig) {
|
|
257
|
+
var conf = sceneConfig.defaultMaterial;
|
|
258
|
+
if (!conf) {
|
|
259
|
+
return;
|
|
260
|
+
}
|
|
261
|
+
if ((conf.materialType === "standard" && this.scene.defaultMaterial.getClassName() !== "StandardMaterial") ||
|
|
262
|
+
(conf.materialType === "pbr" && this.scene.defaultMaterial.getClassName() !== "PBRMaterial")) {
|
|
263
|
+
this.scene.defaultMaterial.dispose();
|
|
264
|
+
if (conf.materialType === "standard") {
|
|
265
|
+
this.scene.defaultMaterial = new StandardMaterial("defaultMaterial", this.scene);
|
|
266
|
+
}
|
|
267
|
+
else {
|
|
268
|
+
this.scene.defaultMaterial = new PBRMaterial("defaultMaterial", this.scene);
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
extendClassWithConfig(this.scene.defaultMaterial, conf);
|
|
272
|
+
};
|
|
273
|
+
if (!_this.sceneManager.models.length) {
|
|
274
|
+
_this.hideLoadingScreen();
|
|
275
|
+
}
|
|
276
|
+
});
|
|
277
|
+
return _this;
|
|
278
|
+
}
|
|
279
|
+
DefaultViewer.prototype.registerTemplatePlugin = function (plugin) {
|
|
280
|
+
var _this = this;
|
|
281
|
+
//validate
|
|
282
|
+
if (!plugin.templateName) {
|
|
283
|
+
throw new Error("No template name provided");
|
|
284
|
+
}
|
|
285
|
+
this._registeredPlugins.push(plugin);
|
|
286
|
+
var template = this.templateManager.getTemplate(plugin.templateName);
|
|
287
|
+
if (!template) {
|
|
288
|
+
throw new Error("Template ".concat(plugin.templateName, " not found"));
|
|
289
|
+
}
|
|
290
|
+
if (plugin.addHTMLTemplate) {
|
|
291
|
+
template.onHTMLRendered.add(function (tmpl) {
|
|
292
|
+
plugin.addHTMLTemplate(tmpl);
|
|
293
|
+
});
|
|
294
|
+
template.redraw();
|
|
295
|
+
}
|
|
296
|
+
if (plugin.eventsToAttach) {
|
|
297
|
+
plugin.eventsToAttach.forEach(function (eventName) {
|
|
298
|
+
plugin.onEvent &&
|
|
299
|
+
_this.templateManager.eventManager.registerCallback(plugin.templateName, function (event) {
|
|
300
|
+
if (plugin.onEvent && plugin.interactionPredicate(event)) {
|
|
301
|
+
plugin.onEvent(event);
|
|
302
|
+
}
|
|
303
|
+
}, eventName);
|
|
304
|
+
});
|
|
305
|
+
}
|
|
306
|
+
};
|
|
307
|
+
/**
|
|
308
|
+
* This will be executed when the templates initialize.
|
|
309
|
+
* @returns a promise that will be resolved when the templates are loaded
|
|
310
|
+
*/
|
|
311
|
+
DefaultViewer.prototype._onTemplatesLoaded = function () {
|
|
312
|
+
var _this = this;
|
|
313
|
+
this.showLoadingScreen();
|
|
314
|
+
// navbar
|
|
315
|
+
this._initNavbar();
|
|
316
|
+
// close overlay button
|
|
317
|
+
var template = this.templateManager.getTemplate("overlay");
|
|
318
|
+
if (template) {
|
|
319
|
+
var closeButton = template.parent.querySelector(".close-button");
|
|
320
|
+
if (closeButton) {
|
|
321
|
+
closeButton.addEventListener("pointerdown", function () {
|
|
322
|
+
_this.hideOverlayScreen();
|
|
323
|
+
});
|
|
324
|
+
}
|
|
325
|
+
}
|
|
326
|
+
if (this.configuration.templates && this.configuration.templates.viewer) {
|
|
327
|
+
if (this.configuration.templates.viewer.params && this.configuration.templates.viewer.params.enableDragAndDrop) {
|
|
328
|
+
this.onSceneInitObservable.addOnce(function () {
|
|
329
|
+
var filesInput = new FilesInput(_this.engine, _this.sceneManager.scene, function () { }, function () { }, function () { }, function () { }, function () { }, function (file) {
|
|
330
|
+
_this.loadModel(file);
|
|
331
|
+
}, function () { });
|
|
332
|
+
filesInput.monitorElementForDragNDrop(_this.templateManager.getCanvas());
|
|
333
|
+
});
|
|
334
|
+
}
|
|
335
|
+
}
|
|
336
|
+
return _super.prototype._onTemplatesLoaded.call(this);
|
|
337
|
+
};
|
|
338
|
+
DefaultViewer.prototype._initNavbar = function () {
|
|
339
|
+
var _this = this;
|
|
340
|
+
var navbar = this.templateManager.getTemplate("navBar");
|
|
341
|
+
if (navbar) {
|
|
342
|
+
this.onFrameRenderedObservable.add(this._updateProgressBar);
|
|
343
|
+
this.templateManager.eventManager.registerCallback("navBar", this._handlePointerClick, "click");
|
|
344
|
+
// an example how to trigger the help button. publiclly available
|
|
345
|
+
this.templateManager.eventManager.registerCallback("navBar", function () {
|
|
346
|
+
// do your thing
|
|
347
|
+
}, "pointerdown", ".help-button");
|
|
348
|
+
this.templateManager.eventManager.registerCallback("navBar", function (event) {
|
|
349
|
+
var evt = event.event;
|
|
350
|
+
var element = evt.target;
|
|
351
|
+
if (!_this._currentAnimation) {
|
|
352
|
+
return;
|
|
353
|
+
}
|
|
354
|
+
var gotoFrame = (+element.value / 100) * _this._currentAnimation.frames;
|
|
355
|
+
if (isNaN(gotoFrame)) {
|
|
356
|
+
return;
|
|
357
|
+
}
|
|
358
|
+
_this._currentAnimation.goToFrame(gotoFrame);
|
|
359
|
+
}, "input");
|
|
360
|
+
this.templateManager.eventManager.registerCallback("navBar", function () {
|
|
361
|
+
if (_this._resumePlay) {
|
|
362
|
+
_this._togglePlayPause(true);
|
|
363
|
+
}
|
|
364
|
+
_this._resumePlay = false;
|
|
365
|
+
}, "pointerup", ".progress-wrapper");
|
|
366
|
+
if (window.devicePixelRatio === 1 && navbar.configuration.params && !navbar.configuration.params.hideHdButton) {
|
|
367
|
+
navbar.updateParams({
|
|
368
|
+
hideHdButton: true,
|
|
369
|
+
});
|
|
370
|
+
}
|
|
371
|
+
this.registerTemplatePlugin(new HDButtonPlugin(this));
|
|
372
|
+
this.registerTemplatePlugin(new PrintButtonPlugin(this));
|
|
373
|
+
}
|
|
374
|
+
};
|
|
375
|
+
DefaultViewer.prototype._initVR = function () {
|
|
376
|
+
var _this = this;
|
|
377
|
+
if (this.sceneManager.vrHelper) {
|
|
378
|
+
// due to the way the experience helper is exisintg VR, this must be added.
|
|
379
|
+
this.sceneManager.vrHelper.onExitingVR.add(function () {
|
|
380
|
+
var viewerTemplate = _this.templateManager.getTemplate("viewer");
|
|
381
|
+
var viewerElement = viewerTemplate && viewerTemplate.parent;
|
|
382
|
+
if (viewerElement) {
|
|
383
|
+
viewerElement.classList.remove("in-vr");
|
|
384
|
+
}
|
|
385
|
+
});
|
|
386
|
+
}
|
|
387
|
+
_super.prototype._initVR.call(this);
|
|
388
|
+
};
|
|
389
|
+
/**
|
|
390
|
+
* Preparing the container element to present the viewer
|
|
391
|
+
*/
|
|
392
|
+
DefaultViewer.prototype._prepareContainerElement = function () {
|
|
393
|
+
var htmlElement = this.containerElement;
|
|
394
|
+
if (htmlElement.style) {
|
|
395
|
+
htmlElement.style.position = "relative";
|
|
396
|
+
htmlElement.style.height = "100%";
|
|
397
|
+
htmlElement.style.display = "flex";
|
|
398
|
+
}
|
|
399
|
+
};
|
|
400
|
+
/**
|
|
401
|
+
* This function will configure the templates and update them after a model was loaded
|
|
402
|
+
* It is mainly responsible to changing the title and subtitle etc'.
|
|
403
|
+
* @param model the model to be used to configure the templates by
|
|
404
|
+
*/
|
|
405
|
+
DefaultViewer.prototype._configureTemplate = function (model) {
|
|
406
|
+
var navbar = this.templateManager.getTemplate("navBar");
|
|
407
|
+
if (!navbar) {
|
|
408
|
+
return;
|
|
409
|
+
}
|
|
410
|
+
var newParams = navbar.configuration.params || {};
|
|
411
|
+
if (!model) {
|
|
412
|
+
newParams.animations = null;
|
|
413
|
+
}
|
|
414
|
+
else {
|
|
415
|
+
var animationNames = model.getAnimationNames();
|
|
416
|
+
newParams.animations = animationNames.map(function (a) {
|
|
417
|
+
return { label: a, value: a };
|
|
418
|
+
});
|
|
419
|
+
if (animationNames.length) {
|
|
420
|
+
this._isAnimationPaused = (model.configuration.animation && !model.configuration.animation.autoStart) || !model.configuration.animation;
|
|
421
|
+
this._animationList = animationNames;
|
|
422
|
+
newParams.paused = this._isAnimationPaused;
|
|
423
|
+
var animationIndex = 0;
|
|
424
|
+
if (model.configuration.animation && typeof model.configuration.animation.autoStart === "string") {
|
|
425
|
+
animationIndex = animationNames.indexOf(model.configuration.animation.autoStart);
|
|
426
|
+
if (animationIndex === -1) {
|
|
427
|
+
animationIndex = 0;
|
|
428
|
+
}
|
|
429
|
+
}
|
|
430
|
+
this._updateAnimationType(newParams.animations[animationIndex], newParams);
|
|
431
|
+
}
|
|
432
|
+
else {
|
|
433
|
+
newParams.animations = null;
|
|
434
|
+
}
|
|
435
|
+
if (model.configuration.thumbnail) {
|
|
436
|
+
newParams.logoImage = model.configuration.thumbnail;
|
|
437
|
+
}
|
|
438
|
+
}
|
|
439
|
+
navbar.updateParams(newParams, false);
|
|
440
|
+
};
|
|
441
|
+
/**
|
|
442
|
+
* This will load a new model to the default viewer
|
|
443
|
+
* overriding the AbstractViewer's loadModel.
|
|
444
|
+
* The scene will automatically be cleared of the old models, if exist.
|
|
445
|
+
* @param model the configuration object (or URL) to load.
|
|
446
|
+
* @returns a promise that will be resolved when the model is loaded
|
|
447
|
+
*/
|
|
448
|
+
DefaultViewer.prototype.loadModel = function (model) {
|
|
449
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
450
|
+
var error_1;
|
|
451
|
+
return __generator(this, function (_a) {
|
|
452
|
+
switch (_a.label) {
|
|
453
|
+
case 0:
|
|
454
|
+
if (!model) {
|
|
455
|
+
model = this.configuration.model;
|
|
456
|
+
}
|
|
457
|
+
this.showLoadingScreen();
|
|
458
|
+
_a.label = 1;
|
|
459
|
+
case 1:
|
|
460
|
+
_a.trys.push([1, 3, , 5]);
|
|
461
|
+
return [4 /*yield*/, _super.prototype.loadModel.call(this, model, true)];
|
|
462
|
+
case 2: return [2 /*return*/, _a.sent()];
|
|
463
|
+
case 3:
|
|
464
|
+
error_1 = _a.sent();
|
|
465
|
+
Logger.Log(error_1);
|
|
466
|
+
this.hideLoadingScreen();
|
|
467
|
+
this.showOverlayScreen("error");
|
|
468
|
+
return [4 /*yield*/, Promise.reject(error_1)];
|
|
469
|
+
case 4: return [2 /*return*/, _a.sent()];
|
|
470
|
+
case 5: return [2 /*return*/];
|
|
471
|
+
}
|
|
472
|
+
});
|
|
473
|
+
});
|
|
474
|
+
};
|
|
475
|
+
/**
|
|
476
|
+
* Show the overlay and the defined sub-screen.
|
|
477
|
+
* Mainly used for help and errors
|
|
478
|
+
* @param subScreen the name of the subScreen. Those can be defined in the configuration object
|
|
479
|
+
* @returns a promise that will be resolved when the overlay is shown
|
|
480
|
+
*/
|
|
481
|
+
DefaultViewer.prototype.showOverlayScreen = function (subScreen) {
|
|
482
|
+
var _this = this;
|
|
483
|
+
var template = this.templateManager.getTemplate("overlay");
|
|
484
|
+
if (!template) {
|
|
485
|
+
return Promise.resolve("Overlay template not found");
|
|
486
|
+
}
|
|
487
|
+
return template.show(function (template) {
|
|
488
|
+
var canvasRect = _this.containerElement.getBoundingClientRect();
|
|
489
|
+
template.parent.style.display = "flex";
|
|
490
|
+
template.parent.style.width = canvasRect.width + "px";
|
|
491
|
+
template.parent.style.height = canvasRect.height + "px";
|
|
492
|
+
template.parent.style.opacity = "1";
|
|
493
|
+
var subTemplate = _this.templateManager.getTemplate(subScreen);
|
|
494
|
+
if (!subTemplate) {
|
|
495
|
+
return Promise.reject(subScreen + " template not found");
|
|
496
|
+
}
|
|
497
|
+
return subTemplate.show(function (template) {
|
|
498
|
+
template.parent.style.display = "flex";
|
|
499
|
+
return Promise.resolve(template);
|
|
500
|
+
});
|
|
501
|
+
});
|
|
502
|
+
};
|
|
503
|
+
/**
|
|
504
|
+
* Hide the overlay screen.
|
|
505
|
+
* @returns a promise that will be resolved when the overlay is hidden
|
|
506
|
+
*/
|
|
507
|
+
DefaultViewer.prototype.hideOverlayScreen = function () {
|
|
508
|
+
var template = this.templateManager.getTemplate("overlay");
|
|
509
|
+
if (!template) {
|
|
510
|
+
return Promise.resolve("Overlay template not found");
|
|
511
|
+
}
|
|
512
|
+
return template.hide(function (template) {
|
|
513
|
+
template.parent.style.opacity = "0";
|
|
514
|
+
var onTransitionEnd = function () {
|
|
515
|
+
template.parent.removeEventListener("transitionend", onTransitionEnd);
|
|
516
|
+
template.parent.style.display = "none";
|
|
517
|
+
};
|
|
518
|
+
template.parent.addEventListener("transitionend", onTransitionEnd);
|
|
519
|
+
var overlays = template.parent.querySelectorAll(".overlay");
|
|
520
|
+
if (overlays) {
|
|
521
|
+
for (var i = 0; i < overlays.length; ++i) {
|
|
522
|
+
var htmlElement = overlays.item(i);
|
|
523
|
+
htmlElement.style.display = "none";
|
|
524
|
+
}
|
|
525
|
+
}
|
|
526
|
+
return Promise.resolve(template);
|
|
527
|
+
});
|
|
528
|
+
};
|
|
529
|
+
/**
|
|
530
|
+
* show the viewer (in case it was hidden)
|
|
531
|
+
*
|
|
532
|
+
* @param visibilityFunction an optional function to execute in order to show the container
|
|
533
|
+
* @returns a promise that will be resolved when the viewer is shown
|
|
534
|
+
*/
|
|
535
|
+
DefaultViewer.prototype.show = function (visibilityFunction) {
|
|
536
|
+
var template = this.templateManager.getTemplate("main");
|
|
537
|
+
//not possible, but yet:
|
|
538
|
+
if (!template) {
|
|
539
|
+
return Promise.reject("Main template not found");
|
|
540
|
+
}
|
|
541
|
+
return template.show(visibilityFunction);
|
|
542
|
+
};
|
|
543
|
+
/**
|
|
544
|
+
* hide the viewer (in case it is visible)
|
|
545
|
+
*
|
|
546
|
+
* @param visibilityFunction an optional function to execute in order to hide the container
|
|
547
|
+
* @returns a promise that will be resolved when the viewer is hidden
|
|
548
|
+
*/
|
|
549
|
+
DefaultViewer.prototype.hide = function (visibilityFunction) {
|
|
550
|
+
var template = this.templateManager.getTemplate("main");
|
|
551
|
+
//not possible, but yet:
|
|
552
|
+
if (!template) {
|
|
553
|
+
return Promise.reject("Main template not found");
|
|
554
|
+
}
|
|
555
|
+
return template.hide(visibilityFunction);
|
|
556
|
+
};
|
|
557
|
+
/**
|
|
558
|
+
* Show the loading screen.
|
|
559
|
+
* The loading screen can be configured using the configuration object
|
|
560
|
+
* @returns a promise that will be resolved when the loading screen is shown
|
|
561
|
+
*/
|
|
562
|
+
DefaultViewer.prototype.showLoadingScreen = function () {
|
|
563
|
+
var _this = this;
|
|
564
|
+
var template = this.templateManager.getTemplate("loadingScreen");
|
|
565
|
+
if (!template) {
|
|
566
|
+
return Promise.resolve("Loading Screen template not found");
|
|
567
|
+
}
|
|
568
|
+
return template.show(function (template) {
|
|
569
|
+
var canvasRect = _this.containerElement.getBoundingClientRect();
|
|
570
|
+
// var canvasPositioning = window.getComputedStyle(this.containerElement).position;
|
|
571
|
+
template.parent.style.display = "flex";
|
|
572
|
+
template.parent.style.width = canvasRect.width + "px";
|
|
573
|
+
template.parent.style.height = canvasRect.height + "px";
|
|
574
|
+
template.parent.style.opacity = "1";
|
|
575
|
+
// from the configuration!!!
|
|
576
|
+
var color = "black";
|
|
577
|
+
if (_this.configuration.templates && _this.configuration.templates.loadingScreen) {
|
|
578
|
+
color = (_this.configuration.templates.loadingScreen.params && _this.configuration.templates.loadingScreen.params.backgroundColor) || color;
|
|
579
|
+
}
|
|
580
|
+
template.parent.style.backgroundColor = color;
|
|
581
|
+
return Promise.resolve(template);
|
|
582
|
+
});
|
|
583
|
+
};
|
|
584
|
+
/**
|
|
585
|
+
* Hide the loading screen
|
|
586
|
+
* @returns a promise that will be resolved when the loading screen is hidden
|
|
587
|
+
*/
|
|
588
|
+
DefaultViewer.prototype.hideLoadingScreen = function () {
|
|
589
|
+
var template = this.templateManager.getTemplate("loadingScreen");
|
|
590
|
+
if (!template) {
|
|
591
|
+
return Promise.resolve("Loading Screen template not found");
|
|
592
|
+
}
|
|
593
|
+
return template.hide(function (template) {
|
|
594
|
+
template.parent.style.opacity = "0";
|
|
595
|
+
var onTransitionEnd = function () {
|
|
596
|
+
template.parent.removeEventListener("transitionend", onTransitionEnd);
|
|
597
|
+
template.parent.style.display = "none";
|
|
598
|
+
};
|
|
599
|
+
template.parent.addEventListener("transitionend", onTransitionEnd);
|
|
600
|
+
return Promise.resolve(template);
|
|
601
|
+
});
|
|
602
|
+
};
|
|
603
|
+
DefaultViewer.prototype.dispose = function () {
|
|
604
|
+
this.templateManager.dispose();
|
|
605
|
+
_super.prototype.dispose.call(this);
|
|
606
|
+
};
|
|
607
|
+
DefaultViewer.prototype._onConfigurationLoaded = function (configuration) {
|
|
608
|
+
var _this = this;
|
|
609
|
+
_super.prototype._onConfigurationLoaded.call(this, configuration);
|
|
610
|
+
this.templateManager = new TemplateManager(this.containerElement);
|
|
611
|
+
// initialize the templates
|
|
612
|
+
var templateConfiguration = this.configuration.templates || {};
|
|
613
|
+
this.templateManager.initTemplate(templateConfiguration);
|
|
614
|
+
// when done, execute onTemplatesLoaded()
|
|
615
|
+
this.templateManager.onAllLoaded.add(function () {
|
|
616
|
+
var canvas = _this.templateManager.getCanvas();
|
|
617
|
+
if (canvas) {
|
|
618
|
+
_this._canvas = canvas;
|
|
619
|
+
}
|
|
620
|
+
_this._onTemplateLoaded();
|
|
621
|
+
});
|
|
622
|
+
};
|
|
623
|
+
/**
|
|
624
|
+
* An extension of the light configuration of the abstract viewer.
|
|
625
|
+
*/
|
|
626
|
+
DefaultViewer.prototype._configureLights = function () {
|
|
627
|
+
var _this = this;
|
|
628
|
+
// labs feature - flashlight
|
|
629
|
+
if (this.configuration.lab && this.configuration.lab.flashlight) {
|
|
630
|
+
var lightTarget_1;
|
|
631
|
+
var angle = 0.5;
|
|
632
|
+
var exponent = Math.PI / 2;
|
|
633
|
+
if (typeof this.configuration.lab.flashlight === "object") {
|
|
634
|
+
exponent = this.configuration.lab.flashlight.exponent || exponent;
|
|
635
|
+
angle = this.configuration.lab.flashlight.angle || angle;
|
|
636
|
+
}
|
|
637
|
+
var flashlight_1 = new SpotLight("flashlight", Vector3.Zero(), Vector3.Zero(), exponent, angle, this.sceneManager.scene);
|
|
638
|
+
if (typeof this.configuration.lab.flashlight === "object") {
|
|
639
|
+
flashlight_1.intensity = this.configuration.lab.flashlight.intensity || flashlight_1.intensity;
|
|
640
|
+
if (this.configuration.lab.flashlight.diffuse) {
|
|
641
|
+
flashlight_1.diffuse.r = this.configuration.lab.flashlight.diffuse.r;
|
|
642
|
+
flashlight_1.diffuse.g = this.configuration.lab.flashlight.diffuse.g;
|
|
643
|
+
flashlight_1.diffuse.b = this.configuration.lab.flashlight.diffuse.b;
|
|
644
|
+
}
|
|
645
|
+
if (this.configuration.lab.flashlight.specular) {
|
|
646
|
+
flashlight_1.specular.r = this.configuration.lab.flashlight.specular.r;
|
|
647
|
+
flashlight_1.specular.g = this.configuration.lab.flashlight.specular.g;
|
|
648
|
+
flashlight_1.specular.b = this.configuration.lab.flashlight.specular.b;
|
|
649
|
+
}
|
|
650
|
+
}
|
|
651
|
+
this.sceneManager.scene.constantlyUpdateMeshUnderPointer = true;
|
|
652
|
+
this.sceneManager.scene.onPointerObservable.add(function (eventData) {
|
|
653
|
+
if (eventData.type === 4 && eventData.pickInfo) {
|
|
654
|
+
lightTarget_1 = eventData.pickInfo.pickedPoint;
|
|
655
|
+
}
|
|
656
|
+
else {
|
|
657
|
+
lightTarget_1 = undefined;
|
|
658
|
+
}
|
|
659
|
+
});
|
|
660
|
+
var updateFlashlightFunction = function () {
|
|
661
|
+
if (_this.sceneManager.camera && flashlight_1) {
|
|
662
|
+
flashlight_1.position.copyFrom(_this.sceneManager.camera.position);
|
|
663
|
+
if (lightTarget_1) {
|
|
664
|
+
lightTarget_1.subtractToRef(flashlight_1.position, flashlight_1.direction);
|
|
665
|
+
}
|
|
666
|
+
}
|
|
667
|
+
};
|
|
668
|
+
this.sceneManager.scene.registerBeforeRender(updateFlashlightFunction);
|
|
669
|
+
this._registeredOnBeforeRenderFunctions.push(updateFlashlightFunction);
|
|
670
|
+
}
|
|
671
|
+
};
|
|
672
|
+
return DefaultViewer;
|
|
673
|
+
}(AbstractViewerWithTemplate));
|
|
674
|
+
export { DefaultViewer };
|
|
675
|
+
//# sourceMappingURL=defaultViewer.js.map
|