@cognite/reveal 4.0.0-dev.20221025 → 4.0.0-dev.20221028
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/{4ecf80bd209836dc884c.worker.js.LICENSE.txt → 380a1c9fdc386e1da232.worker.js.LICENSE.txt} +0 -0
- package/README.md +6 -0
- package/extensions/datasource.js +1 -1
- package/extensions/datasource.js.map +1 -0
- package/index.js +2 -2
- package/index.js.map +1 -0
- package/package.json +1 -1
- package/tools.js +2 -2
- package/tools.js.map +1 -0
- package/eptBinaryDecoder.worker.map +0 -1
- package/extensions/datasource.map +0 -1
- package/index.map +0 -1
- package/tools.map +0 -1
package/{4ecf80bd209836dc884c.worker.js.LICENSE.txt → 380a1c9fdc386e1da232.worker.js.LICENSE.txt}
RENAMED
|
File without changes
|
package/README.md
CHANGED
|
@@ -153,6 +153,12 @@ Add the following script to your package's `package.json`:
|
|
|
153
153
|
Running the command `yarn start` will host a localhost site with a template HTML that includes the `/app/index.ts` script that has been transpiled to javascript.
|
|
154
154
|
To see an example of this check out the `packages/camera-manager` package.
|
|
155
155
|
|
|
156
|
+
## Debugging
|
|
157
|
+
|
|
158
|
+
### Worker source maps
|
|
159
|
+
|
|
160
|
+
When bundling source maps with inlined web workers, the bundle size grows huge. Therefore source maps for workers are disabled by default. In order to add source maps to workers, pass `--env workerSourceMaps=true` to the `yarn build` script.
|
|
161
|
+
|
|
156
162
|
## Creating and running visual tests
|
|
157
163
|
|
|
158
164
|
Visual test files must be on the format `visual-tests/SomeTest.VisualTest.ts`. See one of the existing tests
|
package/extensions/datasource.js
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
/*! For license information please see datasource.js.LICENSE.txt */
|
|
2
2
|
!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports["@cognite/reveal"]=t():e["@cognite/reveal"]=t()}("undefined"!=typeof self?self:this,(()=>(()=>{"use strict";var e={n:t=>{var s=t&&t.__esModule?()=>t.default:()=>t;return e.d(s,{a:s}),s},d:(t,s)=>{for(var i in s)e.o(s,i)&&!e.o(t,i)&&Object.defineProperty(t,i,{enumerable:!0,get:s[i]})}};e.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),e.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),e.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var t={};e.r(t),e.d(t,{CdfModelIdentifier:()=>s,File3dFormat:()=>r});class s{constructor(e,t){this.revealInternalId=Symbol(`${e}/${t}`),this.modelId=e,this.revisionId=t}toString(){return`${s.name} (${String(this.revealInternalId)})`}}const i=require("three");var r,o;(o=r||(r={})).EptPointCloud="ept-pointcloud",o.GltfCadModel="gltf-directory",o.AnyFormat="all-outputs",(new i.Matrix4).set(1,0,0,0,0,0,1,0,0,-1,0,0,0,0,0,1),require("lodash/groupBy"),require("lodash/orderBy"),require("lodash/zipWith"),require("assert"),require("@cognite/sdk-core");class n{static color(e){const t=n._colors.get(e);if(void 0!==t)return t;const s=n.generateRandomColor();return n._colors.set(e,s),s}static colorRGB(e){const t=n.color(e);return[Math.floor(255*t.r),Math.floor(255*t.g),Math.floor(255*t.b)]}static colorCSS(e){const[t,s,i]=n.colorRGB(e);return`rgb(${t}, ${s}, ${i})`}static generateRandomColor(){const e=Math.random(),t=.4+.6*Math.random(),s=.3+.4*Math.random();return(new i.Color).setHSL(e,t,s)}}function a(e,t){const s=t.getBoundingClientRect();if(e instanceof MouseEvent)return{offsetX:e.clientX-s.left,offsetY:e.clientY-s.top};if(e.changedTouches.length>0){const t=e.changedTouches[0];return{offsetX:t.clientX-s.left,offsetY:t.clientY-s.top}}return{offsetX:-1,offsetY:-1}}n._colors=new Map;class l{constructor(){this._listeners=[]}subscribe(e){this._listeners.push(e)}unsubscribe(e){const t=this._listeners.indexOf(e);-1!==t&&this._listeners.splice(t,1)}unsubscribeAll(){this._listeners.splice(0)}fire(...e){this._listeners.forEach((t=>t(...e)))}}const h=require("lodash/debounce");var d,c,u=e.n(h);function _(e,t){throw new Error(t||"Unexpected object: "+e)}class f{constructor(e){this._events={click:new l,hover:new l},this.onHoverCallback=u()((e=>{this._events.hover.fire(a(e,this.domElement))}),100),this.domElement=e,this.setupEventListeners()}on(e,t){switch(e){case"click":this._events.click.subscribe(t);break;case"hover":this._events.hover.subscribe(t);break;default:_(e)}}off(e,t){switch(e){case"click":this._events.click.unsubscribe(t);break;case"hover":this._events.hover.unsubscribe(t);break;default:_(e)}}dispose(){!function(e){for(const t of Object.keys(e))e[t].unsubscribeAll()}(this._events)}setupEventListeners(){const{domElement:e}=this;let t=!1,s=0,r=!1;const o=new i.Vector2,n=i=>{this.handleClickEvent(i,o,t,r,s),t=!1,r=!1,e.removeEventListener("mouseup",n),e.removeEventListener("touchend",n),e.addEventListener("mousemove",this.onHoverCallback)},l=i=>{t=!0,r=!0,s=i.timeStamp;const{offsetX:l,offsetY:h}=a(i,e);o.set(l,h),e.addEventListener("mouseup",n),e.addEventListener("touchend",n),e.removeEventListener("mousemove",this.onHoverCallback)};e.addEventListener("mousedown",l),e.addEventListener("touchstart",l),e.addEventListener("mousemove",this.onHoverCallback)}isProperClick(e,t,s,i,r){const{offsetX:o,offsetY:n}=a(e,this.domElement),l=e.timeStamp-r,h=Math.abs(o-t.x)+Math.abs(n-t.y)>f.maxMoveDistance;return s&&i&&l<f.maxClickDuration&&!h}handleClickEvent(e,t,s,i,r){if(this.isProperClick(e,t,s,i,r)){const t={...a(e,this.domElement),button:e instanceof MouseEvent?e.button:void 0};this._events.click.fire(t)}}}f.maxMoveDistance=8,f.maxClickDuration=250,Math.log(2),new i.BufferGeometry;class v extends i.Group{constructor(){super(...arguments),this._isDisposed=!1,this._referenceCount=0}reference(){this.ensureNotDisposed(),this._referenceCount++}dereference(){if(this.ensureNotDisposed(),0===this._referenceCount)throw new Error("No references");0==--this._referenceCount&&this.dispose()}dispose(){this.ensureNotDisposed(),this._isDisposed=!0;for(const e of this.children)e instanceof THREE.Mesh&&void 0!==e.geometry&&(e.geometry.dispose(),e.geometry=emptyGeometry),e instanceof THREE.BufferGeometry&&e.dispose();this.clear()}ensureNotDisposed(){if(this._isDisposed)throw new Error("Already disposed/dereferenced")}}new i.Vector3,new i.Box3;class p extends i.Object3D{constructor(e){super(),this._activeLevel=0,this._levels=[],this.isLOD=!0,this.autoUpdate=!0,this._boundingBox=e.clone(),this.type="BoundingBoxLOD"}setBoundingBox(e){this._boundingBox.copy(e)}addLevel(e,t=0){this._levels.push({object:e,distance:Math.abs(t)}),this._levels.sort(((e,t)=>t.distance-e.distance)),e.visible=!1,this.add(e)}getCurrentLevel(){return this._levels.length>0?this._levels.length-this._activeLevel-1:0}update(e){this.updateCurrentLevel(e)}updateCurrentLevel(e){const t=this._levels,{camPos:s,bounds:i}=updateVars;i.copy(this._boundingBox).applyMatrix4(this.matrixWorld);const r=e instanceof THREE.PerspectiveCamera?e.zoom:1;if(t.length>0){s.setFromMatrixPosition(e.matrixWorld);const o=i.distanceToPoint(s)/r;t[this._activeLevel].object.visible=!1,this._activeLevel=t.findIndex((e=>o>=e.distance)),this._activeLevel=this._activeLevel>=0?this._activeLevel:t.length-1,t[this._activeLevel].object.visible=!0}}}new i.Vector3;class g{constructor(e){this._originalState={},this._renderer=e,this._originalState={}}setScissor(e,t,s,r){const o=this._renderer.getScissor(new i.Vector4);this._originalState={scissorData:o,...this._originalState},this._renderer.setScissor(e,t,s,r)}setScissorTest(e){this._originalState={scissorTest:this._renderer.getScissorTest(),...this._originalState},this._renderer.setScissorTest(e)}setClearColor(e,t){this._originalState={clearColor:this._renderer.getClearColor(new i.Color),clearAlpha:this._renderer.getClearAlpha(),...this._originalState},this._renderer.setClearColor(e,t)}setWebGLState(e,t=g.DefaultWebGLState){var s,i,r,o,n,a,l;if(this._originalState={webGLState:{buffers:(null==e?void 0:e.buffers)?{}:void 0},...this._originalState},null===(s=null==e?void 0:e.buffers)||void 0===s?void 0:s.depth){const s=null===(i=e.buffers.depth)||void 0===i?void 0:i.test,h=null===(r=e.buffers.depth)||void 0===r?void 0:r.mask;this._originalState.webGLState.buffers.depth={test:void 0!==s?null===(n=null===(o=t.buffers)||void 0===o?void 0:o.depth)||void 0===n?void 0:n.test:void 0,mask:void 0!==h?null===(l=null===(a=t.buffers)||void 0===a?void 0:a.depth)||void 0===l?void 0:l.mask:void 0},void 0!==h&&this._renderer.state.buffers.depth.setMask(h),void 0!==s&&this._renderer.state.buffers.depth.setTest(s)}}setSize(e,t){this._originalState={size:this._renderer.getSize(new i.Vector2),...this._originalState},this._renderer.setSize(e,t)}set localClippingEnabled(e){this._originalState={localClippingEnabled:this._renderer.localClippingEnabled,...this._originalState},this._renderer.localClippingEnabled=e}set autoClear(e){this._originalState={autoClear:this._renderer.autoClear,...this._originalState},this._renderer.autoClear=e}set autoClearDepth(e){this._originalState={autoClearDepth:this._renderer.autoClearDepth,...this._originalState},this._renderer.autoClearDepth=e}setRenderTarget(e){this._originalState={renderTarget:this._renderer.getRenderTarget(),...this._originalState},this._renderer.setRenderTarget(e)}resetState(){var e,t,s,i;if(void 0!==this._originalState.autoClear&&(this._renderer.autoClear=this._originalState.autoClear),void 0!==this._originalState.autoClearDepth&&(this._renderer.autoClearDepth=this._originalState.autoClearDepth),void 0!==this._originalState.clearColor&&this._renderer.setClearColor(this._originalState.clearColor,this._originalState.clearAlpha),void 0!==this._originalState.localClippingEnabled&&(this._renderer.localClippingEnabled=this._originalState.localClippingEnabled),void 0!==this._originalState.size&&this._renderer.setSize(this._originalState.size.width,this._originalState.size.height),void 0!==this._originalState.renderTarget&&this._renderer.setRenderTarget(this._originalState.renderTarget),void 0!==this._originalState.scissorData&&this._renderer.setScissor(this._originalState.scissorData),void 0!==this._originalState.scissorTest&&this._renderer.setScissorTest(this._originalState.scissorTest),void 0!==this._originalState.webGLState&&(this._renderer.state.reset(),null===(t=null===(e=this._originalState.webGLState)||void 0===e?void 0:e.buffers)||void 0===t?void 0:t.depth)){const e=null===(s=this._originalState.webGLState.buffers.depth)||void 0===s?void 0:s.test,t=null===(i=this._originalState.webGLState.buffers.depth)||void 0===i?void 0:i.mask;void 0!==t&&this._renderer.state.buffers.depth.setMask(t),void 0!==e&&this._renderer.state.buffers.depth.setTest(e)}this._originalState={}}}g.DefaultWebGLState={buffers:{depth:{mask:!0,test:!0}}};class b{constructor(e){this._value=e,this._lastAccessTime=Date.now()}get value(){return this.touch(),this._value}get lastAccessTime(){return this._lastAccessTime}touch(){this._lastAccessTime=Date.now()}}class m{constructor(e=50,t,s=10){this._data=new Map,this._maxElementsInCache=e,this._defaultCleanupCount=Math.max(s,1),this._removeCallback=t}has(e){return this._data.has(e)}forceInsert(e,t){this.isFull()&&this.cleanCache(this._defaultCleanupCount),this.insert(e,t)}insert(e,t){if(this._data.size<this._maxElementsInCache)this._data.set(e,new b(t));else if(this._maxElementsInCache>0)throw new Error("Cache full, please clean Cache and retry adding data")}remove(e){if(void 0!==this._removeCallback){const t=this._data.get(e);void 0!==t&&this._removeCallback(t.value)}this._data.delete(e)}get(e){const t=this._data.get(e);if(void 0!==t)return t.value;throw new Error(`Cache element ${e} does not exist`)}isFull(){return this._data.size>=this._maxElementsInCache}cleanCache(e){const t=Array.from(this._data.entries());t.sort(((e,t)=>t[1].lastAccessTime-e[1].lastAccessTime));for(let s=0;s<e;s++){const e=t.pop();if(void 0===e)return;this.remove(e[0])}}resize(e){this._maxElementsInCache=e,this._defaultCleanupCount=Math.max(e*m.CLEANUP_COUNT_TO_CAPACITY_RATIO,1),this.isFull()&&this.cleanCache(this._data.size-this._maxElementsInCache)}clear(){if(void 0!==this._removeCallback)for(const e of this._data.values())this._removeCallback(e.value);this._data.clear()}}return m.CLEANUP_COUNT_TO_CAPACITY_RATIO=.2,require("lodash/chunk"),require("lodash/map"),new i.Vector2,new i.Vector3,Symbol.toStringTag,require("lodash/remove"),function(){if("undefined"!=typeof self)return self;if("undefined"!=typeof window)return window;if(void 0!==e.g)return e.g;throw new Error("unable to locate global object")}(),(c=d||(d={}))[c.Box=0]="Box",c[c.Cylinder=1]="Cylinder",c[c.Composite=2]="Composite",t})()));
|
|
3
|
-
//# sourceMappingURL=datasource.map
|
|
3
|
+
//# sourceMappingURL=datasource.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"extensions/datasource.js","mappings":"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","sources":["webpack:///webpack/universalModuleDefinition","webpack:///webpack/bootstrap","webpack:///webpack/runtime/compat get default export","webpack:///webpack/runtime/define property getters","webpack:///webpack/runtime/global","webpack:///webpack/runtime/hasOwnProperty shorthand","webpack:///webpack/runtime/make namespace object","webpack:///./packages/data-providers/src/model-identifiers/CdfModelIdentifier.ts","webpack:///external commonjs \"three\"","webpack:///./packages/data-providers/src/types.ts","webpack:///./packages/data-providers/src/utilities/applyDefaultModelTransformation.ts","webpack:///external commonjs \"lodash/groupBy\"","webpack:///external commonjs \"lodash/orderBy\"","webpack:///external commonjs \"lodash/zipWith\"","webpack:///external commonjs \"assert\"","webpack:///external commonjs \"@cognite/sdk-core\"","webpack:///./packages/utilities/src/RandomColors.ts","webpack:///./packages/utilities/src/events/clickOrTouchEventOffset.ts","webpack:///./packages/utilities/src/events/EventTrigger.ts","webpack:///external commonjs \"lodash/debounce\"","webpack:///./packages/utilities/src/shapes/ISerializableShape.ts","webpack:///./packages/utilities/src/assertNever.ts","webpack:///./packages/utilities/src/events/InputHandler.ts","webpack:///./packages/utilities/src/determinePowerOfTwoDimensions.ts","webpack:///./packages/utilities/src/three/AutoDisposeGroup.ts","webpack:///./packages/utilities/src/three/BoundingBoxLOD.ts","webpack:///./packages/utilities/src/three/visitBox3CornerPoints.ts","webpack:///./packages/utilities/src/WebGLRendererStateHelper.ts","webpack:///./packages/utilities/src/cache/MemoryRequestCache.ts","webpack:///external commonjs \"lodash/chunk\"","webpack:///external commonjs \"lodash/map\"","webpack:///./packages/utilities/src/worldToViewport.ts","webpack:///./packages/utilities/src/DeferredPromise.ts","webpack:///external commonjs \"lodash/remove\"","webpack:///./packages/utilities/src/workers/workerize-transferable/util.ts"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"@cognite/reveal\"] = factory();\n\telse\n\t\troot[\"@cognite/reveal\"] = factory();\n})((typeof self !== 'undefined' ? self : this), () => {\nreturn ","// The require scope\nvar __webpack_require__ = {};\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","/*!\n * Copyright 2021 Cognite AS\n */\nimport { ModelIdentifier } from '../..';\n\n/**\n * Identifies a 3D model stored in CDF by the combination of a modelId, a revisionId\n * and a format.\n */\nexport class CdfModelIdentifier implements ModelIdentifier {\n readonly revealInternalId: symbol;\n\n readonly modelId: number;\n readonly revisionId: number;\n\n constructor(modelId: number, revisionId: number) {\n this.revealInternalId = Symbol(`${modelId}/${revisionId}`);\n this.modelId = modelId;\n this.revisionId = revisionId;\n }\n\n public toString(): string {\n return `${CdfModelIdentifier.name} (${String(this.revealInternalId)})`;\n }\n}\n","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"three\");","/*!\n * Copyright 2021 Cognite AS\n */\nimport * as THREE from 'three';\n\nexport interface JsonFileProvider {\n getJsonFile(baseUrl: string, fileName: string): Promise<any>;\n}\n\nexport interface BinaryFileProvider {\n getBinaryFile(baseUrl: string, fileName: string): Promise<ArrayBuffer>;\n}\n\nexport interface Image360DescriptorProvider<T> {\n get360ImageDescriptors(metadataFilter: T): Promise<Image360Descriptor[]>;\n}\n\nexport interface Image360FileProvider {\n get360ImageFiles(image360Descriptor: Image360Descriptor): Promise<Image360Face[]>;\n}\n\nexport type Image360Descriptor = {\n id: string;\n label: string;\n collectionId: string;\n collectionLabel: string;\n transformations: {\n translation: THREE.Matrix4;\n rotation: THREE.Matrix4;\n };\n};\n\nexport type Image360Face = {\n face: 'front' | 'back' | 'left' | 'right' | 'top' | 'bottom';\n mimeType: 'image/jpeg' | 'image/png';\n data: ArrayBuffer;\n};\n\nexport enum File3dFormat {\n EptPointCloud = 'ept-pointcloud',\n /**\n * Reveal v9 and above (GLTF based output)\n */\n GltfCadModel = 'gltf-directory',\n AnyFormat = 'all-outputs'\n}\n\nexport interface BlobOutputMetadata {\n blobId: number;\n format: File3dFormat | string;\n version: number;\n}\n","/*!\n * Copyright 2021 Cognite AS\n */\n\nimport * as THREE from 'three';\n\nimport { File3dFormat } from '../types';\n\n// The below is equal to new THREE.Matrix4().makeRotationFromEuler(new THREE.Euler(-Math.PI / 2, 0, 0));\nconst cadFromCdfToThreeMatrix = new THREE.Matrix4().set(1, 0, 0, 0, 0, 0, 1, 0, 0, -1, 0, 0, 0, 0, 0, 1);\n\nexport function applyDefaultModelTransformation(matrix: THREE.Matrix4, format: File3dFormat | string): void {\n switch (format) {\n case File3dFormat.GltfCadModel:\n case File3dFormat.EptPointCloud:\n matrix.premultiply(cadFromCdfToThreeMatrix);\n break;\n\n default:\n throw new Error(`Unknown model format '${format}`);\n }\n}\n","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"lodash/groupBy\");","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"lodash/orderBy\");","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"lodash/zipWith\");","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"assert\");","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"@cognite/sdk-core\");","/*!\n * Copyright 2021 Cognite AS\n */\nimport * as THREE from 'three';\n\n/**\n * Utility class for creating reasonable visible colors. Mainly meant for use\n * in debugging.\n */\nexport class RandomColors {\n private static readonly _colors: Map<number, THREE.Color> = new Map();\n\n /**\n * Returns a color as a THREE.Color.\n * @param colorIndex\n * @returns\n */\n static color(colorIndex: number): THREE.Color {\n const color = RandomColors._colors.get(colorIndex);\n if (color !== undefined) {\n return color;\n }\n\n const newColor = RandomColors.generateRandomColor();\n RandomColors._colors.set(colorIndex, newColor);\n return newColor;\n }\n\n /**\n * Returns color as RGB components between 0 and 255.\n * @param colorIndex Return\n * @returns\n */\n static colorRGB(colorIndex: number): [number, number, number] {\n const c = RandomColors.color(colorIndex);\n return [Math.floor(c.r * 255), Math.floor(c.g * 255), Math.floor(c.b * 255)];\n }\n\n /**\n * Returns a color string suitable for usage in CSS styles.\n * @param colorIndex\n * @returns\n */\n static colorCSS(colorIndex: number): string {\n const [r, g, b] = RandomColors.colorRGB(colorIndex);\n return `rgb(${r}, ${g}, ${b})`;\n }\n\n /**\n * Returns a random color with reasonable lightness and saturation\n * to make the color easily distinguishable from other colors.\n */\n static generateRandomColor(): THREE.Color {\n const hue = Math.random();\n const saturation = 0.4 + Math.random() * 0.6;\n const lightness = 0.3 + 0.4 * Math.random();\n return new THREE.Color().setHSL(hue, saturation, lightness);\n }\n}\n","/*!\n * Copyright 2021 Cognite AS\n */\n\n/**\n * Determines clicked or touched coordinate as offset\n * @param ev An MouseEvent or TouchEvent.\n * @param target HTML element to find coordinates relative to.\n * @returns A struct containing coordinates relative to the HTML element provided.\n */\nexport function clickOrTouchEventOffset(\n ev: MouseEvent | TouchEvent,\n target: HTMLElement\n): { offsetX: number; offsetY: number } {\n const rect = target.getBoundingClientRect();\n\n if (ev instanceof MouseEvent) {\n return {\n offsetX: ev.clientX - rect.left,\n offsetY: ev.clientY - rect.top\n };\n } else if (ev.changedTouches.length > 0) {\n const touch = ev.changedTouches[0];\n return {\n offsetX: touch.clientX - rect.left,\n offsetY: touch.clientY - rect.top\n };\n }\n\n // Invalid event\n return {\n offsetX: -1,\n offsetY: -1\n };\n}\n","/*!\n * Copyright 2021 Cognite AS\n */\n\n/**\n * Subscribable event source.\n */\nexport class EventTrigger<TListener extends (...args: any[]) => void> {\n private readonly _listeners: TListener[] = [];\n\n subscribe(listener: TListener): void {\n this._listeners.push(listener);\n }\n\n unsubscribe(listener: TListener): void {\n const index = this._listeners.indexOf(listener);\n if (index !== -1) {\n this._listeners.splice(index, 1);\n }\n }\n\n unsubscribeAll(): void {\n this._listeners.splice(0);\n }\n\n fire(...args: Parameters<TListener>): void {\n this._listeners.forEach(listener => listener(...args));\n }\n}\n","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"lodash/debounce\");","/*!\n * Copyright 2022 Cognite AS\n */\n\nexport enum ShapeType {\n Box,\n Cylinder,\n Composite\n}\n\nexport interface ISerializableShape {\n readonly shapeType: ShapeType;\n}\n","/*!\n * Copyright 2021 Cognite AS\n */\n\n/**\n * See https://www.typescriptlang.org/docs/handbook/unions-and-intersections.html#union-exhaustiveness-checking\n */\nexport function assertNever(x: never, message?: string): never {\n throw new Error(message || 'Unexpected object: ' + x);\n}\n","/*!\n * Copyright 2021 Cognite AS\n */\nimport { clickOrTouchEventOffset } from './clickOrTouchEventOffset';\nimport { EventTrigger } from './EventTrigger';\nimport debounce from 'lodash/debounce';\nimport { assertNever } from '../assertNever';\nimport { Vector2 } from 'three';\nimport { PointerEventDelegate } from './types';\n\nexport type EventCollection = { [eventName: string]: EventTrigger<(...args: any[]) => void> };\n\nexport class InputHandler {\n private readonly domElement: HTMLElement;\n private static readonly maxMoveDistance = 8;\n private static readonly maxClickDuration = 250;\n\n private readonly _events = {\n click: new EventTrigger<PointerEventDelegate>(),\n hover: new EventTrigger<PointerEventDelegate>()\n };\n\n constructor(domElement: HTMLElement) {\n this.domElement = domElement;\n\n this.setupEventListeners();\n }\n /**\n * @example\n * ```js\n * const onClick = (event) => { console.log(event.offsetX, event.offsetY) };\n * viewer.on('click', onClick);\n * ```\n */\n on(event: 'click' | 'hover', callback: PointerEventDelegate): void {\n switch (event) {\n case 'click':\n this._events.click.subscribe(callback as PointerEventDelegate);\n break;\n\n case 'hover':\n this._events.hover.subscribe(callback as PointerEventDelegate);\n break;\n default:\n assertNever(event);\n }\n }\n\n off(event: 'click' | 'hover', callback: PointerEventDelegate): void {\n switch (event) {\n case 'click':\n this._events.click.unsubscribe(callback as PointerEventDelegate);\n break;\n\n case 'hover':\n this._events.hover.unsubscribe(callback as PointerEventDelegate);\n break;\n default:\n assertNever(event);\n }\n }\n\n dispose(): void {\n disposeOfAllEventListeners(this._events);\n }\n\n private setupEventListeners() {\n const { domElement } = this;\n\n let pointerDown = false;\n let pointerDownTimestamp = 0;\n let validClick = false;\n\n const startOffset = new Vector2();\n\n const onUp = (e: MouseEvent | TouchEvent) => {\n this.handleClickEvent(e, startOffset, pointerDown, validClick, pointerDownTimestamp);\n\n pointerDown = false;\n validClick = false;\n\n // up\n domElement.removeEventListener('mouseup', onUp);\n domElement.removeEventListener('touchend', onUp);\n\n // add back onHover\n domElement.addEventListener('mousemove', this.onHoverCallback);\n };\n\n const onDown = (e: MouseEvent | TouchEvent) => {\n pointerDown = true;\n validClick = true;\n pointerDownTimestamp = e.timeStamp;\n\n const { offsetX, offsetY } = clickOrTouchEventOffset(e, domElement);\n startOffset.set(offsetX, offsetY);\n\n // up\n domElement.addEventListener('mouseup', onUp);\n domElement.addEventListener('touchend', onUp);\n\n // no more onHover\n domElement.removeEventListener('mousemove', this.onHoverCallback);\n };\n\n // down\n domElement.addEventListener('mousedown', onDown);\n domElement.addEventListener('touchstart', onDown);\n\n // on hover callback\n domElement.addEventListener('mousemove', this.onHoverCallback);\n }\n\n private isProperClick(\n e: MouseEvent | TouchEvent,\n startOffset: Vector2,\n pointerDown: boolean,\n validClick: boolean,\n pointerDownTimestamp: number\n ) {\n const { offsetX, offsetY } = clickOrTouchEventOffset(e, this.domElement);\n const clickDuration = e.timeStamp - pointerDownTimestamp;\n\n const hasMovedDuringClick =\n Math.abs(offsetX - startOffset.x) + Math.abs(offsetY - startOffset.y) > InputHandler.maxMoveDistance;\n\n const isProperClick =\n pointerDown && validClick && clickDuration < InputHandler.maxClickDuration && !hasMovedDuringClick;\n\n return isProperClick;\n }\n\n private handleClickEvent(\n e: MouseEvent | TouchEvent,\n startOffset: Vector2,\n pointerDown: boolean,\n validClick: boolean,\n pointerDownTimestamp: number\n ) {\n const isProperClick = this.isProperClick(e, startOffset, pointerDown, validClick, pointerDownTimestamp);\n\n if (isProperClick) {\n const firedEvent = {\n ...clickOrTouchEventOffset(e, this.domElement),\n button: e instanceof MouseEvent ? e.button : undefined\n };\n\n this._events.click.fire(firedEvent);\n }\n }\n\n private readonly onHoverCallback = debounce((e: MouseEvent) => {\n this._events.hover.fire(clickOrTouchEventOffset(e, this.domElement));\n }, 100);\n}\n\n/**\n * Method for deleting all external events that are associated with current instance of a class.\n */\nexport function disposeOfAllEventListeners(eventList: EventCollection): void {\n for (const eventType of Object.keys(eventList)) {\n eventList[eventType].unsubscribeAll();\n }\n}\n","/*!\n * Copyright 2021 Cognite AS\n */\n\n/**\n * Computes minimal power-of-two width and height that holds at least the number of elements provided.\n * This is useful to compute texture sizes.\n */\nexport function determinePowerOfTwoDimensions(elementCount: number): { width: number; height: number } {\n const width = Math.max(1, ceilToPowerOfTwo(Math.sqrt(elementCount)));\n const height = Math.max(1, ceilToPowerOfTwo(elementCount / width));\n return { width, height };\n}\n\nconst log2 = Math.log(2);\nfunction ceilToPowerOfTwo(v: number): number {\n return Math.pow(2, Math.ceil(Math.log(v) / log2));\n}\n","/*!\n * Copyright 2021 Cognite AS\n */\n\nimport * as THREE from 'three';\n\nconst emptyGeometry = new THREE.BufferGeometry();\n\n/**\n * Referenced count implementation of THREE.Group that\n * automatically disposes all geometries contained in meshes that\n * are direct children of the group.\n */\nexport class AutoDisposeGroup extends THREE.Group {\n private _isDisposed = false;\n private _referenceCount = 0;\n\n reference(): void {\n this.ensureNotDisposed();\n this._referenceCount++;\n }\n\n dereference(): void {\n this.ensureNotDisposed();\n if (this._referenceCount === 0) {\n throw new Error('No references');\n }\n if (--this._referenceCount === 0) {\n this.dispose();\n }\n }\n\n private dispose(): void {\n this.ensureNotDisposed();\n this._isDisposed = true;\n\n for (const child of this.children) {\n if (child instanceof THREE.Mesh && child.geometry !== undefined) {\n child.geometry.dispose();\n\n // // NOTE: Forcefully creating a new reference here to make sure\n // // there are no lingering references to the large geometry buffer\n child.geometry = emptyGeometry;\n }\n if (child instanceof THREE.BufferGeometry) {\n child.dispose();\n }\n }\n\n this.clear();\n }\n\n private ensureNotDisposed() {\n if (this._isDisposed) {\n throw new Error('Already disposed/dereferenced');\n }\n }\n}\n","/*!\n * Copyright 2021 Cognite AS\n */\nimport * as THREE from 'three';\n\n// For BoundingBoxLOD.update()\nconst updateVars = {\n camPos: new THREE.Vector3(),\n bounds: new THREE.Box3()\n};\n\n/**\n * Class similar to THREE.LOD except that it doesn't use `matrixWorld` to determine distance to camera, but a\n * bounding box.\n */\nexport class BoundingBoxLOD extends THREE.Object3D {\n private readonly _boundingBox: THREE.Box3;\n private _activeLevel = 0;\n private readonly _levels: { distance: number; object: THREE.Object3D }[] = [];\n\n // Note! isLOD and autoUpdate is used by WebGLRenderer to perform automatic update of LOD\n // level before rendering\n public readonly isLOD = true;\n public readonly autoUpdate = true;\n\n constructor(boundingBox: THREE.Box3) {\n super();\n this._boundingBox = boundingBox.clone();\n this.type = 'BoundingBoxLOD';\n }\n\n setBoundingBox(boundingBox: THREE.Box3): void {\n this._boundingBox.copy(boundingBox);\n }\n\n addLevel(object: THREE.Object3D, distance: number = 0): void {\n this._levels.push({ object, distance: Math.abs(distance) });\n this._levels.sort((a, b) => b.distance - a.distance);\n object.visible = false;\n this.add(object);\n }\n\n /**\n * Returns the index of the current active LOD. 0 means highest detail.\n */\n getCurrentLevel(): number {\n return this._levels.length > 0 ? this._levels.length - this._activeLevel - 1 : 0;\n }\n\n /**\n * Update selected LOD level based on distance to camera.\n */\n update(camera: THREE.Camera): void {\n this.updateCurrentLevel(camera);\n }\n\n private updateCurrentLevel(camera: THREE.Camera) {\n const levels = this._levels;\n const { camPos, bounds } = updateVars;\n bounds.copy(this._boundingBox).applyMatrix4(this.matrixWorld);\n const cameraZoom = camera instanceof THREE.PerspectiveCamera ? camera.zoom : 1.0;\n\n if (levels.length > 0) {\n camPos.setFromMatrixPosition(camera.matrixWorld);\n const distanceToCamera = bounds.distanceToPoint(camPos) / cameraZoom;\n\n levels[this._activeLevel].object.visible = false;\n this._activeLevel = levels.findIndex(p => distanceToCamera >= p.distance);\n this._activeLevel = this._activeLevel >= 0 ? this._activeLevel : levels.length - 1;\n levels[this._activeLevel].object.visible = true;\n }\n }\n}\n","/*!\n * Copyright 2021 Cognite AS\n */\nimport * as THREE from 'three';\n\nconst visitBox3CornerPointsVars = {\n tmpVector: new THREE.Vector3()\n};\n\n/**\n * Visits each corner point of the box given by applying\n * the callback provided to each of the points.\n * Note that the callback is invoked with a vector\n * that will be changed later, so if this is to be stored\n * it must be cloned first.\n */\nexport function visitBox3CornerPoints(box: THREE.Box3, callback: (corner: THREE.Vector3) => void): void {\n const { tmpVector } = visitBox3CornerPointsVars;\n tmpVector.set(box.min.x, box.min.y, box.min.z); // 000\n callback(tmpVector);\n tmpVector.set(box.min.x, box.min.y, box.max.z); // 001\n callback(tmpVector);\n tmpVector.set(box.min.x, box.max.y, box.min.z); // 010\n callback(tmpVector);\n tmpVector.set(box.min.x, box.max.y, box.max.z); // 011\n callback(tmpVector);\n tmpVector.set(box.max.x, box.min.y, box.min.z); // 100\n callback(tmpVector);\n tmpVector.set(box.max.x, box.min.y, box.max.z); // 101\n callback(tmpVector);\n tmpVector.set(box.max.x, box.max.y, box.min.z); // 110\n callback(tmpVector);\n tmpVector.set(box.max.x, box.max.y, box.max.z); // 111\n callback(tmpVector);\n}\n","/*!\n * Copyright 2021 Cognite AS\n */\nimport * as THREE from 'three';\nimport { Vector4 } from 'three';\n\ntype WebGLRendererState = {\n autoClear?: boolean;\n autoClearDepth?: boolean;\n clearColor?: THREE.Color | string | number;\n clearAlpha?: number;\n size?: THREE.Vector2;\n localClippingEnabled?: boolean;\n renderTarget?: THREE.WebGLRenderTarget | null;\n scissorData?: THREE.Vector4;\n scissorTest?: boolean;\n webGLState?: WebGLState;\n};\n\ntype WebGLState = {\n buffers?: {\n depth?: {\n mask?: boolean;\n test?: boolean;\n };\n };\n};\n\nexport class WebGLRendererStateHelper {\n private _originalState: WebGLRendererState = {};\n private readonly _renderer: THREE.WebGLRenderer;\n\n private static readonly DefaultWebGLState: WebGLState = {\n buffers: {\n depth: {\n mask: true,\n test: true\n }\n }\n };\n\n constructor(renderer: THREE.WebGLRenderer) {\n this._renderer = renderer;\n this._originalState = {};\n }\n\n setScissor(x: number, y: number, width: number, height: number): void {\n const scissorData = this._renderer.getScissor(new Vector4());\n this._originalState = { scissorData, ...this._originalState };\n this._renderer.setScissor(x, y, width, height);\n }\n\n setScissorTest(enabled: boolean): void {\n this._originalState = { scissorTest: this._renderer.getScissorTest(), ...this._originalState };\n this._renderer.setScissorTest(enabled);\n }\n\n setClearColor(color: THREE.Color | number | string, alpha?: number): void {\n this._originalState = {\n clearColor: this._renderer.getClearColor(new THREE.Color()),\n clearAlpha: this._renderer.getClearAlpha(),\n ...this._originalState\n };\n this._renderer.setClearColor(color, alpha);\n }\n\n setWebGLState(state: WebGLState, resetState: WebGLState = WebGLRendererStateHelper.DefaultWebGLState): void {\n this._originalState = {\n webGLState: {\n buffers: state?.buffers ? {} : undefined\n },\n ...this._originalState\n };\n\n if (state?.buffers?.depth) {\n const newTest = state.buffers.depth?.test;\n const newMask = state.buffers.depth?.mask;\n\n this._originalState.webGLState!.buffers!.depth = {\n test: newTest !== undefined ? resetState.buffers?.depth?.test : undefined,\n mask: newMask !== undefined ? resetState.buffers?.depth?.mask : undefined\n };\n\n if (newMask !== undefined) this._renderer.state.buffers.depth.setMask(newMask);\n if (newTest !== undefined) this._renderer.state.buffers.depth.setTest(newTest);\n }\n }\n\n setSize(width: number, height: number): void {\n this._originalState = { size: this._renderer.getSize(new THREE.Vector2()), ...this._originalState };\n this._renderer.setSize(width, height);\n }\n\n set localClippingEnabled(enabled: boolean) {\n this._originalState = { localClippingEnabled: this._renderer.localClippingEnabled, ...this._originalState };\n this._renderer.localClippingEnabled = enabled;\n }\n\n set autoClear(enabled: boolean) {\n this._originalState = { autoClear: this._renderer.autoClear, ...this._originalState };\n this._renderer.autoClear = enabled;\n }\n\n set autoClearDepth(enabled: boolean) {\n this._originalState = { autoClearDepth: this._renderer.autoClearDepth, ...this._originalState };\n this._renderer.autoClearDepth = enabled;\n }\n\n setRenderTarget(renderTarget: THREE.WebGLRenderTarget | null): void {\n this._originalState = { renderTarget: this._renderer.getRenderTarget(), ...this._originalState };\n this._renderer.setRenderTarget(renderTarget);\n }\n\n resetState(): void {\n if (this._originalState.autoClear !== undefined) {\n this._renderer.autoClear = this._originalState.autoClear;\n }\n if (this._originalState.autoClearDepth !== undefined) {\n this._renderer.autoClearDepth = this._originalState.autoClearDepth;\n }\n if (this._originalState.clearColor !== undefined) {\n this._renderer.setClearColor(this._originalState.clearColor, this._originalState.clearAlpha);\n }\n if (this._originalState.localClippingEnabled !== undefined) {\n this._renderer.localClippingEnabled = this._originalState.localClippingEnabled;\n }\n if (this._originalState.size !== undefined) {\n this._renderer.setSize(this._originalState.size.width, this._originalState.size.height);\n }\n if (this._originalState.renderTarget !== undefined) {\n this._renderer.setRenderTarget(this._originalState.renderTarget);\n }\n if (this._originalState.scissorData !== undefined) {\n this._renderer.setScissor(this._originalState.scissorData);\n }\n if (this._originalState.scissorTest !== undefined) {\n this._renderer.setScissorTest(this._originalState.scissorTest);\n }\n if (this._originalState.webGLState !== undefined) {\n this._renderer.state.reset();\n\n if (this._originalState.webGLState?.buffers?.depth) {\n const lastTest = this._originalState.webGLState.buffers.depth?.test;\n const lastMask = this._originalState.webGLState.buffers.depth?.mask;\n\n if (lastMask !== undefined) this._renderer.state.buffers.depth.setMask(lastMask);\n if (lastTest !== undefined) this._renderer.state.buffers.depth.setTest(lastTest);\n }\n }\n\n this._originalState = {};\n }\n}\n","/*!\n * Copyright 2021 Cognite AS\n */\n\nimport { RequestCache } from './RequestCache';\n\nclass TimestampedContainer<T> {\n private _lastAccessTime: number;\n private readonly _value: T;\n\n constructor(value: T) {\n this._value = value;\n this._lastAccessTime = Date.now();\n }\n\n get value() {\n this.touch();\n return this._value;\n }\n\n get lastAccessTime() {\n return this._lastAccessTime;\n }\n\n private touch() {\n this._lastAccessTime = Date.now();\n }\n}\n\nexport interface MemoryRequestCacheOptions {\n maxElementsInCache?: number;\n}\n\nexport class MemoryRequestCache<Key, Data> implements RequestCache<Key, Data> {\n private _maxElementsInCache: number;\n private readonly _data: Map<Key, TimestampedContainer<Data>>;\n private _defaultCleanupCount: number;\n private readonly _removeCallback: ((value: Data) => void) | undefined;\n\n private static readonly CLEANUP_COUNT_TO_CAPACITY_RATIO = 1.0 / 5.0;\n\n constructor(\n maxElementsInCache: number = 50,\n removeCallback?: (value: Data) => void,\n defaultCleanupCount: number = 10\n ) {\n this._data = new Map();\n this._maxElementsInCache = maxElementsInCache;\n this._defaultCleanupCount = Math.max(defaultCleanupCount, 1);\n this._removeCallback = removeCallback;\n }\n\n has(id: Key): boolean {\n return this._data.has(id);\n }\n\n forceInsert(id: Key, data: Data): void {\n if (this.isFull()) {\n this.cleanCache(this._defaultCleanupCount);\n }\n this.insert(id, data);\n }\n\n insert(id: Key, data: Data): void {\n if (this._data.size < this._maxElementsInCache) {\n this._data.set(id, new TimestampedContainer(data));\n } else if (this._maxElementsInCache > 0) {\n throw new Error('Cache full, please clean Cache and retry adding data');\n }\n }\n\n remove(id: Key): void {\n if (this._removeCallback !== undefined) {\n const value = this._data.get(id);\n if (value !== undefined) {\n this._removeCallback(value.value);\n }\n }\n this._data.delete(id);\n }\n\n get(id: Key): Data {\n const data = this._data.get(id);\n if (data !== undefined) {\n // Don't really like the touch for lastTime being hidden within a get function. Should we maybe make a\n // TimeConstrainedCache interface where the geter is called something like getAndUpdateTimestamp for clarity?\n return data.value;\n }\n throw new Error(`Cache element ${id} does not exist`);\n }\n\n isFull(): boolean {\n return this._data.size >= this._maxElementsInCache;\n }\n\n cleanCache(count: number): void {\n const allResults = Array.from(this._data.entries());\n allResults.sort((left, right) => {\n return right[1].lastAccessTime - left[1].lastAccessTime;\n });\n for (let i = 0; i < count; i++) {\n const entry = allResults.pop();\n if (entry !== undefined) {\n this.remove(entry[0]);\n } else {\n return;\n }\n }\n }\n\n resize(cacheSize: number): void {\n this._maxElementsInCache = cacheSize;\n this._defaultCleanupCount = Math.max(cacheSize * MemoryRequestCache.CLEANUP_COUNT_TO_CAPACITY_RATIO, 1);\n\n if (this.isFull()) {\n this.cleanCache(this._data.size - this._maxElementsInCache);\n }\n }\n\n clear(): void {\n if (this._removeCallback !== undefined) {\n for (const value of this._data.values()) {\n this._removeCallback(value.value);\n }\n }\n this._data.clear();\n }\n}\n","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"lodash/chunk\");","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"lodash/map\");","/*!\n * Copyright 2021 Cognite AS\n */\n\nimport * as THREE from 'three';\n\nconst worldToViewportVars = {\n renderSize: new THREE.Vector2(),\n position: new THREE.Vector3()\n};\n\n/**\n * Maps from 3D world coordinates to normalized screen coordinates\n * relative to the canvas being rendered to. X and Y will\n * be in range [0, 1]. Z is in range [-1, 1] if the coordinate\n * is inside the camera near and far planes.\n * @param camera Camera used to project point from 3D to NDC coordinates\n * @param position3D World position in 3D\n * @param out Optionally pre-allocated THREE.Vector3\n * @returns Relative screen coordinates in X, Y and Z in range [-1, 1] if point\n * is within near/far of camera.\n */\n\nexport function worldToNormalizedViewportCoordinates(\n camera: THREE.PerspectiveCamera,\n position3D: THREE.Vector3,\n out: THREE.Vector3 = new THREE.Vector3()\n): THREE.Vector3 {\n const { position } = worldToViewportVars;\n\n // map to normalized device coordinate (NDC) space\n position.copy(position3D);\n position.project(camera);\n\n // map to 2D screen space\n const x = (position.x + 1) / 2;\n const y = (-position.y + 1) / 2;\n\n return out.set(x, y, position.z);\n}\n\n/**\n * Maps from 3D world coordinates to screen coordinates\n * relative to the canvas. X and Y will be in absolute\n * coordinates (0,0 being the top left of the canvas). Z is\n * in range [-1, 1] if the coordinate\n * is inside the camera near and far planes.\n * @param renderer Renderer used to render the \"world\"\n * @param camera Camera used to project point from 3D to NDC coordinates\n * @param position3D World position in 3D\n * @param out Optionally pre-allocated THREE.Vector3\n * @returns Relative screen coordinates in X, Y and Z in range [-1, 1] if point\n * is within near/far of camera.\n */\nexport function worldToViewportCoordinates(\n renderer: THREE.WebGLRenderer,\n camera: THREE.PerspectiveCamera,\n position3D: THREE.Vector3,\n out: THREE.Vector3 = new THREE.Vector3()\n): THREE.Vector3 {\n worldToNormalizedViewportCoordinates(camera, position3D, out);\n\n const { renderSize } = worldToViewportVars;\n renderer.getSize(renderSize);\n\n const canvas = renderer.domElement;\n const { width: canvasWidth, height: canvasHeight } = canvas.getBoundingClientRect();\n\n out.x = Math.round(out.x * canvasWidth);\n out.y = Math.round(out.y * canvasHeight);\n return out;\n}\n\n/**\n * Converts a pixel coordinate to normalized device coordinate (in range [-1, 1])\n */\nexport function pixelToNormalizedDeviceCoordinates(x: number, y: number, width: number, height: number): THREE.Vector2 {\n return new THREE.Vector2((x / width) * 2 - 1, (y / height) * -2 + 1);\n}\n","/*!\n * Copyright 2022 Cognite AS\n */\n\nexport class DeferredPromise<T> implements Promise<T> {\n [Symbol.toStringTag] = 'Promise';\n\n private readonly _promise: Promise<T>;\n private _resolve!: (value: T | PromiseLike<T>) => void;\n private _reject!: (reason: any) => void;\n private _state: 'pending' | 'fulfilled' | 'rejected' = 'pending';\n\n public get state(): 'pending' | 'fulfilled' | 'rejected' {\n return this._state;\n }\n\n constructor() {\n this._promise = new Promise<T>((resolve, reject) => {\n this._resolve = resolve;\n this._reject = reject;\n });\n }\n finally(onfinally?: (() => void) | null): Promise<T> {\n return this._promise.finally(onfinally);\n }\n\n public then<TResult1, TResult2>(\n onfulfilled?: (value: T) => TResult1 | PromiseLike<TResult1>,\n onrejected?: (reason: any) => TResult2 | PromiseLike<TResult2>\n ): Promise<TResult1 | TResult2> {\n return this._promise.then(onfulfilled, onrejected);\n }\n\n public catch<TResult>(onrejected?: (reason: any) => TResult | PromiseLike<TResult>): Promise<T | TResult> {\n return this._promise.catch(onrejected);\n }\n\n public resolve(value: T | PromiseLike<T>): void {\n this._resolve(value);\n this._state = 'fulfilled';\n }\n\n public reject(reason?: any): void {\n this._reject(reason);\n this._state = 'rejected';\n }\n}\n","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"lodash/remove\");","/*!\n * Adopted from https://github.com/naoak/workerize-transferable\n */\nconst globals = getGlobalThis();\n\n/**\n * Get the global scope for browsers that do not support globalThis\n * https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/globalThis\n */\nexport function getGlobalThis(): typeof globalThis {\n if (typeof self !== 'undefined') {\n return self;\n }\n if (typeof window !== 'undefined') {\n return window;\n }\n if (typeof global !== 'undefined') {\n return global;\n }\n throw new Error('unable to locate global object');\n}\n\n/**\n * Test if an object is transferable\n * @param x Object\n */\nexport function isTransferableObject(x: any): boolean {\n return (\n x instanceof ArrayBuffer ||\n x instanceof MessagePort ||\n (globals.ImageBitmap && x instanceof ImageBitmap) ||\n (globals.OffscreenCanvas && x instanceof OffscreenCanvas)\n );\n}\n"],"names":["root","factory","exports","module","define","amd","self","this","__webpack_require__","getter","__esModule","d","a","definition","key","o","Object","defineProperty","enumerable","get","g","globalThis","Function","e","window","obj","prop","prototype","hasOwnProperty","call","r","Symbol","toStringTag","value","constructor","modelId","revisionId","revealInternalId","toString","name","String","require","File3dFormat","set","RandomColors","static","colorIndex","color","_colors","undefined","newColor","generateRandomColor","c","Math","floor","b","colorRGB","hue","random","saturation","lightness","setHSL","clickOrTouchEventOffset","ev","target","rect","getBoundingClientRect","MouseEvent","offsetX","clientX","left","offsetY","clientY","top","changedTouches","length","touch","Map","EventTrigger","_listeners","subscribe","listener","push","unsubscribe","index","indexOf","splice","unsubscribeAll","fire","args","forEach","ShapeType","assertNever","x","message","Error","InputHandler","domElement","_events","click","hover","onHoverCallback","setupEventListeners","on","event","callback","off","dispose","eventList","eventType","keys","disposeOfAllEventListeners","pointerDown","pointerDownTimestamp","validClick","startOffset","Vector2","onUp","handleClickEvent","removeEventListener","addEventListener","onDown","timeStamp","isProperClick","clickDuration","hasMovedDuringClick","abs","y","maxMoveDistance","maxClickDuration","firedEvent","button","log","AutoDisposeGroup","_isDisposed","_referenceCount","reference","ensureNotDisposed","dereference","child","children","THREE","Mesh","geometry","emptyGeometry","BufferGeometry","clear","BoundingBoxLOD","boundingBox","super","_activeLevel","_levels","isLOD","autoUpdate","_boundingBox","clone","type","setBoundingBox","copy","addLevel","object","distance","sort","visible","add","getCurrentLevel","update","camera","updateCurrentLevel","levels","camPos","bounds","updateVars","applyMatrix4","matrixWorld","cameraZoom","PerspectiveCamera","zoom","setFromMatrixPosition","distanceToCamera","distanceToPoint","findIndex","p","WebGLRendererStateHelper","renderer","_originalState","_renderer","setScissor","width","height","scissorData","getScissor","Vector4","setScissorTest","enabled","scissorTest","getScissorTest","setClearColor","alpha","clearColor","getClearColor","clearAlpha","getClearAlpha","setWebGLState","state","resetState","DefaultWebGLState","webGLState","buffers","depth","newTest","test","newMask","mask","setMask","setTest","setSize","size","getSize","localClippingEnabled","autoClear","autoClearDepth","setRenderTarget","renderTarget","getRenderTarget","reset","lastTest","lastMask","TimestampedContainer","_value","_lastAccessTime","Date","now","lastAccessTime","MemoryRequestCache","maxElementsInCache","removeCallback","defaultCleanupCount","_data","_maxElementsInCache","_defaultCleanupCount","max","_removeCallback","has","id","forceInsert","data","isFull","cleanCache","insert","remove","delete","count","allResults","Array","from","entries","right","i","entry","pop","resize","cacheSize","CLEANUP_COUNT_TO_CAPACITY_RATIO","values"],"sourceRoot":""}
|