@crystaldesign/real-time-viewer 25.3.0-beta.9 → 25.3.0-rc.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.
Files changed (161) hide show
  1. package/build/esm/index.js +341 -168
  2. package/build/types/real-time-viewer/src/CustomMaterial/index.d.ts.map +1 -1
  3. package/build/types/real-time-viewer/src/SelectionHandler/index.d.ts.map +1 -1
  4. package/build/types/real-time-viewer/src/context.d.ts.map +1 -1
  5. package/build/types/real-time-viewer/src/controls/index.d.ts.map +1 -1
  6. package/build/types/real-time-viewer/src/index.d.ts +1 -1
  7. package/build/types/real-time-viewer/src/index.d.ts.map +1 -1
  8. package/build/types/real-time-viewer/src/parser/createCams/index.d.ts.map +1 -1
  9. package/build/types/real-time-viewer/src/parser/findAssets/index.d.ts.map +1 -1
  10. package/build/types/real-time-viewer/src/parser/index.d.ts.map +1 -1
  11. package/build/types/real-time-viewer/src/parser/shadow/index.d.ts.map +1 -1
  12. package/build/types/real-time-viewer/src/store/SceneStore.d.ts +15 -1
  13. package/build/types/real-time-viewer/src/store/SceneStore.d.ts.map +1 -1
  14. package/build/types/real-time-viewer/src/store/UIStore.d.ts +8 -3
  15. package/build/types/real-time-viewer/src/store/UIStore.d.ts.map +1 -1
  16. package/build/types/real-time-viewer/src/store/UtilStore.d.ts +2 -1
  17. package/build/types/real-time-viewer/src/store/UtilStore.d.ts.map +1 -1
  18. package/build/types/real-time-viewer/src/store/types.d.ts +6 -0
  19. package/build/types/real-time-viewer/src/store/types.d.ts.map +1 -1
  20. package/build/types/real-time-viewer/src/types.d.ts +2 -1
  21. package/build/types/real-time-viewer/src/types.d.ts.map +1 -1
  22. package/build/types/real-time-viewer/src/useRealTimeRenderData.d.ts.map +1 -1
  23. package/build/umd/real-time-viewer.umd.min.js +1 -1
  24. package/build/umd/report.html +1 -1
  25. package/package.json +12 -12
  26. package/build/umd/1309.real-time-viewer.umd.min.js +0 -2
  27. package/build/umd/1309.real-time-viewer.umd.min.js.LICENSE.txt +0 -1
  28. package/build/umd/1447.real-time-viewer.umd.min.js +0 -2
  29. package/build/umd/1447.real-time-viewer.umd.min.js.LICENSE.txt +0 -1
  30. package/build/umd/1499.real-time-viewer.umd.min.js +0 -2
  31. package/build/umd/1499.real-time-viewer.umd.min.js.LICENSE.txt +0 -1
  32. package/build/umd/1781.real-time-viewer.umd.min.js +0 -2
  33. package/build/umd/1781.real-time-viewer.umd.min.js.LICENSE.txt +0 -1
  34. package/build/umd/1896.real-time-viewer.umd.min.js +0 -2
  35. package/build/umd/1896.real-time-viewer.umd.min.js.LICENSE.txt +0 -1
  36. package/build/umd/2011.real-time-viewer.umd.min.js +0 -2
  37. package/build/umd/2011.real-time-viewer.umd.min.js.LICENSE.txt +0 -1
  38. package/build/umd/2439.real-time-viewer.umd.min.js +0 -2
  39. package/build/umd/2439.real-time-viewer.umd.min.js.LICENSE.txt +0 -1
  40. package/build/umd/2817.real-time-viewer.umd.min.js +0 -2
  41. package/build/umd/2817.real-time-viewer.umd.min.js.LICENSE.txt +0 -1
  42. package/build/umd/2871.real-time-viewer.umd.min.js +0 -2
  43. package/build/umd/2871.real-time-viewer.umd.min.js.LICENSE.txt +0 -1
  44. package/build/umd/3116.real-time-viewer.umd.min.js +0 -2
  45. package/build/umd/3116.real-time-viewer.umd.min.js.LICENSE.txt +0 -1
  46. package/build/umd/3243.real-time-viewer.umd.min.js +0 -2
  47. package/build/umd/3243.real-time-viewer.umd.min.js.LICENSE.txt +0 -1
  48. package/build/umd/3351.real-time-viewer.umd.min.js +0 -2
  49. package/build/umd/3351.real-time-viewer.umd.min.js.LICENSE.txt +0 -1
  50. package/build/umd/3456.real-time-viewer.umd.min.js +0 -2
  51. package/build/umd/3456.real-time-viewer.umd.min.js.LICENSE.txt +0 -1
  52. package/build/umd/3945.real-time-viewer.umd.min.js +0 -2
  53. package/build/umd/3945.real-time-viewer.umd.min.js.LICENSE.txt +0 -1
  54. package/build/umd/4091.real-time-viewer.umd.min.js +0 -2
  55. package/build/umd/4091.real-time-viewer.umd.min.js.LICENSE.txt +0 -1
  56. package/build/umd/410.real-time-viewer.umd.min.js +0 -2
  57. package/build/umd/410.real-time-viewer.umd.min.js.LICENSE.txt +0 -1
  58. package/build/umd/4153.real-time-viewer.umd.min.js +0 -2
  59. package/build/umd/4153.real-time-viewer.umd.min.js.LICENSE.txt +0 -1
  60. package/build/umd/4248.real-time-viewer.umd.min.js +0 -2
  61. package/build/umd/4248.real-time-viewer.umd.min.js.LICENSE.txt +0 -1
  62. package/build/umd/4378.real-time-viewer.umd.min.js +0 -2
  63. package/build/umd/4378.real-time-viewer.umd.min.js.LICENSE.txt +0 -1
  64. package/build/umd/4431.real-time-viewer.umd.min.js +0 -2
  65. package/build/umd/4431.real-time-viewer.umd.min.js.LICENSE.txt +0 -1
  66. package/build/umd/4542.real-time-viewer.umd.min.js +0 -2
  67. package/build/umd/4542.real-time-viewer.umd.min.js.LICENSE.txt +0 -1
  68. package/build/umd/4602.real-time-viewer.umd.min.js +0 -2
  69. package/build/umd/4602.real-time-viewer.umd.min.js.LICENSE.txt +0 -1
  70. package/build/umd/4661.real-time-viewer.umd.min.js +0 -2
  71. package/build/umd/4661.real-time-viewer.umd.min.js.LICENSE.txt +0 -1
  72. package/build/umd/4669.real-time-viewer.umd.min.js +0 -2
  73. package/build/umd/4669.real-time-viewer.umd.min.js.LICENSE.txt +0 -1
  74. package/build/umd/4711.real-time-viewer.umd.min.js +0 -2
  75. package/build/umd/4711.real-time-viewer.umd.min.js.LICENSE.txt +0 -1
  76. package/build/umd/4823.real-time-viewer.umd.min.js +0 -2
  77. package/build/umd/4823.real-time-viewer.umd.min.js.LICENSE.txt +0 -1
  78. package/build/umd/5462.real-time-viewer.umd.min.js +0 -2
  79. package/build/umd/5462.real-time-viewer.umd.min.js.LICENSE.txt +0 -1
  80. package/build/umd/5478.real-time-viewer.umd.min.js +0 -2
  81. package/build/umd/5478.real-time-viewer.umd.min.js.LICENSE.txt +0 -1
  82. package/build/umd/5483.real-time-viewer.umd.min.js +0 -2
  83. package/build/umd/5483.real-time-viewer.umd.min.js.LICENSE.txt +0 -1
  84. package/build/umd/5555.real-time-viewer.umd.min.js +0 -2
  85. package/build/umd/5555.real-time-viewer.umd.min.js.LICENSE.txt +0 -1
  86. package/build/umd/5860.real-time-viewer.umd.min.js +0 -2
  87. package/build/umd/5860.real-time-viewer.umd.min.js.LICENSE.txt +0 -1
  88. package/build/umd/5922.real-time-viewer.umd.min.js +0 -2
  89. package/build/umd/5922.real-time-viewer.umd.min.js.LICENSE.txt +0 -1
  90. package/build/umd/6095.real-time-viewer.umd.min.js +0 -2
  91. package/build/umd/6095.real-time-viewer.umd.min.js.LICENSE.txt +0 -1
  92. package/build/umd/615.real-time-viewer.umd.min.js +0 -2
  93. package/build/umd/615.real-time-viewer.umd.min.js.LICENSE.txt +0 -1
  94. package/build/umd/6230.real-time-viewer.umd.min.js +0 -2
  95. package/build/umd/6230.real-time-viewer.umd.min.js.LICENSE.txt +0 -1
  96. package/build/umd/6357.real-time-viewer.umd.min.js +0 -2
  97. package/build/umd/6357.real-time-viewer.umd.min.js.LICENSE.txt +0 -1
  98. package/build/umd/653.real-time-viewer.umd.min.js +0 -2
  99. package/build/umd/653.real-time-viewer.umd.min.js.LICENSE.txt +0 -1
  100. package/build/umd/6656.real-time-viewer.umd.min.js +0 -2
  101. package/build/umd/6656.real-time-viewer.umd.min.js.LICENSE.txt +0 -1
  102. package/build/umd/6829.real-time-viewer.umd.min.js +0 -2
  103. package/build/umd/6829.real-time-viewer.umd.min.js.LICENSE.txt +0 -1
  104. package/build/umd/7042.real-time-viewer.umd.min.js +0 -2
  105. package/build/umd/7042.real-time-viewer.umd.min.js.LICENSE.txt +0 -1
  106. package/build/umd/710.real-time-viewer.umd.min.js +0 -2
  107. package/build/umd/710.real-time-viewer.umd.min.js.LICENSE.txt +0 -1
  108. package/build/umd/7142.real-time-viewer.umd.min.js +0 -2
  109. package/build/umd/7142.real-time-viewer.umd.min.js.LICENSE.txt +0 -1
  110. package/build/umd/7229.real-time-viewer.umd.min.js +0 -2
  111. package/build/umd/7229.real-time-viewer.umd.min.js.LICENSE.txt +0 -1
  112. package/build/umd/7276.real-time-viewer.umd.min.js +0 -2
  113. package/build/umd/7276.real-time-viewer.umd.min.js.LICENSE.txt +0 -1
  114. package/build/umd/7352.real-time-viewer.umd.min.js +0 -2
  115. package/build/umd/7352.real-time-viewer.umd.min.js.LICENSE.txt +0 -1
  116. package/build/umd/7501.real-time-viewer.umd.min.js +0 -2
  117. package/build/umd/7501.real-time-viewer.umd.min.js.LICENSE.txt +0 -1
  118. package/build/umd/7607.real-time-viewer.umd.min.js +0 -2
  119. package/build/umd/7607.real-time-viewer.umd.min.js.LICENSE.txt +0 -1
  120. package/build/umd/7729.real-time-viewer.umd.min.js +0 -2
  121. package/build/umd/7729.real-time-viewer.umd.min.js.LICENSE.txt +0 -1
  122. package/build/umd/7751.real-time-viewer.umd.min.js +0 -2
  123. package/build/umd/7751.real-time-viewer.umd.min.js.LICENSE.txt +0 -1
  124. package/build/umd/7754.real-time-viewer.umd.min.js +0 -2
  125. package/build/umd/7754.real-time-viewer.umd.min.js.LICENSE.txt +0 -1
  126. package/build/umd/8078.real-time-viewer.umd.min.js +0 -2
  127. package/build/umd/8078.real-time-viewer.umd.min.js.LICENSE.txt +0 -1
  128. package/build/umd/8105.real-time-viewer.umd.min.js +0 -2
  129. package/build/umd/8105.real-time-viewer.umd.min.js.LICENSE.txt +0 -1
  130. package/build/umd/815.real-time-viewer.umd.min.js +0 -2
  131. package/build/umd/815.real-time-viewer.umd.min.js.LICENSE.txt +0 -1
  132. package/build/umd/8240.real-time-viewer.umd.min.js +0 -2
  133. package/build/umd/8240.real-time-viewer.umd.min.js.LICENSE.txt +0 -1
  134. package/build/umd/8333.real-time-viewer.umd.min.js +0 -2
  135. package/build/umd/8333.real-time-viewer.umd.min.js.LICENSE.txt +0 -1
  136. package/build/umd/8526.real-time-viewer.umd.min.js +0 -2
  137. package/build/umd/8526.real-time-viewer.umd.min.js.LICENSE.txt +0 -1
  138. package/build/umd/8620.real-time-viewer.umd.min.js +0 -2
  139. package/build/umd/8620.real-time-viewer.umd.min.js.LICENSE.txt +0 -1
  140. package/build/umd/8728.real-time-viewer.umd.min.js +0 -2
  141. package/build/umd/8728.real-time-viewer.umd.min.js.LICENSE.txt +0 -1
  142. package/build/umd/8729.real-time-viewer.umd.min.js +0 -2
  143. package/build/umd/8729.real-time-viewer.umd.min.js.LICENSE.txt +0 -1
  144. package/build/umd/8991.real-time-viewer.umd.min.js +0 -2
  145. package/build/umd/8991.real-time-viewer.umd.min.js.LICENSE.txt +0 -1
  146. package/build/umd/9078.real-time-viewer.umd.min.js +0 -2
  147. package/build/umd/9078.real-time-viewer.umd.min.js.LICENSE.txt +0 -1
  148. package/build/umd/913.real-time-viewer.umd.min.js +0 -2
  149. package/build/umd/913.real-time-viewer.umd.min.js.LICENSE.txt +0 -1
  150. package/build/umd/930.real-time-viewer.umd.min.js +0 -2
  151. package/build/umd/930.real-time-viewer.umd.min.js.LICENSE.txt +0 -1
  152. package/build/umd/9383.real-time-viewer.umd.min.js +0 -2
  153. package/build/umd/9383.real-time-viewer.umd.min.js.LICENSE.txt +0 -1
  154. package/build/umd/9473.real-time-viewer.umd.min.js +0 -2
  155. package/build/umd/9473.real-time-viewer.umd.min.js.LICENSE.txt +0 -1
  156. package/build/umd/9568.real-time-viewer.umd.min.js +0 -2
  157. package/build/umd/9568.real-time-viewer.umd.min.js.LICENSE.txt +0 -1
  158. package/build/umd/9712.real-time-viewer.umd.min.js +0 -2
  159. package/build/umd/9712.real-time-viewer.umd.min.js.LICENSE.txt +0 -1
  160. package/build/umd/9884.real-time-viewer.umd.min.js +0 -2
  161. package/build/umd/9884.real-time-viewer.umd.min.js.LICENSE.txt +0 -1
