updateConfiguration.ts 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293
  1. import { Helper } from "../../../commons/helper";
  2. import { assert, expect, should } from "../viewerReference";
  3. import { SceneOptimizer, SceneOptimizerOptions } from "babylonjs";
  4. export let name = "configuration update";
  5. describe(name + " scene", () => {
  6. it("should be used as a template for the following tests", (done) => {
  7. let viewer = Helper.getNewViewerInstance(undefined, { extends: "none" });
  8. viewer.onInitDoneObservable.add(() => {
  9. viewer.dispose();
  10. done();
  11. });
  12. });
  13. it("should update the image processing configuration values", (done) => {
  14. let viewer = Helper.getNewViewerInstance(undefined, { extends: "none" });
  15. viewer.onInitDoneObservable.add(() => {
  16. // check babylon defaults
  17. assert.isFalse(viewer.sceneManager.scene.imageProcessingConfiguration.applyByPostProcess);
  18. assert.equal(viewer.sceneManager.scene.imageProcessingConfiguration.exposure, 1);
  19. assert.equal(viewer.sceneManager.scene.imageProcessingConfiguration.contrast, 1);
  20. assert.isFalse(viewer.sceneManager.scene.imageProcessingConfiguration.colorGradingEnabled);
  21. if (viewer.sceneManager.scene.imageProcessingConfiguration.colorCurves) {
  22. assert.equal(viewer.sceneManager.scene.imageProcessingConfiguration.colorCurves.globalDensity, 0);
  23. assert.equal(viewer.sceneManager.scene.imageProcessingConfiguration.colorCurves.globalHue, 30);
  24. assert.equal(viewer.sceneManager.scene.imageProcessingConfiguration.colorCurves.globalSaturation, 0);
  25. } else {
  26. assert.fail(viewer.sceneManager.scene.imageProcessingConfiguration.colorCurves, {}, "color curves was not initialized");
  27. }
  28. // update with fixed values
  29. viewer.updateConfiguration({
  30. scene: {
  31. imageProcessingConfiguration: {
  32. applyByPostProcess: true,
  33. exposure: 0,
  34. contrast: 0,
  35. colorGradingEnabled: true,
  36. colorCurves: {
  37. globalDensity: 1,
  38. globalHue: 0.2,
  39. globalSaturation: 0.5
  40. }
  41. }
  42. }
  43. });
  44. assert.isTrue(viewer.sceneManager.scene.imageProcessingConfiguration.applyByPostProcess, "apply by post process should be true");
  45. assert.equal(viewer.sceneManager.scene.imageProcessingConfiguration.exposure, 0);
  46. assert.equal(viewer.sceneManager.scene.imageProcessingConfiguration.contrast, 0);
  47. assert.isTrue(viewer.sceneManager.scene.imageProcessingConfiguration.colorGradingEnabled);
  48. if (viewer.sceneManager.scene.imageProcessingConfiguration.colorCurves) {
  49. assert.equal(viewer.sceneManager.scene.imageProcessingConfiguration.colorCurves.globalDensity, 1);
  50. assert.equal(viewer.sceneManager.scene.imageProcessingConfiguration.colorCurves.globalHue, 0.2);
  51. assert.equal(viewer.sceneManager.scene.imageProcessingConfiguration.colorCurves.globalSaturation, 0.5);
  52. } else {
  53. assert.fail(viewer.sceneManager.scene.imageProcessingConfiguration.colorCurves, {}, "color curves was not initialized");
  54. }
  55. let randoms = [0, 1, 2, 3, 4].map((n) => Math.random());
  56. viewer.updateConfiguration({
  57. scene: {
  58. imageProcessingConfiguration: {
  59. exposure: randoms[0],
  60. contrast: randoms[1],
  61. colorCurves: {
  62. highlightsDensity: randoms[2],
  63. highlightsHue: randoms[3],
  64. highlightsSaturation: randoms[4]
  65. }
  66. }
  67. }
  68. });
  69. assert.isTrue(viewer.sceneManager.scene.imageProcessingConfiguration.applyByPostProcess, "apply by post process should be true");
  70. assert.equal(viewer.sceneManager.scene.imageProcessingConfiguration.exposure, randoms[0]);
  71. assert.equal(viewer.sceneManager.scene.imageProcessingConfiguration.contrast, randoms[1]);
  72. assert.isTrue(viewer.sceneManager.scene.imageProcessingConfiguration.colorGradingEnabled);
  73. if (viewer.sceneManager.scene.imageProcessingConfiguration.colorCurves) {
  74. assert.equal(viewer.sceneManager.scene.imageProcessingConfiguration.colorCurves.highlightsDensity, randoms[2]);
  75. assert.equal(viewer.sceneManager.scene.imageProcessingConfiguration.colorCurves.highlightsHue, randoms[3]);
  76. assert.equal(viewer.sceneManager.scene.imageProcessingConfiguration.colorCurves.highlightsSaturation, randoms[4]);
  77. } else {
  78. assert.fail(viewer.sceneManager.scene.imageProcessingConfiguration.colorCurves, {}, "color curves was not initialized");
  79. }
  80. viewer.dispose();
  81. done();
  82. });
  83. });
  84. it("should update main color and reflection color", (done) => {
  85. let viewer = Helper.getNewViewerInstance(undefined, { extends: "none" });
  86. viewer.onInitDoneObservable.add(() => {
  87. assert.equal(viewer.sceneManager.mainColor.r, 1);
  88. assert.equal(viewer.sceneManager.mainColor.g, 1);
  89. assert.equal(viewer.sceneManager.mainColor.b, 1);
  90. assert.equal(viewer.sceneManager.reflectionColor.r, 1);
  91. assert.equal(viewer.sceneManager.reflectionColor.g, 1);
  92. assert.equal(viewer.sceneManager.reflectionColor.b, 1);
  93. viewer.updateConfiguration({
  94. environmentMap: {
  95. tintLevel: 1,
  96. texture: "",
  97. rotationY: 0,
  98. mainColor: {
  99. r: 0.5,
  100. g: 0.5,
  101. b: 0.5
  102. }
  103. }
  104. });
  105. assert.equal(viewer.sceneManager.mainColor.r, 0.5);
  106. assert.equal(viewer.sceneManager.mainColor.g, 0.5);
  107. assert.equal(viewer.sceneManager.mainColor.b, 0.5);
  108. // to black
  109. viewer.updateConfiguration({
  110. scene: {
  111. mainColor: {
  112. r: 0,
  113. g: 0,
  114. b: 0
  115. }
  116. }
  117. });
  118. assert.equal(viewer.sceneManager.mainColor.r, 0);
  119. assert.equal(viewer.sceneManager.mainColor.g, 0);
  120. assert.equal(viewer.sceneManager.mainColor.b, 0);
  121. assert.equal(viewer.sceneManager.reflectionColor.r, 0);
  122. assert.equal(viewer.sceneManager.reflectionColor.g, 0);
  123. assert.equal(viewer.sceneManager.reflectionColor.b, 0);
  124. let randomColor = Math.random();
  125. //only update red
  126. viewer.updateConfiguration({
  127. scene: {
  128. mainColor: {
  129. r: randomColor
  130. }
  131. }
  132. });
  133. assert.equal(viewer.sceneManager.mainColor.r, randomColor);
  134. assert.equal(viewer.sceneManager.mainColor.g, 0);
  135. assert.equal(viewer.sceneManager.mainColor.b, 0);
  136. viewer.dispose();
  137. done();
  138. });
  139. });
  140. it("should update the flags correctly", (done) => {
  141. let viewer = Helper.getNewViewerInstance(undefined, { extends: "none" });
  142. viewer.onInitDoneObservable.add(() => {
  143. viewer.updateConfiguration({
  144. scene: {
  145. flags: {
  146. audioEnabled: false
  147. }
  148. }
  149. });
  150. assert.isFalse(viewer.sceneManager.scene.audioEnabled);
  151. viewer.updateConfiguration({
  152. scene: {
  153. flags: {
  154. audioEnabled: true,
  155. lightsEnabled: false
  156. }
  157. }
  158. });
  159. assert.isTrue(viewer.sceneManager.scene.audioEnabled);
  160. assert.isFalse(viewer.sceneManager.scene.lightsEnabled);
  161. viewer.updateConfiguration({
  162. scene: {
  163. flags: {
  164. lightsEnabled: true,
  165. shadowsEnabled: false
  166. }
  167. }
  168. });
  169. assert.isTrue(viewer.sceneManager.scene.audioEnabled);
  170. assert.isTrue(viewer.sceneManager.scene.lightsEnabled);
  171. assert.isFalse(viewer.sceneManager.scene.shadowsEnabled);
  172. viewer.dispose();
  173. done();
  174. });
  175. });
  176. });
  177. describe(name + " scene optimizer", () => {
  178. it("should be enabled and disabled with booleans", (done) => {
  179. let viewer = Helper.getNewViewerInstance(undefined, { extends: "none" });
  180. let started = false;
  181. let optimizerFunction = SceneOptimizer;
  182. //mock!
  183. SceneOptimizer.prototype.start = function() {
  184. started = true;
  185. };
  186. SceneOptimizer.prototype.stop = function() {
  187. started = false;
  188. };
  189. SceneOptimizer.prototype.dispose = function() {
  190. };
  191. viewer.onInitDoneObservable.add(() => {
  192. assert.isUndefined(viewer.sceneManager.sceneOptimizer);
  193. viewer.updateConfiguration({
  194. optimizer: true
  195. });
  196. assert.isDefined(viewer.sceneManager.sceneOptimizer);
  197. assert.isTrue(started);
  198. viewer.updateConfiguration({
  199. optimizer: false
  200. });
  201. assert.isUndefined(viewer.sceneManager.sceneOptimizer);
  202. assert.isFalse(started);
  203. //SceneOptimizer = optimizerFunction;
  204. viewer.dispose();
  205. done();
  206. });
  207. });
  208. });
  209. describe(name + " camera", () => {
  210. it("should enable and disable camera behaviors", (done) => {
  211. let viewer = Helper.getNewViewerInstance(undefined, { extends: "none" });
  212. viewer.onInitDoneObservable.add(() => {
  213. assert.isFalse(viewer.sceneManager.camera.useAutoRotationBehavior);
  214. viewer.updateConfiguration({
  215. camera: {
  216. behaviors: {
  217. autoRotate: {
  218. type: 0
  219. }
  220. }
  221. }
  222. });
  223. assert.isTrue(viewer.sceneManager.camera.useAutoRotationBehavior);
  224. viewer.updateConfiguration({
  225. camera: {
  226. behaviors: {
  227. autoRotate: false
  228. }
  229. }
  230. });
  231. assert.isFalse(viewer.sceneManager.camera.useAutoRotationBehavior);
  232. viewer.dispose();
  233. done();
  234. });
  235. });
  236. });