helper.ts 55 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168
  1. import { AbstractViewer, DefaultViewer, ViewerModel, viewerGlobals, AnimationPlayMode, AnimationState } from "../../src";
  2. import { ViewerConfiguration } from "../../src/configuration/configuration";
  3. import { IModelAnimation } from "../../src/model/modelAnimation";
  4. export class Helper {
  5. public static createViewer(options?: ViewerConfiguration): AbstractViewer {
  6. if (Helper.viewer != null) {
  7. throw "The global instance of viewer should not be created more than once";
  8. }
  9. Helper.viewer = new DefaultViewer(Helper.getViewerContainer(), options);
  10. Helper.viewer.renderInBackground = true;
  11. return Helper.viewer;
  12. }
  13. public static disposeViewer() {
  14. if (Helper.viewer != null) {
  15. Helper.viewer.dispose();
  16. delete Helper.viewer;
  17. }
  18. }
  19. public static getViewerContainer() {
  20. return document.getElementById("renderCanvas") as HTMLElement;
  21. }
  22. public static getReferenceCanvas() {
  23. return document.getElementById("referenceCanvas") as HTMLCanvasElement;
  24. }
  25. public static getRenderImg() {
  26. var nodes = document.querySelectorAll(".renderImg");
  27. return nodes[nodes.length - 1] as HTMLImageElement;
  28. }
  29. public static getReferenceImg() {
  30. var nodes = document.querySelectorAll(".referenceImg");
  31. return nodes[nodes.length - 1] as HTMLImageElement;
  32. }
  33. public static getResultDisplay() {
  34. var nodes = document.querySelectorAll(".resultDisplay");
  35. return nodes[nodes.length - 1] as HTMLDivElement;
  36. }
  37. public static createMockMesh(viewer: AbstractViewer) {
  38. let scene = viewer.scene;
  39. let mat = new BABYLON.PBRMaterial('mock-material', scene);
  40. let mesh = BABYLON.MeshBuilder.CreateBox('mock-box', {
  41. width: 1, height: 1, depth: 1,
  42. updatable: false
  43. }, scene);
  44. mesh.material = mat;
  45. return mesh;
  46. }
  47. public static MockScreenCapture(viewer: AbstractViewer, data) {
  48. BABYLON.Tools.CreateScreenshot = function (viewer, camera, size, successCallback) {
  49. successCallback && successCallback(data || '');
  50. }
  51. }
  52. public static MockModelAnimation(model: ViewerModel, name: string) {
  53. model.getAnimations().push(new ModelAnimationMock(name));
  54. }
  55. public static mockScreenCaptureData() {
  56. return "data:image/png;base64,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";
  57. }
  58. public static roundToDp(value: number, dp: number) {
  59. let multiplier = Math.pow(10, dp);
  60. return (Math.round(value * multiplier) / multiplier);
  61. }
  62. public static GetPBRMaterial(material: BABYLON.Material, assert): BABYLON.PBRMaterial {
  63. assert.ok(material instanceof BABYLON.PBRMaterial, "Model material is not a BABYLON.PBRMaterial");
  64. return material as BABYLON.PBRMaterial;
  65. }
  66. private static viewer: AbstractViewer;
  67. }
  68. export class NullEngineDefaultViewer extends DefaultViewer {
  69. protected _initEngine() {
  70. let config: any = this._configuration.engine || {};
  71. // TDO enable further configuration
  72. config.engineOptions = config.engineOptions || {};
  73. // check for webgl2 support, force-disable if needed.
  74. if (viewerGlobals.disableWebGL2Support) {
  75. config.engineOptions.disableWebGL2Support = true;
  76. }
  77. config.engineOptions.renderWidth = 500;
  78. this.engine = new BABYLON.NullEngine(config.engineOptions);
  79. // Disable manifest checking
  80. BABYLON.Database.IDBStorageEnabled = false;
  81. if (!config.disableResize) {
  82. window.addEventListener('resize', this._resize);
  83. }
  84. this.engine.runRenderLoop(this._render);
  85. if (this._configuration.engine && this._configuration.engine.adaptiveQuality) {
  86. var scale = Math.max(0.5, 1 / (window.devicePixelRatio || 2));
  87. this.engine.setHardwareScalingLevel(scale);
  88. }
  89. // set hardware limitations for scene initialization
  90. this._handleHardwareLimitations();
  91. return Promise.resolve(this.engine);
  92. }
  93. }
  94. /**
  95. * A mock implementation of the babylon viewer's animation interface
  96. * Used to test the Movel itself.
  97. * @class ModelAnimationMock
  98. * @implements {BabylonViewer.IModelAnimation}
  99. */
  100. class ModelAnimationMock implements IModelAnimation {
  101. public state = 0;
  102. public currentFrame = 0;
  103. public fps = 60;
  104. public frames = 100;
  105. public speedRatio = 1;
  106. public playMode = AnimationPlayMode.ONCE;
  107. constructor(public name: string) {
  108. this.state = AnimationState.INIT
  109. }
  110. public reset() {
  111. this.currentFrame = 0;
  112. this.state = AnimationState.STOPPED
  113. }
  114. public restart() {
  115. this.goToFrame(0);
  116. }
  117. public start() {
  118. this.state = AnimationState.PLAYING
  119. }
  120. public stop() {
  121. this.state = AnimationState.STOPPED
  122. }
  123. public dispose() {
  124. }
  125. public goToFrame(frame: number) {
  126. this.currentFrame = frame;
  127. }
  128. public pause() {
  129. this.state = AnimationState.PAUSED
  130. }
  131. }