@@ -1,6 +1,7 @@
1
1
  import { useRef, useEffect, memo } from 'react';
2
2
  import _asyncToGenerator from '@babel/runtime/helpers/asyncToGenerator';
3
3
  import _regeneratorRuntime from '@babel/runtime/regenerator';
4
+ import { Constants, HighlightLayer, Color4 as Color4$1 } from '@babylonjs/core';
4
5
  import _toConsumableArray from '@babel/runtime/helpers/toConsumableArray';
5
6
  import _classCallCheck from '@babel/runtime/helpers/classCallCheck';
6
7
  import _createClass from '@babel/runtime/helpers/createClass';
@@ -14,7 +15,6 @@ import { ExecuteCodeAction } from '@babylonjs/core/Actions/directActions';
14
15
  import { Color4, Color3 } from '@babylonjs/core/Maths/math.color';
15
16
  import { PBRMaterial } from '@babylonjs/core/Materials/PBR/pbrMaterial';
16
17
  import '@babylonjs/core/Rendering/edgesRenderer';
17
- import { AbstractMesh } from '@babylonjs/core/Meshes/abstractMesh';
18
18
  import { GLTF2Export } from '@babylonjs/serializers';
19
19
  import '@babylonjs/core/Helpers/sceneHelpers';
20
20
  import { CubeTexture } from '@babylonjs/core/Materials/Textures/cubeTexture';
@@ -33,12 +33,10 @@ import { Rectangle } from '@babylonjs/gui/2D/controls/rectangle';
33
33
  import { TextBlock } from '@babylonjs/gui/2D/controls/textBlock';
34
34
  import { Mesh } from '@babylonjs/core/Meshes/mesh';
35
35
  import { Axis } from '@babylonjs/core/Maths/math.axis';
36
- import { HighlightLayer } from '@babylonjs/core/Layers/';
37
36
  import { StandardMaterial } from '@babylonjs/core/Materials/standardMaterial';
38
37
  import { Texture } from '@babylonjs/core/Materials/Textures/texture';
39
- import { Constants } from '@babylonjs/core/Engines/constants';
40
38
  import { Matrix as Matrix$1, Vector3 as Vector3$1 } from '@babylonjs/core/Maths/math';
41
- import { Engine } from '@babylonjs/core/Engines/engine';
39
+ import { EngineFactory } from '@babylonjs/core/Engines/engineFactory';
42
40
  import { Scene } from '@babylonjs/core/scene';
43
41
  import { DracoCompression } from '@babylonjs/core/Meshes/Compression/dracoCompression';
44
42
  import { SceneLoader } from '@babylonjs/core/Loading/sceneLoader';
@@ -108,7 +106,9 @@ function GetCameraControls(camera) {
108
106
  };
109
107
  (_sceneStore$updateCam = sceneStore.updateCameraInformation) === null || _sceneStore$updateCam === void 0 || _sceneStore$updateCam.call(sceneStore, cam);
110
108
  uistore.requestNewOverlayImage(cam, sceneStore.focusedElement, sceneStore.targetCameraPosition);
111
- if (stopRender) sceneStore.doRenderControlLoop = false;
109
+ if (stopRender) {
110
+ sceneStore.doRenderControlLoop = false;
111
+ }
112
112
  }
113
113
  function moveTarget(deltaX, deltaY) {
114
114
  sceneStore.isControlledViewpoint = false;
@@ -179,12 +179,13 @@ function GetCameraControls(camera) {
179
179
  sceneStore.targetCameraPosition = new Vector3(x, y, z);
180
180
  }
181
181
  rotateUniversalCamera(deltaX, deltaY);
182
+ if (!sceneStore.doRenderControlLoop) sceneStore.runRenderLoopIndefinitely();
182
183
  sceneStore.doRenderControlLoop = true;
183
184
  }
184
185
  function onRotateMouse(event) {
185
186
  if (previousTouch != undefined) return;
186
- var deltaX = event.movementX || event.mozMovementX || event.webkitMovementX || 0;
187
- var deltaY = event.movementY || event.mozMovementY || event.webkitMovementY || 0;
187
+ var deltaX = event.movementX || 0;
188
+ var deltaY = event.movementY || 0;
188
189
  onRotate(deltaX, deltaY);
189
190
  }
190
191
  function onMouseDown(ev) {
@@ -204,9 +205,10 @@ function GetCameraControls(camera) {
204
205
  element === null || element === void 0 || element.removeEventListener('pointermove', onMouseMoveTarget, false);
205
206
  }
206
207
  function onMouseMoveTarget(event) {
207
- var deltaX = event.movementX || event.mozMovementX || event.webkitMovementX || 0;
208
- var deltaY = event.movementY || event.mozMovementY || event.webkitMovementY || 0;
208
+ var deltaX = event.movementX || 0;
209
+ var deltaY = event.movementY || 0;
209
210
  moveTarget(deltaX * 0.002, deltaY * 0.002);
211
+ if (!sceneStore.doRenderControlLoop) sceneStore.runRenderLoopIndefinitely();
210
212
  sceneStore.doRenderControlLoop = true;
211
213
  }
212
214
  var onTouchStart = function onTouchStart(ev) {
@@ -232,6 +234,7 @@ function GetCameraControls(camera) {
232
234
  var dist = Math.hypot(ev.touches[0].pageX - ev.touches[1].pageX, ev.touches[0].pageY - ev.touches[1].pageY);
233
235
  var distChange = dist - initDistance;
234
236
  moveCameraAwayFromTarget(-distChange * 0.01);
237
+ if (!sceneStore.doRenderControlLoop) sceneStore.runRenderLoopIndefinitely();
235
238
  sceneStore.doRenderControlLoop = true;
236
239
  initDistance = dist;
237
240
  }
@@ -246,6 +249,7 @@ function GetCameraControls(camera) {
246
249
  }
247
250
  var value = ev.deltaY > 0 ? add : -add;
248
251
  moveCameraAwayFromTarget(value * 2);
252
+ if (!sceneStore.doRenderControlLoop) sceneStore.runRenderLoopIndefinitely();
249
253
  sceneStore.doRenderControlLoop = true;
250
254
  }
251
255
  function onDoubleClick() {}
@@ -940,6 +944,7 @@ function updateCam(camera, scene) {
940
944
  var _sceneStore$updateCam;
941
945
  if (camera.pos.x == 0 && camera.pos.y == 0 && camera.pos.z == 0) return;
942
946
  var utilStore = useUtilStoreContext();
947
+ if (!utilStore.updateCam) return;
943
948
  var sceneStore = useSceneStoreContext();
944
949
  var cam = scene.getCameraByName('defaultCam');
945
950
  if (!cam) {
@@ -1000,6 +1005,7 @@ var SceneStore = /*#__PURE__*/function () {
1000
1005
  _defineProperty(this, "_sceneConstruct", {});
1001
1006
  _defineProperty(this, "_hasRendered", false);
1002
1007
  _defineProperty(this, "_hasPlanned", false);
1008
+ _defineProperty(this, "_modelIteration", 0);
1003
1009
  _defineProperty(this, "_utilStore", void 0);
1004
1010
  _defineProperty(this, "_cache", []);
1005
1011
  _defineProperty(this, "_ssao", undefined);
@@ -1010,6 +1016,7 @@ var SceneStore = /*#__PURE__*/function () {
1010
1016
  _defineProperty(this, "_jwt", void 0);
1011
1017
  _defineProperty(this, "_onMissingGeo", void 0);
1012
1018
  _defineProperty(this, "_cancelSceneExport", void 0);
1019
+ _defineProperty(this, "_materialCache", void 0);
1013
1020
  //controls
1014
1021
  _defineProperty(this, "_renderControlLoop", undefined);
1015
1022
  _defineProperty(this, "_doRenderControlLoop", false);
@@ -1019,6 +1026,7 @@ var SceneStore = /*#__PURE__*/function () {
1019
1026
  _defineProperty(this, "_focusedElement", void 0);
1020
1027
  _defineProperty(this, "_isControlledViewpoint", true);
1021
1028
  // if the current viewpoint should automatically change with the planning
1029
+ _defineProperty(this, "_renderLoopTimeoutId", void 0);
1022
1030
  _defineProperty(this, "light", undefined);
1023
1031
  _defineProperty(this, "changedElements", void 0);
1024
1032
  _defineProperty(this, "updateCameraInformation", void 0);
@@ -1029,6 +1037,9 @@ var SceneStore = /*#__PURE__*/function () {
1029
1037
  this.updateCameraInformation = updateCameraInformation;
1030
1038
  this._cancelSceneExport = false;
1031
1039
  this._jwt = jwt;
1040
+ this._materialCache = [];
1041
+ this._hqRenderScript = JSON.parse(hqRenderScript);
1042
+ this._utilStore = utilStore;
1032
1043
  var options = new SceneOptimizerOptions(15, 1000);
1033
1044
  options.addOptimization(new ShadowsOptimization(0));
1034
1045
  options.addOptimization(new RenderTargetsOptimization(0));
@@ -1036,11 +1047,6 @@ var SceneStore = /*#__PURE__*/function () {
1036
1047
  scene.materials.forEach(function (mat) {
1037
1048
  return mat.freeze();
1038
1049
  });
1039
- scene.meshes.forEach(function (mesh) {
1040
- mesh.freezeWorldMatrix();
1041
- mesh.cullingStrategy = AbstractMesh.CULLINGSTRATEGY_OPTIMISTIC_INCLUSION_THEN_BSPHERE_ONLY;
1042
- });
1043
- scene.autoClear = false;
1044
1050
  scene.blockMaterialDirtyMechanism = true;
1045
1051
  return true;
1046
1052
  }, function () {
@@ -1054,10 +1060,18 @@ var SceneStore = /*#__PURE__*/function () {
1054
1060
  return '';
1055
1061
  }, 1);
1056
1062
  this._optimizer = new SceneOptimizer(scene, options);
1057
- this._hqRenderScript = JSON.parse(hqRenderScript);
1058
- this._utilStore = utilStore;
1059
1063
  }
1060
1064
  return _createClass(SceneStore, [{
1065
+ key: "materialCache",
1066
+ get: function get() {
1067
+ return this._materialCache;
1068
+ }
1069
+ }, {
1070
+ key: "modelIteration",
1071
+ get: function get() {
1072
+ return this._modelIteration;
1073
+ }
1074
+ }, {
1061
1075
  key: "jwt",
1062
1076
  get: function get() {
1063
1077
  return this._jwt;
@@ -1375,6 +1389,44 @@ var SceneStore = /*#__PURE__*/function () {
1375
1389
  set: function set(renderPipeline) {
1376
1390
  this._renderPipeline = renderPipeline;
1377
1391
  }
1392
+ }, {
1393
+ key: "renderLoop",
1394
+ value: function renderLoop() {
1395
+ var _this$controlRenderLo;
1396
+ if (this.cameraTargetPosition.x == 0 && this.cameraTargetPosition.y == 0 && this.cameraTargetPosition.z == 0) this.setCameraTarget();
1397
+ (_this$controlRenderLo = this.controlRenderLoop) === null || _this$controlRenderLo === void 0 || _this$controlRenderLo.call(this);
1398
+ this.scene.render();
1399
+ }
1400
+ }, {
1401
+ key: "runRenderLoop",
1402
+ value: function runRenderLoop() {
1403
+ var engine = this._scene.getEngine();
1404
+ if (engine.activeRenderLoops.length != 0) return;
1405
+ engine.runRenderLoop(this.renderLoop.bind(this));
1406
+ }
1407
+ }, {
1408
+ key: "runRenderLoopIndefinitely",
1409
+ value: function runRenderLoopIndefinitely() {
1410
+ clearTimeout(this._renderLoopTimeoutId);
1411
+ this.runRenderLoop();
1412
+ }
1413
+ }, {
1414
+ key: "runRenderLoopForTime",
1415
+ value: function runRenderLoopForTime(ms) {
1416
+ var _this2 = this;
1417
+ this.runRenderLoop();
1418
+ clearTimeout(this._renderLoopTimeoutId);
1419
+ this._renderLoopTimeoutId = setTimeout(function () {
1420
+ _this2.stopRenderLoop();
1421
+ }, ms);
1422
+ }
1423
+ }, {
1424
+ key: "stopRenderLoop",
1425
+ value: function stopRenderLoop() {
1426
+ clearTimeout(this._renderLoopTimeoutId);
1427
+ this._renderLoopTimeoutId = undefined;
1428
+ this._scene.getEngine().stopRenderLoop();
1429
+ }
1378
1430
  }, {
1379
1431
  key: "setResolution",
1380
1432
  value: function setResolution(gameCanvas, resolution) {
@@ -1392,6 +1444,40 @@ var SceneStore = /*#__PURE__*/function () {
1392
1444
  }
1393
1445
  this._scene.getEngine().resize();
1394
1446
  }
1447
+ }, {
1448
+ key: "checkMaterialCache",
1449
+ value: function checkMaterialCache() {
1450
+ // material cache can't go over amount x because it leads to performance issues
1451
+ if (this._materialCache.length < 10) return;
1452
+ var amountToDispose = this._materialCache.length - 11;
1453
+ var disposableMaterials = this._materialCache.filter(function (m) {
1454
+ return m.mat.getBindedMeshes().length == 0;
1455
+ });
1456
+ disposableMaterials = disposableMaterials.sort(function (dm) {
1457
+ return dm.lastUsage;
1458
+ });
1459
+ for (var idx = 0; idx < amountToDispose; idx++) {
1460
+ if (idx < disposableMaterials.length - 1) {
1461
+ var _mat$baseTexture, _mat$metallicRoughnes, _mat$normalTexture;
1462
+ var mat = disposableMaterials[idx].mat;
1463
+ mat.dispose();
1464
+ (_mat$baseTexture = mat.baseTexture) === null || _mat$baseTexture === void 0 || _mat$baseTexture.dispose();
1465
+ (_mat$metallicRoughnes = mat.metallicRoughnessTexture) === null || _mat$metallicRoughnes === void 0 || _mat$metallicRoughnes.dispose();
1466
+ (_mat$normalTexture = mat.normalTexture) === null || _mat$normalTexture === void 0 || _mat$normalTexture.dispose();
1467
+ this._materialCache.splice(this._materialCache.indexOf(disposableMaterials[idx]), 1);
1468
+ }
1469
+ }
1470
+ }
1471
+ }, {
1472
+ key: "addMaterialToCache",
1473
+ value: function addMaterialToCache(materialCache) {
1474
+ this._materialCache.push(materialCache);
1475
+ }
1476
+ }, {
1477
+ key: "updateModelIteration",
1478
+ value: function updateModelIteration() {
1479
+ this._modelIteration = this._modelIteration + 1;
1480
+ }
1395
1481
  }, {
1396
1482
  key: "init",
1397
1483
  value: function init(diva3durl, gameCanvas, viewpoint, resolution) {
@@ -1668,6 +1754,7 @@ function SelHandler (_ref) {
1668
1754
  sceneStore.selectedElement = elemName;
1669
1755
  uiStore.selectElem(elemName);
1670
1756
  onElSelected === null || onElSelected === void 0 || onElSelected(elem.parent.name, Number(elemName));
1757
+ sceneStore.runRenderLoopForTime(1000);
1671
1758
  };
1672
1759
  return {
1673
1760
  onSelection: onSelection
@@ -1685,7 +1772,7 @@ function _arrayLikeToArray$5(r, a) { (null == a || a > r.length) && (a = r.lengt
1685
1772
  */
1686
1773
 
1687
1774
  var UIStore = /*#__PURE__*/function () {
1688
- function UIStore(scene, enableSSAO, utilStore, uiConfig, requestNewOverlayImage, _overlayImage, onElementCopy) {
1775
+ function UIStore(scene, enableSSAO, _utilStore, uiConfig, requestNewOverlayImage, _overlayImage, onElementCopy, runRenderLoopForTime) {
1689
1776
  var _this = this;
1690
1777
  _classCallCheck(this, UIStore);
1691
1778
  _defineProperty(this, "_utilStore", void 0);
@@ -1708,38 +1795,57 @@ var UIStore = /*#__PURE__*/function () {
1708
1795
  _defineProperty(this, "_gridGui", void 0);
1709
1796
  _defineProperty(this, "_isStaticBg", void 0);
1710
1797
  _defineProperty(this, "_elementsInfo", void 0);
1711
- _defineProperty(this, "_selectedHl", void 0);
1712
1798
  _defineProperty(this, "_diffuseTexture", void 0);
1713
1799
  _defineProperty(this, "_plane", void 0);
1714
1800
  _defineProperty(this, "_selectedMeshes", []);
1801
+ _defineProperty(this, "_isUnityComb", false);
1802
+ _defineProperty(this, "_selectedHl", void 0);
1803
+ _defineProperty(this, "_runRenderLoopForTime", void 0);
1715
1804
  _defineProperty(this, "updateOverlayImage", function (overlayImage) {
1716
- var _this$_diffuseTexture;
1805
+ var _this$_diffuseTexture, _this$_runRenderLoopF;
1717
1806
  if (!overlayImage || !_this._scene || ((_this$_diffuseTexture = _this._diffuseTexture) === null || _this$_diffuseTexture === void 0 ? void 0 : _this$_diffuseTexture.url) == overlayImage.base64) return;
1807
+ var utilStore = useUtilStoreContext();
1808
+ if (!utilStore.updateCam) return;
1718
1809
  _this._isStaticBg = overlayImage.isStaticBg;
1719
- _this._diffuseTexture.updateURL(overlayImage.base64);
1720
- _this._plane.visibility = 1;
1810
+
1811
+ // no highlightlayer on static room bg
1812
+ if (_this._isStaticBg) {
1813
+ _this.deactivateHighlightLayer();
1814
+ }
1721
1815
  _this._enableSSAO(false);
1816
+ var tex = new Texture(overlayImage.base64, _this._scene, undefined, true, Texture.TRILINEAR_SAMPLINGMODE, function () {
1817
+ _this._plane.material.diffuseTexture = tex;
1818
+ _this._diffuseTexture.dispose();
1819
+ _this._diffuseTexture = tex;
1820
+ });
1821
+ _this.fadeInOverlayImage(_this._plane.visibility == 1);
1822
+ (_this$_runRenderLoopF = _this._runRenderLoopForTime) === null || _this$_runRenderLoopF === void 0 || _this$_runRenderLoopF.call(_this, 2000);
1722
1823
  });
1723
1824
  this._scene = scene;
1724
- var plane = MeshBuilder.CreatePlane('overlayplane', {
1725
- size: 0.0047
1726
- }, scene);
1825
+ var engine = this._scene.getEngine();
1727
1826
  var mat = new StandardMaterial('planeMat', scene);
1728
- this._diffuseTexture = new Texture('data:image/gif;base64,R0lGODlhAQABALMAAAAAAP///////////////////////////////////////////////////////////yH5BAEAAAEALAAAAAABAAEAAAQCMEQAOw==', scene);
1827
+ this._diffuseTexture = new Texture('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mP8/wcAAwAB/ep3wWkAAAAASUVORK5CYII=', scene);
1729
1828
  mat.diffuseTexture = this._diffuseTexture;
1730
1829
  mat.emissiveTexture = this._diffuseTexture;
1731
1830
  mat.specularColor = Color3.Black();
1732
- this._plane = plane;
1733
- plane.material = mat;
1734
- var engine = this._scene.getEngine();
1735
- plane.scaling.x = engine.getRenderingCanvas().width / engine.getRenderingCanvas().height;
1736
- plane.position.z = 0.011;
1737
- plane.isPickable = false;
1738
- plane.parent = scene.activeCamera;
1831
+ this._plane = MeshBuilder.CreatePlane('overlayplane', {
1832
+ size: 0.0047
1833
+ }, scene);
1834
+ this._plane.setEnabled(false);
1835
+ this._plane.material = mat;
1836
+ this._plane.visibility = 0;
1837
+ this._plane.scaling.x = engine.getRenderingCanvas().width / engine.getRenderingCanvas().height;
1838
+ this._plane.position.z = 0.011;
1839
+ this._plane.isPickable = false;
1840
+ this._plane.parent = scene.activeCamera;
1739
1841
  this._selectedHl = new HighlightLayer('hl', this._scene);
1740
1842
  this._selectedHl.innerGlow = false;
1843
+ this._selectedHl.outerGlow = false;
1844
+ this._selectedHl.blurHorizontalSize = 1;
1845
+ this._selectedHl.blurVerticalSize = 1;
1846
+ this._selectedHl.mainTexture.samples = 4;
1741
1847
  this._enableSSAO = enableSSAO;
1742
- this._utilStore = utilStore;
1848
+ this._utilStore = _utilStore;
1743
1849
  this._gui = AdvancedDynamicTexture.CreateFullscreenUI('UI');
1744
1850
  this._gui.layer.layerMask = 0x0fffffff;
1745
1851
  this._gui.renderScale = 1;
@@ -1756,10 +1862,11 @@ var UIStore = /*#__PURE__*/function () {
1756
1862
  }
1757
1863
  this._isStaticBg = _overlayImage === null || _overlayImage === void 0 ? void 0 : _overlayImage.isStaticBg;
1758
1864
  if (_overlayImage) {
1759
- this._diffuseTexture.updateURL(_overlayImage.base64);
1760
- this._plane.visibility = 1;
1865
+ this._isUnityComb = true;
1866
+ this._plane.setEnabled(false);
1761
1867
  this._enableSSAO(false);
1762
1868
  }
1869
+ this._runRenderLoopForTime = runRenderLoopForTime;
1763
1870
  }
1764
1871
  return _createClass(UIStore, [{
1765
1872
  key: "isStaticBg",
@@ -1769,7 +1876,7 @@ var UIStore = /*#__PURE__*/function () {
1769
1876
  }, {
1770
1877
  key: "unityCombActive",
1771
1878
  get: function get() {
1772
- return !!this._plane;
1879
+ return !!this._isUnityComb;
1773
1880
  }
1774
1881
  }, {
1775
1882
  key: "initSelectionHandler",
@@ -1793,19 +1900,42 @@ var UIStore = /*#__PURE__*/function () {
1793
1900
  };
1794
1901
  }
1795
1902
  }, {
1796
- key: "highlightObservable",
1797
- value: function highlightObservable(meshes) {
1903
+ key: "fadeOutOverlayImage",
1904
+ value: function fadeOutOverlayImage() {
1905
+ this._plane.visibility = 0;
1906
+ var root = this._scene.getTransformNodeByName('Root');
1907
+ if (root) root.getChildMeshes().forEach(function (m) {
1908
+ m.visibility = 1;
1909
+ if (!m.material) return;
1910
+ m.material.depthFunction = Constants.LESS;
1911
+ m.material.disableColorWrite = false;
1912
+ });
1913
+ }
1914
+ }, {
1915
+ key: "fadeInOverlayImage",
1916
+ value: function fadeInOverlayImage(shorter) {
1798
1917
  var _this3 = this;
1799
- meshes.forEach(function (m) {
1800
- if (_this3._plane.visibility == 1) {
1801
- m.material.depthFunction = Constants.ALWAYS;
1802
- m.material.disableColorWrite = true;
1918
+ var startTime = performance.now();
1919
+ var _animate = function animate() {
1920
+ var elapsedTime = performance.now() - startTime;
1921
+ var progress = Math.min(elapsedTime / (shorter ? 50 : 500), 1); // Normalize progress (0 to 1)
1922
+
1923
+ _this3._plane.visibility = progress;
1924
+ if (progress < 1) {
1925
+ requestAnimationFrame(_animate);
1803
1926
  } else {
1804
- m.visibility = 1;
1805
- m.material.depthFunction = Constants.LESS;
1806
- m.material.disableColorWrite = false;
1927
+ //animation finished
1928
+ var root = _this3._scene.getTransformNodeByName('Root');
1929
+ if (root) root.getChildMeshes().forEach(function (m) {
1930
+ m.visibility = 1;
1931
+ if (!m.material) return;
1932
+ m.material.depthFunction = Constants.ALWAYS;
1933
+ m.material.disableColorWrite = true;
1934
+ });
1935
+ _this3._plane.setEnabled(true);
1807
1936
  }
1808
- });
1937
+ };
1938
+ _animate();
1809
1939
  }
1810
1940
  }, {
1811
1941
  key: "createGridGui",
@@ -1857,9 +1987,12 @@ var UIStore = /*#__PURE__*/function () {
1857
1987
  }, {
1858
1988
  key: "resize",
1859
1989
  value: function resize(scene) {
1990
+ this._gui.dispose();
1860
1991
  this._gui = AdvancedDynamicTexture.CreateFullscreenUI('UI', true, scene);
1861
1992
  this._gui.renderScale = 1;
1862
1993
  if (this._latestViewpoint) this._latestViewpoint.isOutdated = true;
1994
+ var engine = scene.getEngine();
1995
+ this._plane.scaling.x = engine.getRenderingCanvas().width / engine.getRenderingCanvas().height;
1863
1996
  }
1864
1997
  }, {
1865
1998
  key: "addElementsInfo",
@@ -1869,9 +2002,7 @@ var UIStore = /*#__PURE__*/function () {
1869
2002
  }, {
1870
2003
  key: "createPosNr",
1871
2004
  value: function createPosNr(elementInfo, element, isBoxPlanner) {
1872
- var _this5 = this,
1873
- _this$_utilStore$view,
1874
- _this$_utilStore$view2;
2005
+ var _this5 = this;
1875
2006
  var guiElem = {
1876
2007
  elementId: elementInfo.elementId,
1877
2008
  elements: []
@@ -1916,16 +2047,25 @@ var UIStore = /*#__PURE__*/function () {
1916
2047
  guiElemRightBack.position = _pos;
1917
2048
  }
1918
2049
  var childMeshes = element.getChildMeshes();
1919
- this._scene.onBeforeRenderObservable.add(function () {
1920
- return _this5.highlightObservable(childMeshes);
2050
+ childMeshes.forEach(function (m) {
2051
+ if (_this5._plane.visibility == 1) {
2052
+ m.material.depthFunction = Constants.ALWAYS;
2053
+ m.material.disableColorWrite = true;
2054
+ } else {
2055
+ m.visibility = 1;
2056
+ m.material.depthFunction = Constants.LESS;
2057
+ m.material.disableColorWrite = false;
2058
+ }
1921
2059
  });
1922
2060
  if (!elementInfo.active) {
1923
2061
  childMeshes.forEach(function (m) {
1924
- m.visibility = 0;
2062
+ if (_this5._plane.visibility == 1) m.visibility = 0;
1925
2063
  if (!m.actionManager) m.actionManager = new ActionManager(_this5._scene);
1926
2064
  m.actionManager.registerAction(new ExecuteCodeAction(ActionManager.OnPointerOverTrigger, function (ev) {
2065
+ var _this5$_runRenderLoop;
2066
+ (_this5$_runRenderLoop = _this5._runRenderLoopForTime) === null || _this5$_runRenderLoop === void 0 || _this5$_runRenderLoop.call(_this5, 1000);
1927
2067
  _this5._selectedHl.removeAllMeshes();
1928
- _this5._selectedMeshes.forEach(function (_m) {
2068
+ if (_this5._plane.visibility == 1) _this5._selectedMeshes.forEach(function (_m) {
1929
2069
  return _m.visibility = 0;
1930
2070
  });
1931
2071
  element.getChildMeshes().forEach(function (_m) {
@@ -1934,8 +2074,10 @@ var UIStore = /*#__PURE__*/function () {
1934
2074
  });
1935
2075
  }));
1936
2076
  m.actionManager.registerAction(new ExecuteCodeAction(ActionManager.OnPointerOutTrigger, function (ev) {
2077
+ var _this5$_runRenderLoop2;
2078
+ (_this5$_runRenderLoop2 = _this5._runRenderLoopForTime) === null || _this5$_runRenderLoop2 === void 0 || _this5$_runRenderLoop2.call(_this5, 1000);
1937
2079
  _this5._selectedHl.removeAllMeshes();
1938
- element.getChildMeshes().forEach(function (_m) {
2080
+ if (_this5._plane.visibility == 1) element.getChildMeshes().forEach(function (_m) {
1939
2081
  return _m.visibility = 0;
1940
2082
  });
1941
2083
  _this5._selectedMeshes.forEach(function (_m) {
@@ -1944,15 +2086,13 @@ var UIStore = /*#__PURE__*/function () {
1944
2086
  });
1945
2087
  }));
1946
2088
  });
1947
- }
1948
- if (elementInfo.active && (((_this$_utilStore$view = this._utilStore.viewHandler) === null || _this$_utilStore$view === void 0 ? void 0 : _this$_utilStore$view.tabGroupState.curTabGroup.type) == 'PLANNER' || ((_this$_utilStore$view2 = this._utilStore.viewHandler) === null || _this$_utilStore$view2 === void 0 ? void 0 : _this$_utilStore$view2.tabGroupState.curTabGroup.type) == 'OPTION')) {
2089
+ } else {
1949
2090
  var _guiElemRightBack;
1950
2091
  this._selectedMeshes = childMeshes;
1951
2092
  this._selectedMeshes.forEach(function (_m) {
1952
2093
  _m.visibility = 1;
1953
2094
  _this5._selectedHl.addMesh(_m, Color3.Black());
1954
2095
  });
1955
- this._selectedHl.addExcludedMesh(this._plane);
1956
2096
  var dtarget = this._uiConfig.templateConfig == 'standard' ? new Ellipse('deleteEllipse') : new Rectangle('deleteEllipse');
1957
2097
  guiElem.elements.push(dtarget);
1958
2098
  dtarget.width = this._uiConfig.templateConfig == 'standard' ? '40px' : '35px';
@@ -1972,6 +2112,7 @@ var UIStore = /*#__PURE__*/function () {
1972
2112
  this._gui.addControl(dtarget);
1973
2113
  dtarget.linkWithMesh((_guiElemRightBack = guiElemRightBack) !== null && _guiElemRightBack !== void 0 ? _guiElemRightBack : guiElemLeftBack);
1974
2114
  }
2115
+ this._selectedHl.addExcludedMesh(this._plane);
1975
2116
  this._guiElements.push(guiElem);
1976
2117
  }
1977
2118
  }, {
@@ -2106,6 +2247,17 @@ var UIStore = /*#__PURE__*/function () {
2106
2247
  });
2107
2248
  });
2108
2249
  }
2250
+ }, {
2251
+ key: "deactivateHighlightLayer",
2252
+ value: function deactivateHighlightLayer() {
2253
+ this._selectedHl.outerGlow = false;
2254
+ }
2255
+ }, {
2256
+ key: "activateHighlightLayer",
2257
+ value: function activateHighlightLayer() {
2258
+ if (this._isStaticBg) return; // highlightlayer should never be active when we have a background room
2259
+ this._selectedHl.outerGlow = true;
2260
+ }
2109
2261
  }, {
2110
2262
  key: "clearGui",
2111
2263
  value: function clearGui() {
@@ -2118,22 +2270,23 @@ var UIStore = /*#__PURE__*/function () {
2118
2270
  this._scene.transformNodes.forEach(function (tN) {
2119
2271
  return tN.name.startsWith('guiElem_') && tN.dispose();
2120
2272
  });
2121
- this._selectedHl.removeAllMeshes();
2122
2273
  }
2123
2274
  }, {
2124
2275
  key: "onMove",
2125
2276
  value: function onMove() {
2126
- if (!this._plane) return;
2127
- this._plane.visibility = 0;
2128
- this._enableSSAO(true);
2129
- this._utilStore.updateCam = false;
2277
+ if (!this._isUnityComb) return;
2278
+ if (this._plane.visibility != 0) {
2279
+ this._enableSSAO(true);
2280
+ this.fadeOutOverlayImage();
2281
+ }
2282
+ this._utilStore.updateCam = false; // need to always update since can move again while image is waiting to be updated
2130
2283
  }
2131
2284
  }, {
2132
2285
  key: "requestNewOverlayImage",
2133
2286
  value: function requestNewOverlayImage(viewpoint, focusedElement, targetCameraPosition) {
2134
2287
  var _this9 = this;
2135
2288
  //this._overlayImage exists only when unity combi is enabled
2136
- if (!this._plane) return;
2289
+ if (!this._isUnityComb) return;
2137
2290
  var elementId = undefined;
2138
2291
  var setId = undefined;
2139
2292
  var ob = this._scene.getTransformNodeByName(focusedElement.name);
@@ -2148,9 +2301,8 @@ var UIStore = /*#__PURE__*/function () {
2148
2301
  if (!this._latestViewpoint || this._latestViewpoint.isOutdated || Math.abs(this._latestViewpoint.pos.x - viewpoint.pos.x) > 0.05 || Math.abs(this._latestViewpoint.pos.y - viewpoint.pos.y) > 0.05 || Math.abs(this._latestViewpoint.pos.z - viewpoint.pos.z) > 0.05 || Math.abs(this._latestViewpoint.rot.x - viewpoint.rot.x) > 0.05 || Math.abs(this._latestViewpoint.rot.y - viewpoint.rot.y) > 0.05 || Math.abs(this._latestViewpoint.rot.z - viewpoint.rot.z) > 0.05) {
2149
2302
  this._timeoutId = setTimeout(function () {
2150
2303
  var _this9$_requestNewOve;
2151
- _this9._utilStore.addOutstandingImage();
2152
2304
  _this9._latestViewpoint = viewpoint;
2153
- console.log('requestNewOverlay Image');
2305
+ _this9._utilStore.addOutstandingImageCount();
2154
2306
  (_this9$_requestNewOve = _this9._requestNewOverlayImage) === null || _this9$_requestNewOve === void 0 || _this9$_requestNewOve.call(_this9, viewpoint, {
2155
2307
  adjustZoomInUnity: false,
2156
2308
  onlyAdjustZoomBBChanged: false,
@@ -2161,7 +2313,7 @@ var UIStore = /*#__PURE__*/function () {
2161
2313
  _this9._utilStore.updateCam = true;
2162
2314
  }, 200);
2163
2315
  } else {
2164
- this._plane.visibility = 1;
2316
+ this.fadeInOverlayImage(false);
2165
2317
  }
2166
2318
  }
2167
2319
  }]);
@@ -2223,7 +2375,7 @@ var UtilStore = /*#__PURE__*/function () {
2223
2375
  }, {
2224
2376
  key: "updateCam",
2225
2377
  get: function get() {
2226
- return this._updateCam && this._outstandingImageCount == 0;
2378
+ return this._updateCam;
2227
2379
  },
2228
2380
  set: function set(doUpdateCam) {
2229
2381
  this._updateCam = doUpdateCam;
@@ -2237,15 +2389,21 @@ var UtilStore = /*#__PURE__*/function () {
2237
2389
  key: "onElementDeleted",
2238
2390
  value: function onElementDeleted(setId, elementId) {
2239
2391
  var _this$viewHandler;
2240
- this.addOutstandingImage();
2392
+ this.addOutstandingImageCount();
2241
2393
  (_this$viewHandler = this.viewHandler) === null || _this$viewHandler === void 0 || _this$viewHandler.viewPlannerHandler.onElementDeleted(setId, elementId);
2242
2394
  this._updateCam = true;
2243
2395
  }
2244
2396
  }, {
2245
- key: "addOutstandingImage",
2246
- value: function addOutstandingImage() {
2397
+ key: "addOutstandingImageCount",
2398
+ value: function addOutstandingImageCount() {
2247
2399
  this._outstandingImageCount++;
2248
2400
  }
2401
+ }, {
2402
+ key: "subtractOutstandingImageCount",
2403
+ value: function subtractOutstandingImageCount() {
2404
+ if (this._outstandingImageCount == 0) return;
2405
+ this._outstandingImageCount--;
2406
+ }
2249
2407
  }, {
2250
2408
  key: "disableElementRows",
2251
2409
  value: function disableElementRows(element, cache) {
@@ -2389,7 +2547,7 @@ var unregisterContext = function unregisterContext() {
2389
2547
  var registerContext = function registerContext(scene, hqRenderScript, apiConfig, jwt, viewHandler, onMissingGeo, requestNewOverlayImage, overlayImage, uiConfig, updateCameraInformation) {
2390
2548
  var utilStore = new UtilStore(false, viewHandler);
2391
2549
  var sceneStore = new SceneStore(scene, hqRenderScript, utilStore, apiConfig, jwt, onMissingGeo, updateCameraInformation);
2392
- var uiStore = new UIStore(scene, sceneStore.enableSSAO.bind(sceneStore), utilStore, uiConfig, requestNewOverlayImage, overlayImage, viewHandler === null || viewHandler === void 0 ? void 0 : viewHandler.viewPlannerHandler.onElementCopy);
2550
+ var uiStore = new UIStore(scene, sceneStore.enableSSAO.bind(sceneStore), utilStore, uiConfig, requestNewOverlayImage, overlayImage, viewHandler === null || viewHandler === void 0 ? void 0 : viewHandler.viewPlannerHandler.onElementCopy, sceneStore.runRenderLoopForTime.bind(sceneStore));
2393
2551
  return _context = {
2394
2552
  utilStore: utilStore,
2395
2553
  sceneStore: sceneStore,
@@ -2551,13 +2709,14 @@ var customMat = /*#__PURE__*/function () {
2551
2709
  var setDataRow,
2552
2710
  sceneStore,
2553
2711
  url,
2554
- mat,
2712
+ _mat,
2555
2713
  res,
2556
2714
  parsedMat,
2557
2715
  baseTexture,
2558
2716
  mRTexture,
2559
2717
  nTexture,
2560
2718
  found,
2719
+ mat,
2561
2720
  _args = arguments;
2562
2721
  return _regeneratorRuntime.wrap(function _callee$(_context) {
2563
2722
  while (1) switch (_context.prev = _context.next) {
@@ -2579,9 +2738,9 @@ var customMat = /*#__PURE__*/function () {
2579
2738
  }
2580
2739
  });
2581
2740
  case 11:
2582
- mat = _context.sent;
2741
+ _mat = _context.sent;
2583
2742
  _context.next = 14;
2584
- return mat.json();
2743
+ return _mat.json();
2585
2744
  case 14:
2586
2745
  res = _context.sent;
2587
2746
  parsedMat = PBRMetallicRoughnessMaterial.Parse(res, _customMat.scene, '');
@@ -2602,12 +2761,14 @@ var customMat = /*#__PURE__*/function () {
2602
2761
  path: _customMat.blob,
2603
2762
  sizeMb: 0
2604
2763
  });
2764
+ parsedMat.depthFunction = Constants.ALWAYS;
2765
+ parsedMat.disableColorWrite = true;
2605
2766
  return _context.abrupt("return", {
2606
2767
  mat: parsedMat,
2607
2768
  found: true
2608
2769
  });
2609
- case 29:
2610
- _context.prev = 29;
2770
+ case 31:
2771
+ _context.prev = 31;
2611
2772
  _context.t0 = _context["catch"](8);
2612
2773
  if (setDataRow) useUtilStoreContext().setAnalyzeDataRow({
2613
2774
  type: 'MAT',
@@ -2617,16 +2778,19 @@ var customMat = /*#__PURE__*/function () {
2617
2778
  path: _customMat.blob,
2618
2779
  sizeMb: 0
2619
2780
  });
2620
- case 32:
2781
+ case 34:
2782
+ mat = new PBRMetallicRoughnessMaterial(_customMat.name, _customMat.scene);
2783
+ mat.depthFunction = Constants.ALWAYS;
2784
+ mat.disableColorWrite = true;
2621
2785
  return _context.abrupt("return", {
2622
- mat: new PBRMetallicRoughnessMaterial(_customMat.name, _customMat.scene),
2786
+ mat: mat,
2623
2787
  found: true
2624
2788
  });
2625
- case 33:
2789
+ case 38:
2626
2790
  case "end":
2627
2791
  return _context.stop();
2628
2792
  }
2629
- }, _callee, null, [[8, 29]]);
2793
+ }, _callee, null, [[8, 31]]);
2630
2794
  }));
2631
2795
  return function customMat(_x) {
2632
2796
  return _ref.apply(this, arguments);
@@ -2708,7 +2872,7 @@ function _findAssets() {
2708
2872
  }));
2709
2873
  return _importGeo.apply(this, arguments);
2710
2874
  };
2711
- importGeo = function _importGeo2(_x13, _x14) {
2875
+ importGeo = function _importGeo2(_x12, _x13) {
2712
2876
  return _importGeo.apply(this, arguments);
2713
2877
  };
2714
2878
  _unifyAndSetStdMats = function _unifyAndSetStdMats3() {
@@ -2734,7 +2898,7 @@ function _findAssets() {
2734
2898
  case 8:
2735
2899
  name = 'std_' + name;
2736
2900
  _context.next = 11;
2737
- return createOrGetMaterial(name, path, splittedName[0], true, sceneStore.scene, undefined, true, true);
2901
+ return createOrGetMaterial(name, path, splittedName[0], true, true, undefined, true);
2738
2902
  case 11:
2739
2903
  mat = _context.sent;
2740
2904
  if (!mat.found) utilStore.setAnalyzeDataRow({
@@ -2796,7 +2960,7 @@ function _findAssets() {
2796
2960
  }));
2797
2961
  return _unifyAndSetStdMats.apply(this, arguments);
2798
2962
  };
2799
- unifyAndSetStdMats = function _unifyAndSetStdMats2(_x11, _x12) {
2963
+ unifyAndSetStdMats = function _unifyAndSetStdMats2(_x10, _x11) {
2800
2964
  return _unifyAndSetStdMats.apply(this, arguments);
2801
2965
  };
2802
2966
  sceneStore = useSceneStoreContext();
@@ -2912,7 +3076,7 @@ function _findAssets() {
2912
3076
  return _context4.abrupt("return", 1);
2913
3077
  case 5:
2914
3078
  _context4.next = 7;
2915
- return createOrGetMaterial(mat.id + '_' + mat.name, mat.blob, mat.name, true, sceneStore.scene, {
3079
+ return createOrGetMaterial(mat.id + '_' + mat.name, mat.blob, mat.name, true, false, {
2916
3080
  tileU: mat.tileU,
2917
3081
  tileV: mat.tileV
2918
3082
  }, true);
@@ -2921,7 +3085,8 @@ function _findAssets() {
2921
3085
  _context4.t1 = [];
2922
3086
  _context4.t2 = mat.name;
2923
3087
  nwCache.material = {
2924
- material: _context4.t0,
3088
+ mat: _context4.t0,
3089
+ isStdMat: false,
2925
3090
  onElements: _context4.t1,
2926
3091
  name: _context4.t2
2927
3092
  };
@@ -2931,7 +3096,7 @@ function _findAssets() {
2931
3096
  _context4.t3 = newCache;
2932
3097
  _context4.t4 = mat.id;
2933
3098
  _context4.next = 17;
2934
- return createOrGetMaterial(mat.id + '_' + mat.name, mat.blob, mat.name, true, sceneStore.scene, {
3099
+ return createOrGetMaterial(mat.id + '_' + mat.name, mat.blob, mat.name, true, false, {
2935
3100
  tileU: mat.tileU,
2936
3101
  tileV: mat.tileV
2937
3102
  }, true);
@@ -2940,9 +3105,10 @@ function _findAssets() {
2940
3105
  _context4.t6 = [];
2941
3106
  _context4.t7 = mat.name;
2942
3107
  _context4.t8 = {
2943
- material: _context4.t5,
3108
+ mat: _context4.t5,
2944
3109
  onElements: _context4.t6,
2945
- name: _context4.t7
3110
+ name: _context4.t7,
3111
+ isStdMat: false
2946
3112
  };
2947
3113
  _context4.t9 = {
2948
3114
  id: _context4.t4,
@@ -2995,72 +3161,79 @@ function _findAssets() {
2995
3161
  }));
2996
3162
  return _findAssets.apply(this, arguments);
2997
3163
  }
2998
- function createOrGetMaterial(_x3, _x4, _x5, _x6, _x7, _x8, _x9, _x10) {
3164
+ function createOrGetMaterial(_x3, _x4, _x5, _x6, _x7, _x8, _x9) {
2999
3165
  return _createOrGetMaterial.apply(this, arguments);
3000
3166
  }
3001
3167
  function _createOrGetMaterial() {
3002
- _createOrGetMaterial = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee4(name, blob, fileName, checkExisting, scene, tiling, setDataRow, isStdMat) {
3003
- var _iterator5, _step5, _mat, mat, material;
3168
+ _createOrGetMaterial = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee4(name, blob, fileName, checkExisting, isStdMat, tiling, setDataRow) {
3169
+ var sceneStore, _iterator5, _step5, cachedMaterial, mat, material;
3004
3170
  return _regeneratorRuntime.wrap(function _callee4$(_context6) {
3005
3171
  while (1) switch (_context6.prev = _context6.next) {
3006
3172
  case 0:
3173
+ sceneStore = useSceneStoreContext();
3007
3174
  if (!checkExisting) {
3008
- _context6.next = 18;
3175
+ _context6.next = 20;
3009
3176
  break;
3010
3177
  }
3011
- _iterator5 = _createForOfIteratorHelper$3(scene.materials);
3012
- _context6.prev = 2;
3178
+ _iterator5 = _createForOfIteratorHelper$3(sceneStore.materialCache);
3179
+ _context6.prev = 3;
3013
3180
  _iterator5.s();
3014
- case 4:
3181
+ case 5:
3015
3182
  if ((_step5 = _iterator5.n()).done) {
3016
- _context6.next = 10;
3183
+ _context6.next = 12;
3017
3184
  break;
3018
3185
  }
3019
- _mat = _step5.value;
3020
- if (!(name === _mat.name)) {
3021
- _context6.next = 8;
3186
+ cachedMaterial = _step5.value;
3187
+ if (!(name === cachedMaterial.mat.name)) {
3188
+ _context6.next = 10;
3022
3189
  break;
3023
3190
  }
3191
+ cachedMaterial.lastUsage = sceneStore.modelIteration;
3024
3192
  return _context6.abrupt("return", {
3025
- mat: _mat,
3193
+ mat: cachedMaterial.mat,
3026
3194
  found: true
3027
3195
  });
3028
- case 8:
3029
- _context6.next = 4;
3030
- break;
3031
3196
  case 10:
3032
- _context6.next = 15;
3197
+ _context6.next = 5;
3033
3198
  break;
3034
3199
  case 12:
3035
- _context6.prev = 12;
3036
- _context6.t0 = _context6["catch"](2);
3200
+ _context6.next = 17;
3201
+ break;
3202
+ case 14:
3203
+ _context6.prev = 14;
3204
+ _context6.t0 = _context6["catch"](3);
3037
3205
  _iterator5.e(_context6.t0);
3038
- case 15:
3039
- _context6.prev = 15;
3206
+ case 17:
3207
+ _context6.prev = 17;
3040
3208
  _iterator5.f();
3041
- return _context6.finish(15);
3042
- case 18:
3209
+ return _context6.finish(17);
3210
+ case 20:
3043
3211
  mat = {
3044
3212
  isStdMat: !!isStdMat,
3045
3213
  blob: blob,
3046
3214
  name: name,
3047
3215
  fileName: fileName,
3048
- scene: scene,
3216
+ scene: sceneStore.scene,
3049
3217
  tiling: tiling
3050
3218
  };
3051
- _context6.next = 21;
3219
+ _context6.next = 23;
3052
3220
  return customMat(mat, setDataRow);
3053
- case 21:
3221
+ case 23:
3054
3222
  material = _context6.sent;
3223
+ sceneStore.addMaterialToCache({
3224
+ mat: material.mat,
3225
+ isStdMat: isStdMat,
3226
+ lastUsage: sceneStore.modelIteration
3227
+ });
3055
3228
  return _context6.abrupt("return", {
3056
3229
  mat: material.mat,
3057
3230
  found: material.found
3058
3231
  });
3059
- case 23:
3232
+ case 26:
3060
3233
  case "end":
3061
3234
  return _context6.stop();
3062
3235
  }
3063
- }, _callee4, null, [[2, 12, 15, 18]]);
3236
+ }, _callee4, null, [[3, 14, 17, 20]]);
3064
3237
  }));
3065
3238
  return _createOrGetMaterial.apply(this, arguments);
3066
3239
  }
@@ -3260,7 +3433,7 @@ function findMaterials(cache) {
3260
3433
  for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
3261
3434
  var onNode = _step3.value;
3262
3435
  if (child.name.startsWith(onNode) || child.name.startsWith('geo_') && child.name.includes(onNode)) {
3263
- setMaterials(child, mat.material);
3436
+ setMaterials(child, mat.mat);
3264
3437
  }
3265
3438
  }
3266
3439
  } catch (err) {
@@ -3332,7 +3505,7 @@ function shadow() {
3332
3505
  var lightf = new DirectionalLight('dirf', new Vector3(0, -0.436, -0.9), scene);
3333
3506
  var lightr = new DirectionalLight('dirr', new Vector3(0, -1, 0.3), scene);
3334
3507
  var lightl = new DirectionalLight('dirb', new Vector3(0.2, -1, 0.2), scene);
3335
- lightl.intensity = 1;
3508
+ lightl.intensity = 2;
3336
3509
  lightf.intensity = 2.2;
3337
3510
  light.intensity = 1;
3338
3511
  lightr.intensity = 1;
@@ -3352,6 +3525,8 @@ function shadow() {
3352
3525
  z: 0
3353
3526
  });
3354
3527
  var std_mat = new PBRMetallicRoughnessMaterial('std_mat', scene);
3528
+ std_mat.depthFunction = Constants.ALWAYS;
3529
+ std_mat.disableColorWrite = true;
3355
3530
  std_mat.metallic = 0;
3356
3531
  scene.defaultMaterial = std_mat;
3357
3532
  var mat = new PBRMetallicRoughnessMaterial('white', scene);
@@ -3375,17 +3550,17 @@ var parser = /*#__PURE__*/function () {
3375
3550
  case 0:
3376
3551
  sceneStore = useSceneStoreContext();
3377
3552
  hasRendered = sceneStore.hasRendered, hqRenderScript = sceneStore.hqRenderScript, scene = sceneStore.scene, cache = sceneStore.cache, changedElements = sceneStore.changedElements;
3378
- utilStore = useUtilStoreContext();
3379
- useUIStoreContext(); //disable elementrows from old cache
3553
+ utilStore = useUtilStoreContext(); //disable elementrows from old cache
3380
3554
  changedElements === null || changedElements === void 0 || (_changedElements$upda = changedElements.updatedElements) === null || _changedElements$upda === void 0 || _changedElements$upda.forEach(function (el) {
3381
3555
  return utilStore.disableElementRows(el.name, cache);
3382
3556
  });
3383
- _context.next = 7;
3557
+ _context.next = 6;
3384
3558
  return findAssets(hqRenderScript.assets, cache);
3385
- case 7:
3559
+ case 6:
3386
3560
  _yield$findAssets = _context.sent;
3387
3561
  cacheGroup = _yield$findAssets.cacheGroup;
3388
3562
  newCache = _yield$findAssets.newCache;
3563
+ sceneStore.updateModelIteration();
3389
3564
  if (changedElements && changedElements.deletedElements && changedElements.deletedElements.length > 0) {
3390
3565
  changedElements.deletedElements.forEach(function (deletedElement) {
3391
3566
  var _scene$getTransformNo;
@@ -3419,7 +3594,8 @@ var parser = /*#__PURE__*/function () {
3419
3594
  }
3420
3595
  utilStore.setRTVAnalyzeData();
3421
3596
  deacCache(cacheGroup);
3422
- case 14:
3597
+ sceneStore.checkMaterialCache();
3598
+ case 15:
3423
3599
  case "end":
3424
3600
  return _context.stop();
3425
3601
  }
@@ -3432,7 +3608,7 @@ var parser = /*#__PURE__*/function () {
3432
3608
 
3433
3609
  var LOG = getLogger('ARViewer', 'RealTimeRenderData');
3434
3610
  function useRealTimeRenderData (_ref) {
3435
- var _sceneStore3;
3611
+ var _sceneStore2;
3436
3612
  var jwt = _ref.jwt,
3437
3613
  actions = _ref.actions,
3438
3614
  apiConfig = _ref.apiConfig,
@@ -3450,7 +3626,7 @@ function useRealTimeRenderData (_ref) {
3450
3626
  renderInBackground = _ref.renderInBackground;
3451
3627
  var gameCanvas = useRef(null);
3452
3628
  var sceneStore = useSceneStoreContext();
3453
- var utilStore = useUtilStoreContext();
3629
+ useUtilStoreContext();
3454
3630
  var gridStore = useGridStoreContext();
3455
3631
  var uiStore = useUIStoreContext();
3456
3632
  DracoCompression.Configuration = {
@@ -3514,15 +3690,16 @@ function useRealTimeRenderData (_ref) {
3514
3690
  eventId: 'BUILD_SCENE'
3515
3691
  });
3516
3692
  _context2.prev = 15;
3517
- _context2.next = 18;
3693
+ uiStore.deactivateHighlightLayer();
3694
+ _context2.next = 19;
3518
3695
  return parser();
3519
- case 18:
3696
+ case 19:
3520
3697
  uiStore.initGui(callbacks.onElementSelected, sceneStore.elements);
3521
3698
  if (freePlacesOnGrids || plannedPlacesOnGrids) gridStore.getGrids(freePlacesOnGrids, plannedPlacesOnGrids);
3522
- _context2.next = 27;
3699
+ _context2.next = 28;
3523
3700
  break;
3524
- case 22:
3525
- _context2.prev = 22;
3701
+ case 23:
3702
+ _context2.prev = 23;
3526
3703
  _context2.t0 = _context2["catch"](15);
3527
3704
  LOG.errorTransaction('BUILD_SCENE', 'RTS_0001', _context2.t0.message);
3528
3705
  LOG.error(new DivaError('Error building scene', {
@@ -3530,26 +3707,26 @@ function useRealTimeRenderData (_ref) {
3530
3707
  code: 'RTS_0001'
3531
3708
  }));
3532
3709
  sceneStore.isInitializing = false;
3533
- case 27:
3710
+ case 28:
3534
3711
  if (callbacks.setGlb) {
3535
3712
  sceneStore.exportScene().then(function (res) {
3536
3713
  var _callbacks$setGlb;
3537
- if (res) (_callbacks$setGlb = callbacks.setGlb) === null || _callbacks$setGlb === void 0 || _callbacks$setGlb.call(callbacks, URL.createObjectURL(res.glTFFiles['fileName.glb']));
3714
+ if (res) (_callbacks$setGlb = callbacks.setGlb) === null || _callbacks$setGlb === void 0 || _callbacks$setGlb.call(callbacks, URL.createObjectURL(res.glTFFiles['fileName.glb']), res.glTFFiles['fileName.glb']);
3538
3715
  });
3539
3716
  } else {
3540
3717
  LOG.debug('callbacks.setGlb is undefined');
3541
3718
  }
3542
3719
  if (!sceneStore.hasRendered) {
3543
- sceneStore.scene.getEngine().runRenderLoop(renderLoop);
3720
+ sceneStore.runRenderLoopIndefinitely();
3544
3721
  sceneStore.hasRendered = true;
3545
3722
  }
3546
3723
  sceneStore.scene.onAfterRenderObservable.add(onFirstFrame);
3547
3724
  LOG.successTransaction('BUILD_SCENE');
3548
- case 31:
3725
+ case 32:
3549
3726
  case "end":
3550
3727
  return _context2.stop();
3551
3728
  }
3552
- }, _callee2, null, [[15, 22]]);
3729
+ }, _callee2, null, [[15, 23]]);
3553
3730
  }));
3554
3731
  return _onSceneReady.apply(this, arguments);
3555
3732
  }
@@ -3560,12 +3737,9 @@ function useRealTimeRenderData (_ref) {
3560
3737
  if (!overlayImage) actions.toggleLoading('buildScene', false, false);
3561
3738
  (_callbacks$onInitiali2 = callbacks.onInitialized) === null || _callbacks$onInitiali2 === void 0 || _callbacks$onInitiali2.call(callbacks);
3562
3739
  (_sceneStore = sceneStore) === null || _sceneStore === void 0 || _sceneStore.optimizeScene();
3563
- }
3564
- function renderLoop() {
3565
- var _sceneStore$controlRe, _sceneStore2;
3566
- if (!gameCanvas.current) sceneStore.scene.getEngine().dispose();
3567
- (_sceneStore$controlRe = (_sceneStore2 = sceneStore).controlRenderLoop) === null || _sceneStore$controlRe === void 0 || _sceneStore$controlRe.call(_sceneStore2);
3568
- sceneStore.scene.render();
3740
+ setTimeout(function () {
3741
+ return uiStore.activateHighlightLayer();
3742
+ }, 500);
3569
3743
  }
3570
3744
 
3571
3745
  // trigger if gamecanvas did not update but renderjob
@@ -3590,45 +3764,46 @@ function useRealTimeRenderData (_ref) {
3590
3764
  while (1) switch (_context.prev = _context.next) {
3591
3765
  case 0:
3592
3766
  if (!gameCanvas.current) {
3593
- _context.next = 20;
3767
+ _context.next = 23;
3594
3768
  break;
3595
3769
  }
3596
- engine = new Engine(gameCanvas.current, true, {
3770
+ _context.next = 3;
3771
+ return EngineFactory.CreateAsync(gameCanvas.current, {
3597
3772
  antialias: true,
3598
3773
  stencil: true,
3599
3774
  audioEngine: false
3600
- }, true);
3775
+ });
3776
+ case 3:
3777
+ engine = _context.sent;
3601
3778
  engine.renderEvenInBackground = renderInBackground;
3602
3779
  engine.disablePerformanceMonitorInBackground = true;
3603
3780
  bScene = new Scene(engine, undefined);
3781
+ bScene.clearColor = new Color4$1(255, 255, 255, 255);
3604
3782
  context = registerContext(bScene, renderjob, apiConfig, jwt, viewHandler, callbacks.onMissingGeo, callbacks.requestNewOverlayImage, overlayImage, uiConfig, callbacks.updateCameraInformation);
3605
3783
  sceneStore = context.sceneStore;
3606
- utilStore = context.utilStore;
3784
+ context.utilStore;
3607
3785
  gridStore = context.gridStore;
3608
3786
  uiStore = context.uiStore;
3609
3787
  scene = bScene;
3610
3788
  if (!bScene.isReady()) {
3611
- _context.next = 16;
3789
+ _context.next = 19;
3612
3790
  break;
3613
3791
  }
3614
- _context.next = 14;
3615
- return onSceneReady();
3616
- case 14:
3617
3792
  _context.next = 17;
3793
+ return onSceneReady();
3794
+ case 17:
3795
+ _context.next = 20;
3618
3796
  break;
3619
- case 16:
3797
+ case 19:
3620
3798
  bScene.executeWhenReady(function () {
3621
3799
  return onSceneReady();
3622
3800
  });
3623
- case 17:
3801
+ case 20:
3624
3802
  resize = function resize() {
3625
3803
  if (inBackground || !scene || !scene.getEngine()) return;
3626
3804
  if (sceneStore.hasPlanned) sceneStore.doRenderControlLoop = true;
3627
- scene.getEngine().resize();
3628
- if (uiStore) {
3629
- uiStore.resize(scene);
3630
- uiStore.initGui(callbacks.onElementSelected, sceneStore.elements);
3631
- }
3805
+ scene.getEngine().resize(true);
3806
+ if (uiStore) uiStore.resize(scene);
3632
3807
  };
3633
3808
  if (window) {
3634
3809
  window.addEventListener('resize', resize);
@@ -3640,9 +3815,9 @@ function useRealTimeRenderData (_ref) {
3640
3815
  window.removeEventListener('resize', resize);
3641
3816
  }
3642
3817
  });
3643
- case 20:
3818
+ case 23:
3644
3819
  return _context.abrupt("return");
3645
- case 21:
3820
+ case 24:
3646
3821
  case "end":
3647
3822
  return _context.stop();
3648
3823
  }
@@ -3654,14 +3829,11 @@ function useRealTimeRenderData (_ref) {
3654
3829
  asyncUseEffect();
3655
3830
  }, []);
3656
3831
  useEffect(function () {
3657
- if (overlayImage && uiStore) uiStore.updateOverlayImage(overlayImage);
3658
- // update cam pos for start viewpoints (hqr) could be the same, since it doesn't change when rotating
3659
- }, [overlayImage]);
3660
- useEffect(function () {
3661
- if (utilStore && viewpoint) {
3662
- updateCam(viewpoint, sceneStore.scene);
3832
+ if (overlayImage && uiStore) {
3833
+ uiStore.updateOverlayImage(overlayImage);
3834
+ if (viewpoint) updateCam(viewpoint, sceneStore.scene);
3663
3835
  }
3664
- }, [viewpoint]);
3836
+ }, [overlayImage]);
3665
3837
  useEffect(function () {
3666
3838
  if (sceneStore && elementsInfo) {
3667
3839
  var activeElement = elementsInfo.find(function (e) {
@@ -3671,13 +3843,13 @@ function useRealTimeRenderData (_ref) {
3671
3843
  uiStore.addElementsInfo(elementsInfo);
3672
3844
  uiStore.initGui(callbacks.onElementSelected, sceneStore.elements);
3673
3845
  }
3674
- }, [elementsInfo, (_sceneStore3 = sceneStore) === null || _sceneStore3 === void 0 ? void 0 : _sceneStore3.elements]);
3846
+ }, [elementsInfo, (_sceneStore2 = sceneStore) === null || _sceneStore2 === void 0 ? void 0 : _sceneStore2.elements]);
3675
3847
  useEffect(function () {
3676
3848
  if (!sceneStore) return;
3677
3849
  if (inBackground) {
3678
- sceneStore.scene.getEngine().stopRenderLoop();
3850
+ sceneStore.stopRenderLoop();
3679
3851
  } else if (sceneStore.hasRendered) {
3680
- sceneStore.scene.getEngine().runRenderLoop(renderLoop);
3852
+ sceneStore.runRenderLoopIndefinitely();
3681
3853
  }
3682
3854
  }, [inBackground]);
3683
3855
  return {
@@ -3735,7 +3907,8 @@ var RealTimeRenderer = /*#__PURE__*/memo(function (props) {
3735
3907
  height: '100%',
3736
3908
  width: '100%',
3737
3909
  margin: 'auto',
3738
- display: 'block'
3910
+ display: 'block',
3911
+ backgroundColor: 'white'
3739
3912
  },
3740
3913
  className: canvas
3741
3914
  })