@loaders.gl/tiles 3.3.0-alpha.1 → 3.3.0-alpha.10

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 (124) hide show
  1. package/dist/dist.min.js +1027 -1431
  2. package/dist/es5/bundle.js +0 -1
  3. package/dist/es5/bundle.js.map +1 -1
  4. package/dist/es5/constants.js +2 -1
  5. package/dist/es5/constants.js.map +1 -1
  6. package/dist/es5/index.js +26 -36
  7. package/dist/es5/index.js.map +1 -1
  8. package/dist/es5/tileset/helpers/3d-tiles-options.js +0 -1
  9. package/dist/es5/tileset/helpers/3d-tiles-options.js.map +1 -1
  10. package/dist/es5/tileset/helpers/bounding-volume.js +7 -26
  11. package/dist/es5/tileset/helpers/bounding-volume.js.map +1 -1
  12. package/dist/es5/tileset/helpers/frame-state.js +45 -50
  13. package/dist/es5/tileset/helpers/frame-state.js.map +1 -1
  14. package/dist/es5/tileset/helpers/i3s-lod.js +0 -13
  15. package/dist/es5/tileset/helpers/i3s-lod.js.map +1 -1
  16. package/dist/es5/tileset/helpers/tiles-3d-lod.js +7 -16
  17. package/dist/es5/tileset/helpers/tiles-3d-lod.js.map +1 -1
  18. package/dist/es5/tileset/helpers/transform-utils.js +2 -11
  19. package/dist/es5/tileset/helpers/transform-utils.js.map +1 -1
  20. package/dist/es5/tileset/helpers/zoom.js +6 -16
  21. package/dist/es5/tileset/helpers/zoom.js.map +1 -1
  22. package/dist/es5/tileset/tile-3d.js +111 -98
  23. package/dist/es5/tileset/tile-3d.js.map +1 -1
  24. package/dist/es5/tileset/tileset-3d.js +130 -196
  25. package/dist/es5/tileset/tileset-3d.js.map +1 -1
  26. package/dist/es5/tileset/tileset-cache.js +1 -14
  27. package/dist/es5/tileset/tileset-cache.js.map +1 -1
  28. package/dist/es5/tileset/traversers/{i3s-frame-counter.js → i3s-pending-tiles-register.js} +21 -16
  29. package/dist/es5/tileset/traversers/i3s-pending-tiles-register.js.map +1 -0
  30. package/dist/es5/tileset/traversers/i3s-tile-manager.js +33 -27
  31. package/dist/es5/tileset/traversers/i3s-tile-manager.js.map +1 -1
  32. package/dist/es5/tileset/traversers/i3s-tileset-traverser.js +10 -52
  33. package/dist/es5/tileset/traversers/i3s-tileset-traverser.js.map +1 -1
  34. package/dist/es5/tileset/traversers/tileset-3d-traverser.js +0 -22
  35. package/dist/es5/tileset/traversers/tileset-3d-traverser.js.map +1 -1
  36. package/dist/es5/tileset/traversers/tileset-traverser.js +55 -78
  37. package/dist/es5/tileset/traversers/tileset-traverser.js.map +1 -1
  38. package/dist/es5/types.js.map +1 -1
  39. package/dist/es5/utils/doubly-linked-list-node.js +3 -7
  40. package/dist/es5/utils/doubly-linked-list-node.js.map +1 -1
  41. package/dist/es5/utils/doubly-linked-list.js +9 -17
  42. package/dist/es5/utils/doubly-linked-list.js.map +1 -1
  43. package/dist/es5/utils/managed-array.js +29 -30
  44. package/dist/es5/utils/managed-array.js.map +1 -1
  45. package/dist/esm/bundle.js +1 -1
  46. package/dist/esm/bundle.js.map +1 -1
  47. package/dist/esm/constants.js +3 -0
  48. package/dist/esm/constants.js.map +1 -1
  49. package/dist/esm/index.js.map +1 -1
  50. package/dist/esm/tileset/helpers/3d-tiles-options.js.map +1 -1
  51. package/dist/esm/tileset/helpers/bounding-volume.js +4 -10
  52. package/dist/esm/tileset/helpers/bounding-volume.js.map +1 -1
  53. package/dist/esm/tileset/helpers/frame-state.js +36 -20
  54. package/dist/esm/tileset/helpers/frame-state.js.map +1 -1
  55. package/dist/esm/tileset/helpers/i3s-lod.js +4 -4
  56. package/dist/esm/tileset/helpers/i3s-lod.js.map +1 -1
  57. package/dist/esm/tileset/helpers/tiles-3d-lod.js +11 -8
  58. package/dist/esm/tileset/helpers/tiles-3d-lod.js.map +1 -1
  59. package/dist/esm/tileset/helpers/transform-utils.js +1 -3
  60. package/dist/esm/tileset/helpers/transform-utils.js.map +1 -1
  61. package/dist/esm/tileset/helpers/zoom.js +3 -2
  62. package/dist/esm/tileset/helpers/zoom.js.map +1 -1
  63. package/dist/esm/tileset/tile-3d.js +47 -108
  64. package/dist/esm/tileset/tile-3d.js.map +1 -1
  65. package/dist/esm/tileset/tileset-3d.js +70 -163
  66. package/dist/esm/tileset/tileset-3d.js.map +1 -1
  67. package/dist/esm/tileset/tileset-cache.js +2 -18
  68. package/dist/esm/tileset/tileset-cache.js.map +1 -1
  69. package/dist/esm/tileset/traversers/i3s-pending-tiles-register.js +28 -0
  70. package/dist/esm/tileset/traversers/i3s-pending-tiles-register.js.map +1 -0
  71. package/dist/esm/tileset/traversers/i3s-tile-manager.js +34 -15
  72. package/dist/esm/tileset/traversers/i3s-tile-manager.js.map +1 -1
  73. package/dist/esm/tileset/traversers/i3s-tileset-traverser.js +8 -22
  74. package/dist/esm/tileset/traversers/i3s-tileset-traverser.js.map +1 -1
  75. package/dist/esm/tileset/traversers/tileset-3d-traverser.js +2 -9
  76. package/dist/esm/tileset/traversers/tileset-3d-traverser.js.map +1 -1
  77. package/dist/esm/tileset/traversers/tileset-traverser.js +20 -59
  78. package/dist/esm/tileset/traversers/tileset-traverser.js.map +1 -1
  79. package/dist/esm/types.js.map +1 -1
  80. package/dist/esm/utils/doubly-linked-list-node.js +1 -4
  81. package/dist/esm/utils/doubly-linked-list-node.js.map +1 -1
  82. package/dist/esm/utils/doubly-linked-list.js +2 -11
  83. package/dist/esm/utils/doubly-linked-list.js.map +1 -1
  84. package/dist/esm/utils/managed-array.js +4 -22
  85. package/dist/esm/utils/managed-array.js.map +1 -1
  86. package/dist/tileset/helpers/frame-state.d.ts +5 -8
  87. package/dist/tileset/helpers/frame-state.d.ts.map +1 -1
  88. package/dist/tileset/helpers/frame-state.js +27 -12
  89. package/dist/tileset/helpers/i3s-lod.d.ts.map +1 -1
  90. package/dist/tileset/tile-3d.d.ts +15 -4
  91. package/dist/tileset/tile-3d.d.ts.map +1 -1
  92. package/dist/tileset/tile-3d.js +15 -2
  93. package/dist/tileset/tileset-3d.d.ts +17 -4
  94. package/dist/tileset/tileset-3d.d.ts.map +1 -1
  95. package/dist/tileset/tileset-3d.js +47 -10
  96. package/dist/tileset/traversers/{i3s-frame-counter.d.ts → i3s-pending-tiles-register.d.ts} +7 -4
  97. package/dist/tileset/traversers/i3s-pending-tiles-register.d.ts.map +1 -0
  98. package/dist/tileset/traversers/{i3s-frame-counter.js → i3s-pending-tiles-register.js} +17 -8
  99. package/dist/tileset/traversers/i3s-tile-manager.d.ts +19 -1
  100. package/dist/tileset/traversers/i3s-tile-manager.d.ts.map +1 -1
  101. package/dist/tileset/traversers/i3s-tile-manager.js +32 -12
  102. package/dist/tileset/traversers/i3s-tileset-traverser.d.ts +1 -1
  103. package/dist/tileset/traversers/i3s-tileset-traverser.d.ts.map +1 -1
  104. package/dist/tileset/traversers/i3s-tileset-traverser.js +9 -9
  105. package/dist/tileset/traversers/tileset-traverser.d.ts +3 -3
  106. package/dist/tileset/traversers/tileset-traverser.d.ts.map +1 -1
  107. package/dist/tileset/traversers/tileset-traverser.js +4 -4
  108. package/dist/types.d.ts +30 -1
  109. package/dist/types.d.ts.map +1 -1
  110. package/package.json +4 -4
  111. package/src/tileset/helpers/frame-state.ts +47 -19
  112. package/src/tileset/helpers/i3s-lod.ts +3 -1
  113. package/src/tileset/tile-3d.ts +16 -2
  114. package/src/tileset/tileset-3d.ts +55 -16
  115. package/src/tileset/traversers/i3s-pending-tiles-register.ts +44 -0
  116. package/src/tileset/traversers/i3s-tile-manager.ts +47 -11
  117. package/src/tileset/traversers/i3s-tileset-traverser.ts +5 -5
  118. package/src/tileset/traversers/tileset-traverser.ts +2 -2
  119. package/src/types.ts +32 -0
  120. package/dist/es5/tileset/traversers/i3s-frame-counter.js.map +0 -1
  121. package/dist/esm/tileset/traversers/i3s-frame-counter.js +0 -23
  122. package/dist/esm/tileset/traversers/i3s-frame-counter.js.map +0 -1
  123. package/dist/tileset/traversers/i3s-frame-counter.d.ts.map +0 -1
  124. package/src/tileset/traversers/i3s-frame-counter.ts +0 -35
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/utils/doubly-linked-list.ts"],"names":["DoublyLinkedList","_length","item","node","DoublyLinkedListNode","tail","next","head","previous","nextNode","remove","_insert","oldNodeNext"],"mappings":";;;;;;;;;;;;;;;AAGA;;IAOqBA,gB;;;gDACiB,I;gDACA,I;mDAC1B,C;;;;;SAEV,eAAa;AACX,aAAO,KAAKC,OAAZ;AACD;;;WAOD,aAAIC,IAAJ,EAAU;AACR,UAAMC,IAAI,GAAG,IAAIC,6BAAJ,CAAyBF,IAAzB,EAA+B,KAAKG,IAApC,EAA0C,IAA1C,CAAb;;AAEA,UAAI,KAAKA,IAAT,EAAe;AACb,aAAKA,IAAL,CAAUC,IAAV,GAAiBH,IAAjB;AACA,aAAKE,IAAL,GAAYF,IAAZ;AACD,OAHD,MAGO;AACL,aAAKI,IAAL,GAAYJ,IAAZ;AACA,aAAKE,IAAL,GAAYF,IAAZ;AACD;;AAED,QAAE,KAAKF,OAAP;AAEA,aAAOE,IAAP;AACD;;;WAMD,gBAAOA,IAAP,EAAa;AACX,UAAI,CAACA,IAAL,EAAW;AACT;AACD;;AAED,UAAIA,IAAI,CAACK,QAAL,IAAiBL,IAAI,CAACG,IAA1B,EAAgC;AAC9BH,QAAAA,IAAI,CAACK,QAAL,CAAcF,IAAd,GAAqBH,IAAI,CAACG,IAA1B;AACAH,QAAAA,IAAI,CAACG,IAAL,CAAUE,QAAV,GAAqBL,IAAI,CAACK,QAA1B;AACD,OAHD,MAGO,IAAIL,IAAI,CAACK,QAAT,EAAmB;AAExBL,QAAAA,IAAI,CAACK,QAAL,CAAcF,IAAd,GAAqB,IAArB;AACA,aAAKD,IAAL,GAAYF,IAAI,CAACK,QAAjB;AACD,OAJM,MAIA,IAAIL,IAAI,CAACG,IAAT,EAAe;AAEpBH,QAAAA,IAAI,CAACG,IAAL,CAAUE,QAAV,GAAqB,IAArB;AACA,aAAKD,IAAL,GAAYJ,IAAI,CAACG,IAAjB;AACD,OAJM,MAIA;AAEL,aAAKC,IAAL,GAAY,IAAZ;AACA,aAAKF,IAAL,GAAY,IAAZ;AACD;;AAEDF,MAAAA,IAAI,CAACG,IAAL,GAAY,IAAZ;AACAH,MAAAA,IAAI,CAACK,QAAL,GAAgB,IAAhB;AAEA,QAAE,KAAKP,OAAP;AACD;;;WAOD,gBAAOE,IAAP,EAAaM,QAAb,EAAuB;AACrB,UAAIN,IAAI,KAAKM,QAAb,EAAuB;AACrB;AACD;;AAGD,WAAKC,MAAL,CAAYD,QAAZ;;AACA,WAAKE,OAAL,CAAaR,IAAb,EAAmBM,QAAnB;AACD;;;WAED,iBAAQN,IAAR,EAAcM,QAAd,EAAwB;AACtB,UAAMG,WAAW,GAAGT,IAAI,CAACG,IAAzB;AACAH,MAAAA,IAAI,CAACG,IAAL,GAAYG,QAAZ;;AAGA,UAAI,KAAKJ,IAAL,KAAcF,IAAlB,EAAwB;AACtB,aAAKE,IAAL,GAAYI,QAAZ;AACD,OAFD,MAEO;AACLG,QAAAA,WAAW,CAACJ,QAAZ,GAAuBC,QAAvB;AACD;;AAEDA,MAAAA,QAAQ,CAACH,IAAT,GAAgBM,WAAhB;AACAH,MAAAA,QAAQ,CAACD,QAAT,GAAoBL,IAApB;AAEA,QAAE,KAAKF,OAAP;AACD","sourcesContent":["// This file is derived from the Cesium code base under Apache 2 license\n// See LICENSE.md and https://github.com/AnalyticalGraphicsInc/cesium/blob/master/LICENSE.md\n\nimport DoublyLinkedListNode from '../utils/doubly-linked-list-node';\n\n/**\n * Doubly linked list\n *\n * @private\n */\nexport default class DoublyLinkedList {\n head: DoublyLinkedListNode | null = null;\n tail: DoublyLinkedListNode | null = null;\n _length = 0;\n\n get length() {\n return this._length;\n }\n\n /**\n * Adds the item to the end of the list\n * @param {*} [item]\n * @return {DoublyLinkedListNode}\n */\n add(item) {\n const node = new DoublyLinkedListNode(item, this.tail, null);\n\n if (this.tail) {\n this.tail.next = node;\n this.tail = node;\n } else {\n this.head = node;\n this.tail = node;\n }\n\n ++this._length;\n\n return node;\n }\n\n /**\n * Removes the given node from the list\n * @param {DoublyLinkedListNode} node\n */\n remove(node) {\n if (!node) {\n return;\n }\n\n if (node.previous && node.next) {\n node.previous.next = node.next;\n node.next.previous = node.previous;\n } else if (node.previous) {\n // Remove last node\n node.previous.next = null;\n this.tail = node.previous;\n } else if (node.next) {\n // Remove first node\n node.next.previous = null;\n this.head = node.next;\n } else {\n // Remove last node in the linked list\n this.head = null;\n this.tail = null;\n }\n\n node.next = null;\n node.previous = null;\n\n --this._length;\n }\n\n /**\n * Moves nextNode after node\n * @param {DoublyLinkedListNode} node\n * @param {DoublyLinkedListNode} nextNode\n */\n splice(node, nextNode) {\n if (node === nextNode) {\n return;\n }\n\n // Remove nextNode, then insert after node\n this.remove(nextNode);\n this._insert(node, nextNode);\n }\n\n _insert(node, nextNode) {\n const oldNodeNext = node.next;\n node.next = nextNode;\n\n // nextNode is the new tail\n if (this.tail === node) {\n this.tail = nextNode;\n } else {\n oldNodeNext.previous = nextNode;\n }\n\n nextNode.next = oldNodeNext;\n nextNode.previous = node;\n\n ++this._length;\n }\n}\n"],"file":"doubly-linked-list.js"}
1
+ {"version":3,"file":"doubly-linked-list.js","names":["DoublyLinkedList","_length","item","node","DoublyLinkedListNode","tail","next","head","previous","nextNode","remove","_insert","oldNodeNext"],"sources":["../../../src/utils/doubly-linked-list.ts"],"sourcesContent":["// This file is derived from the Cesium code base under Apache 2 license\n// See LICENSE.md and https://github.com/AnalyticalGraphicsInc/cesium/blob/master/LICENSE.md\n\nimport DoublyLinkedListNode from '../utils/doubly-linked-list-node';\n\n/**\n * Doubly linked list\n *\n * @private\n */\nexport default class DoublyLinkedList {\n head: DoublyLinkedListNode | null = null;\n tail: DoublyLinkedListNode | null = null;\n _length = 0;\n\n get length() {\n return this._length;\n }\n\n /**\n * Adds the item to the end of the list\n * @param {*} [item]\n * @return {DoublyLinkedListNode}\n */\n add(item) {\n const node = new DoublyLinkedListNode(item, this.tail, null);\n\n if (this.tail) {\n this.tail.next = node;\n this.tail = node;\n } else {\n this.head = node;\n this.tail = node;\n }\n\n ++this._length;\n\n return node;\n }\n\n /**\n * Removes the given node from the list\n * @param {DoublyLinkedListNode} node\n */\n remove(node) {\n if (!node) {\n return;\n }\n\n if (node.previous && node.next) {\n node.previous.next = node.next;\n node.next.previous = node.previous;\n } else if (node.previous) {\n // Remove last node\n node.previous.next = null;\n this.tail = node.previous;\n } else if (node.next) {\n // Remove first node\n node.next.previous = null;\n this.head = node.next;\n } else {\n // Remove last node in the linked list\n this.head = null;\n this.tail = null;\n }\n\n node.next = null;\n node.previous = null;\n\n --this._length;\n }\n\n /**\n * Moves nextNode after node\n * @param {DoublyLinkedListNode} node\n * @param {DoublyLinkedListNode} nextNode\n */\n splice(node, nextNode) {\n if (node === nextNode) {\n return;\n }\n\n // Remove nextNode, then insert after node\n this.remove(nextNode);\n this._insert(node, nextNode);\n }\n\n _insert(node, nextNode) {\n const oldNodeNext = node.next;\n node.next = nextNode;\n\n // nextNode is the new tail\n if (this.tail === node) {\n this.tail = nextNode;\n } else {\n oldNodeNext.previous = nextNode;\n }\n\n nextNode.next = oldNodeNext;\n nextNode.previous = node;\n\n ++this._length;\n }\n}\n"],"mappings":";;;;;;;;;;AAGA;AAAoE,IAO/CA,gBAAgB;EAAA;IAAA;IAAA,4CACC,IAAI;IAAA,4CACJ,IAAI;IAAA,+CAC9B,CAAC;EAAA;EAAA;IAAA;IAAA,KAEX,eAAa;MACX,OAAO,IAAI,CAACC,OAAO;IACrB;;EAAC;IAAA;IAAA;IAOD,aAAIC,IAAI,EAAE;MACR,IAAMC,IAAI,GAAG,IAAIC,6BAAoB,CAACF,IAAI,EAAE,IAAI,CAACG,IAAI,EAAE,IAAI,CAAC;MAE5D,IAAI,IAAI,CAACA,IAAI,EAAE;QACb,IAAI,CAACA,IAAI,CAACC,IAAI,GAAGH,IAAI;QACrB,IAAI,CAACE,IAAI,GAAGF,IAAI;MAClB,CAAC,MAAM;QACL,IAAI,CAACI,IAAI,GAAGJ,IAAI;QAChB,IAAI,CAACE,IAAI,GAAGF,IAAI;MAClB;MAEA,EAAE,IAAI,CAACF,OAAO;MAEd,OAAOE,IAAI;IACb;;EAAC;IAAA;IAAA;IAMD,gBAAOA,IAAI,EAAE;MACX,IAAI,CAACA,IAAI,EAAE;QACT;MACF;MAEA,IAAIA,IAAI,CAACK,QAAQ,IAAIL,IAAI,CAACG,IAAI,EAAE;QAC9BH,IAAI,CAACK,QAAQ,CAACF,IAAI,GAAGH,IAAI,CAACG,IAAI;QAC9BH,IAAI,CAACG,IAAI,CAACE,QAAQ,GAAGL,IAAI,CAACK,QAAQ;MACpC,CAAC,MAAM,IAAIL,IAAI,CAACK,QAAQ,EAAE;QAExBL,IAAI,CAACK,QAAQ,CAACF,IAAI,GAAG,IAAI;QACzB,IAAI,CAACD,IAAI,GAAGF,IAAI,CAACK,QAAQ;MAC3B,CAAC,MAAM,IAAIL,IAAI,CAACG,IAAI,EAAE;QAEpBH,IAAI,CAACG,IAAI,CAACE,QAAQ,GAAG,IAAI;QACzB,IAAI,CAACD,IAAI,GAAGJ,IAAI,CAACG,IAAI;MACvB,CAAC,MAAM;QAEL,IAAI,CAACC,IAAI,GAAG,IAAI;QAChB,IAAI,CAACF,IAAI,GAAG,IAAI;MAClB;MAEAF,IAAI,CAACG,IAAI,GAAG,IAAI;MAChBH,IAAI,CAACK,QAAQ,GAAG,IAAI;MAEpB,EAAE,IAAI,CAACP,OAAO;IAChB;;EAAC;IAAA;IAAA;IAOD,gBAAOE,IAAI,EAAEM,QAAQ,EAAE;MACrB,IAAIN,IAAI,KAAKM,QAAQ,EAAE;QACrB;MACF;;MAGA,IAAI,CAACC,MAAM,CAACD,QAAQ,CAAC;MACrB,IAAI,CAACE,OAAO,CAACR,IAAI,EAAEM,QAAQ,CAAC;IAC9B;EAAC;IAAA;IAAA,OAED,iBAAQN,IAAI,EAAEM,QAAQ,EAAE;MACtB,IAAMG,WAAW,GAAGT,IAAI,CAACG,IAAI;MAC7BH,IAAI,CAACG,IAAI,GAAGG,QAAQ;;MAGpB,IAAI,IAAI,CAACJ,IAAI,KAAKF,IAAI,EAAE;QACtB,IAAI,CAACE,IAAI,GAAGI,QAAQ;MACtB,CAAC,MAAM;QACLG,WAAW,CAACJ,QAAQ,GAAGC,QAAQ;MACjC;MAEAA,QAAQ,CAACH,IAAI,GAAGM,WAAW;MAC3BH,QAAQ,CAACD,QAAQ,GAAGL,IAAI;MAExB,EAAE,IAAI,CAACF,OAAO;IAChB;EAAC;EAAA;AAAA;AAAA"}
@@ -1,20 +1,14 @@
1
1
  "use strict";
2
2
 
3
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
-
5
4
  Object.defineProperty(exports, "__esModule", {
6
5
  value: true
7
6
  });
8
7
  exports.default = void 0;
9
-
10
8
  var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
11
-
12
9
  var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
13
-
14
10
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
15
-
16
11
  var _loaderUtils = require("@loaders.gl/loader-utils");
17
-
18
12
  var ManagedArray = function () {
19
13
  function ManagedArray() {
20
14
  var length = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;
@@ -28,103 +22,109 @@ var ManagedArray = function () {
28
22
 
29
23
  (0, _createClass2.default)(ManagedArray, [{
30
24
  key: "length",
31
- get: function get() {
25
+ get:
26
+ function get() {
32
27
  return this._length;
33
28
  },
34
29
  set: function set(length) {
35
30
  this._length = length;
36
-
37
31
  if (length > this._array.length) {
38
32
  this._array.length = length;
39
33
  }
40
34
  }
35
+
41
36
  }, {
42
37
  key: "values",
43
- get: function get() {
38
+ get:
39
+ function get() {
44
40
  return this._array;
45
41
  }
42
+
46
43
  }, {
47
44
  key: "get",
48
- value: function get(index) {
45
+ value:
46
+ function get(index) {
49
47
  (0, _loaderUtils.assert)(index < this._array.length);
50
48
  return this._array[index];
51
49
  }
50
+
52
51
  }, {
53
52
  key: "set",
54
- value: function set(index, element) {
53
+ value:
54
+ function set(index, element) {
55
55
  (0, _loaderUtils.assert)(index >= 0);
56
-
57
56
  if (index >= this.length) {
58
57
  this.length = index + 1;
59
58
  }
60
-
61
59
  if (this._map.has(this._array[index])) {
62
60
  this._map.delete(this._array[index]);
63
61
  }
64
-
65
62
  this._array[index] = element;
66
-
67
63
  this._map.set(element, index);
68
64
  }
69
65
  }, {
70
66
  key: "delete",
71
67
  value: function _delete(element) {
72
68
  var index = this._map.get(element);
73
-
74
69
  if (index >= 0) {
75
70
  this._array.splice(index, 1);
76
-
77
71
  this._map.delete(element);
78
-
79
72
  this.length--;
80
73
  }
81
74
  }
75
+
82
76
  }, {
83
77
  key: "peek",
84
- value: function peek() {
78
+ value:
79
+ function peek() {
85
80
  return this._array[this._length - 1];
86
81
  }
82
+
87
83
  }, {
88
84
  key: "push",
89
- value: function push(element) {
85
+ value:
86
+ function push(element) {
90
87
  if (!this._map.has(element)) {
91
88
  var index = this.length++;
92
89
  this._array[index] = element;
93
-
94
90
  this._map.set(element, index);
95
91
  }
96
92
  }
93
+
97
94
  }, {
98
95
  key: "pop",
99
- value: function pop() {
96
+ value:
97
+ function pop() {
100
98
  var element = this._array[--this.length];
101
-
102
99
  this._map.delete(element);
103
-
104
100
  return element;
105
101
  }
102
+
106
103
  }, {
107
104
  key: "reserve",
108
- value: function reserve(length) {
105
+ value:
106
+ function reserve(length) {
109
107
  (0, _loaderUtils.assert)(length >= 0);
110
-
111
108
  if (length > this._array.length) {
112
109
  this._array.length = length;
113
110
  }
114
111
  }
112
+
115
113
  }, {
116
114
  key: "resize",
117
- value: function resize(length) {
115
+ value:
116
+ function resize(length) {
118
117
  (0, _loaderUtils.assert)(length >= 0);
119
118
  this.length = length;
120
119
  }
120
+
121
121
  }, {
122
122
  key: "trim",
123
- value: function trim(length) {
123
+ value:
124
+ function trim(length) {
124
125
  if (length === null || length === undefined) {
125
126
  length = this.length;
126
127
  }
127
-
128
128
  this._array.length = length;
129
129
  }
130
130
  }, {
@@ -142,6 +142,5 @@ var ManagedArray = function () {
142
142
  }]);
143
143
  return ManagedArray;
144
144
  }();
145
-
146
145
  exports.default = ManagedArray;
147
146
  //# sourceMappingURL=managed-array.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/utils/managed-array.ts"],"names":["ManagedArray","length","Map","_array","Array","_length","index","element","_map","has","delete","set","get","splice","undefined","target"],"mappings":"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","sourcesContent":["// This file is derived from the Cesium code base under Apache 2 license\n// See LICENSE.md and https://github.com/AnalyticalGraphicsInc/cesium/blob/master/LICENSE.md\n\nimport {assert} from '@loaders.gl/loader-utils';\n\n/**\n * A wrapper around arrays so that the internal length of the array can be manually managed.\n *\n * @alias ManagedArray\n * @constructor\n * @private\n *\n * @param {Number} [length=0] The initial length of the array.\n */\nexport default class ManagedArray {\n _map = new Map();\n _array: any[];\n _length: number;\n\n constructor(length = 0) {\n this._array = new Array(length);\n this._length = length;\n }\n\n /**\n * Gets or sets the length of the array.\n * If the set length is greater than the length of the internal array, the internal array is resized.\n *\n * @memberof ManagedArray.prototype\n * @type Number\n */\n get length() {\n return this._length;\n }\n\n set length(length) {\n this._length = length;\n if (length > this._array.length) {\n this._array.length = length;\n }\n }\n\n /**\n * Gets the internal array.\n *\n * @memberof ManagedArray.prototype\n * @type Array\n * @readonly\n */\n get values() {\n return this._array;\n }\n\n /**\n * Gets the element at an index.\n *\n * @param {Number} index The index to get.\n */\n get(index) {\n assert(index < this._array.length);\n return this._array[index];\n }\n\n /**\n * Sets the element at an index. Resizes the array if index is greater than the length of the array.\n *\n * @param {Number} index The index to set.\n * @param {*} element The element to set at index.\n */\n set(index, element) {\n assert(index >= 0);\n\n if (index >= this.length) {\n this.length = index + 1;\n }\n\n if (this._map.has(this._array[index])) {\n this._map.delete(this._array[index]);\n }\n\n this._array[index] = element;\n this._map.set(element, index);\n }\n\n delete(element) {\n const index = this._map.get(element);\n if (index >= 0) {\n this._array.splice(index, 1);\n this._map.delete(element);\n this.length--;\n }\n }\n\n /**\n * Returns the last element in the array without modifying the array.\n *\n * @returns {*} The last element in the array.\n */\n peek() {\n return this._array[this._length - 1];\n }\n\n /**\n * Push an element into the array.\n *\n * @param {*} element The element to push.\n */\n push(element) {\n if (!this._map.has(element)) {\n const index = this.length++;\n this._array[index] = element;\n this._map.set(element, index);\n }\n }\n\n /**\n * Pop an element from the array.\n *\n * @returns {*} The last element in the array.\n */\n pop() {\n const element = this._array[--this.length];\n this._map.delete(element);\n return element;\n }\n\n /**\n * Resize the internal array if length > _array.length.\n *\n * @param {Number} length The length.\n */\n reserve(length) {\n assert(length >= 0);\n\n if (length > this._array.length) {\n this._array.length = length;\n }\n }\n\n /**\n * Resize the array.\n *\n * @param {Number} length The length.\n */\n resize(length) {\n assert(length >= 0);\n\n this.length = length;\n }\n\n /**\n * Trim the internal array to the specified length. Defaults to the current length.\n *\n * @param {Number} [length] The length.\n */\n trim(length) {\n if (length === null || length === undefined) {\n length = this.length;\n }\n this._array.length = length;\n }\n\n reset() {\n this._array = [];\n this._map = new Map();\n this._length = 0;\n }\n\n find(target) {\n return this._map.has(target);\n }\n}\n"],"file":"managed-array.js"}
1
+ {"version":3,"file":"managed-array.js","names":["ManagedArray","length","Map","_array","Array","_length","index","assert","element","_map","has","delete","set","get","splice","undefined","target"],"sources":["../../../src/utils/managed-array.ts"],"sourcesContent":["// This file is derived from the Cesium code base under Apache 2 license\n// See LICENSE.md and https://github.com/AnalyticalGraphicsInc/cesium/blob/master/LICENSE.md\n\nimport {assert} from '@loaders.gl/loader-utils';\n\n/**\n * A wrapper around arrays so that the internal length of the array can be manually managed.\n *\n * @alias ManagedArray\n * @constructor\n * @private\n *\n * @param {Number} [length=0] The initial length of the array.\n */\nexport default class ManagedArray {\n _map = new Map();\n _array: any[];\n _length: number;\n\n constructor(length = 0) {\n this._array = new Array(length);\n this._length = length;\n }\n\n /**\n * Gets or sets the length of the array.\n * If the set length is greater than the length of the internal array, the internal array is resized.\n *\n * @memberof ManagedArray.prototype\n * @type Number\n */\n get length() {\n return this._length;\n }\n\n set length(length) {\n this._length = length;\n if (length > this._array.length) {\n this._array.length = length;\n }\n }\n\n /**\n * Gets the internal array.\n *\n * @memberof ManagedArray.prototype\n * @type Array\n * @readonly\n */\n get values() {\n return this._array;\n }\n\n /**\n * Gets the element at an index.\n *\n * @param {Number} index The index to get.\n */\n get(index) {\n assert(index < this._array.length);\n return this._array[index];\n }\n\n /**\n * Sets the element at an index. Resizes the array if index is greater than the length of the array.\n *\n * @param {Number} index The index to set.\n * @param {*} element The element to set at index.\n */\n set(index, element) {\n assert(index >= 0);\n\n if (index >= this.length) {\n this.length = index + 1;\n }\n\n if (this._map.has(this._array[index])) {\n this._map.delete(this._array[index]);\n }\n\n this._array[index] = element;\n this._map.set(element, index);\n }\n\n delete(element) {\n const index = this._map.get(element);\n if (index >= 0) {\n this._array.splice(index, 1);\n this._map.delete(element);\n this.length--;\n }\n }\n\n /**\n * Returns the last element in the array without modifying the array.\n *\n * @returns {*} The last element in the array.\n */\n peek() {\n return this._array[this._length - 1];\n }\n\n /**\n * Push an element into the array.\n *\n * @param {*} element The element to push.\n */\n push(element) {\n if (!this._map.has(element)) {\n const index = this.length++;\n this._array[index] = element;\n this._map.set(element, index);\n }\n }\n\n /**\n * Pop an element from the array.\n *\n * @returns {*} The last element in the array.\n */\n pop() {\n const element = this._array[--this.length];\n this._map.delete(element);\n return element;\n }\n\n /**\n * Resize the internal array if length > _array.length.\n *\n * @param {Number} length The length.\n */\n reserve(length) {\n assert(length >= 0);\n\n if (length > this._array.length) {\n this._array.length = length;\n }\n }\n\n /**\n * Resize the array.\n *\n * @param {Number} length The length.\n */\n resize(length) {\n assert(length >= 0);\n\n this.length = length;\n }\n\n /**\n * Trim the internal array to the specified length. Defaults to the current length.\n *\n * @param {Number} [length] The length.\n */\n trim(length) {\n if (length === null || length === undefined) {\n length = this.length;\n }\n this._array.length = length;\n }\n\n reset() {\n this._array = [];\n this._map = new Map();\n this._length = 0;\n }\n\n find(target) {\n return this._map.has(target);\n }\n}\n"],"mappings":"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"}
@@ -1,5 +1,5 @@
1
- const moduleExports = require('./index');
2
1
 
2
+ const moduleExports = require('./index');
3
3
  globalThis.loaders = globalThis.loaders || {};
4
4
  module.exports = Object.assign(globalThis.loaders, moduleExports);
5
5
  //# sourceMappingURL=bundle.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/bundle.ts"],"names":["moduleExports","require","globalThis","loaders","module","exports","Object","assign"],"mappings":"AACA,MAAMA,aAAa,GAAGC,OAAO,CAAC,SAAD,CAA7B;;AACAC,UAAU,CAACC,OAAX,GAAqBD,UAAU,CAACC,OAAX,IAAsB,EAA3C;AACAC,MAAM,CAACC,OAAP,GAAiBC,MAAM,CAACC,MAAP,CAAcL,UAAU,CAACC,OAAzB,EAAkCH,aAAlC,CAAjB","sourcesContent":["// @ts-nocheck\nconst moduleExports = require('./index');\nglobalThis.loaders = globalThis.loaders || {};\nmodule.exports = Object.assign(globalThis.loaders, moduleExports);\n"],"file":"bundle.js"}
1
+ {"version":3,"file":"bundle.js","names":["moduleExports","require","globalThis","loaders","module","exports","Object","assign"],"sources":["../../src/bundle.ts"],"sourcesContent":["// @ts-nocheck\nconst moduleExports = require('./index');\nglobalThis.loaders = globalThis.loaders || {};\nmodule.exports = Object.assign(globalThis.loaders, moduleExports);\n"],"mappings":";AACA,MAAMA,aAAa,GAAGC,OAAO,CAAC,SAAS,CAAC;AACxCC,UAAU,CAACC,OAAO,GAAGD,UAAU,CAACC,OAAO,IAAI,CAAC,CAAC;AAC7CC,MAAM,CAACC,OAAO,GAAGC,MAAM,CAACC,MAAM,CAACL,UAAU,CAACC,OAAO,EAAEH,aAAa,CAAC"}
@@ -6,10 +6,12 @@ export const TILE_CONTENT_STATE = {
6
6
  EXPIRED: 4,
7
7
  FAILED: 5
8
8
  };
9
+
9
10
  export const TILE_REFINEMENT = {
10
11
  ADD: 1,
11
12
  REPLACE: 2
12
13
  };
14
+
13
15
  export const TILE_TYPE = {
14
16
  EMPTY: 'empty',
15
17
  SCENEGRAPH: 'scenegraph',
@@ -24,6 +26,7 @@ export const LOD_METRIC_TYPE = {
24
26
  GEOMETRIC_ERROR: 'geometricError',
25
27
  MAX_SCREEN_THRESHOLD: 'maxScreenThreshold'
26
28
  };
29
+
27
30
  export const TILE3D_OPTIMIZATION_HINT = {
28
31
  NOT_COMPUTED: -1,
29
32
  USE_OPTIMIZATION: 1,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/constants.ts"],"names":["TILE_CONTENT_STATE","UNLOADED","LOADING","PROCESSING","READY","EXPIRED","FAILED","TILE_REFINEMENT","ADD","REPLACE","TILE_TYPE","EMPTY","SCENEGRAPH","POINTCLOUD","MESH","TILESET_TYPE","I3S","TILES3D","LOD_METRIC_TYPE","GEOMETRIC_ERROR","MAX_SCREEN_THRESHOLD","TILE3D_OPTIMIZATION_HINT","NOT_COMPUTED","USE_OPTIMIZATION","SKIP_OPTIMIZATION"],"mappings":"AAAA,OAAO,MAAMA,kBAAkB,GAAG;AAChCC,EAAAA,QAAQ,EAAE,CADsB;AAEhCC,EAAAA,OAAO,EAAE,CAFuB;AAGhCC,EAAAA,UAAU,EAAE,CAHoB;AAIhCC,EAAAA,KAAK,EAAE,CAJyB;AAKhCC,EAAAA,OAAO,EAAE,CALuB;AAMhCC,EAAAA,MAAM,EAAE;AANwB,CAA3B;AASP,OAAO,MAAMC,eAAe,GAAG;AAC7BC,EAAAA,GAAG,EAAE,CADwB;AAE7BC,EAAAA,OAAO,EAAE;AAFoB,CAAxB;AAKP,OAAO,MAAMC,SAAS,GAAG;AACvBC,EAAAA,KAAK,EAAE,OADgB;AAEvBC,EAAAA,UAAU,EAAE,YAFW;AAGvBC,EAAAA,UAAU,EAAE,YAHW;AAIvBC,EAAAA,IAAI,EAAE;AAJiB,CAAlB;AAOP,OAAO,MAAMC,YAAY,GAAG;AAC1BC,EAAAA,GAAG,EAAE,KADqB;AAE1BC,EAAAA,OAAO,EAAE;AAFiB,CAArB;AAKP,OAAO,MAAMC,eAAe,GAAG;AAC7BC,EAAAA,eAAe,EAAE,gBADY;AAE7BC,EAAAA,oBAAoB,EAAE;AAFO,CAAxB;AAMP,OAAO,MAAMC,wBAAwB,GAAG;AACtCC,EAAAA,YAAY,EAAE,CAAC,CADuB;AAEtCC,EAAAA,gBAAgB,EAAE,CAFoB;AAGtCC,EAAAA,iBAAiB,EAAE;AAHmB,CAAjC","sourcesContent":["export const TILE_CONTENT_STATE = {\n UNLOADED: 0, // Has never been requested\n LOADING: 1, // Is waiting on a pending request\n PROCESSING: 2, // Request received. Contents are being processed for rendering. Depending on the content, it might make its own requests for external data.\n READY: 3, // Ready to render.\n EXPIRED: 4, // Is expired and will be unloaded once new content is loaded.\n FAILED: 5 // Request failed.\n};\n\nexport const TILE_REFINEMENT = {\n ADD: 1, // Render tile and, if screen space error exceeded, also refine to its children.\n REPLACE: 2 // Render tile or, if screen space error exceeded, refine to its descendants instead.\n};\n\nexport const TILE_TYPE = {\n EMPTY: 'empty',\n SCENEGRAPH: 'scenegraph',\n POINTCLOUD: 'pointcloud',\n MESH: 'mesh'\n};\n\nexport const TILESET_TYPE = {\n I3S: 'I3S',\n TILES3D: 'TILES3D'\n};\n\nexport const LOD_METRIC_TYPE = {\n GEOMETRIC_ERROR: 'geometricError',\n MAX_SCREEN_THRESHOLD: 'maxScreenThreshold'\n};\n\n// Cesium 3D Tiles Specific\nexport const TILE3D_OPTIMIZATION_HINT = {\n NOT_COMPUTED: -1,\n USE_OPTIMIZATION: 1,\n SKIP_OPTIMIZATION: 0\n};\n"],"file":"constants.js"}
1
+ {"version":3,"file":"constants.js","names":["TILE_CONTENT_STATE","UNLOADED","LOADING","PROCESSING","READY","EXPIRED","FAILED","TILE_REFINEMENT","ADD","REPLACE","TILE_TYPE","EMPTY","SCENEGRAPH","POINTCLOUD","MESH","TILESET_TYPE","I3S","TILES3D","LOD_METRIC_TYPE","GEOMETRIC_ERROR","MAX_SCREEN_THRESHOLD","TILE3D_OPTIMIZATION_HINT","NOT_COMPUTED","USE_OPTIMIZATION","SKIP_OPTIMIZATION"],"sources":["../../src/constants.ts"],"sourcesContent":["export const TILE_CONTENT_STATE = {\n UNLOADED: 0, // Has never been requested\n LOADING: 1, // Is waiting on a pending request\n PROCESSING: 2, // Request received. Contents are being processed for rendering. Depending on the content, it might make its own requests for external data.\n READY: 3, // Ready to render.\n EXPIRED: 4, // Is expired and will be unloaded once new content is loaded.\n FAILED: 5 // Request failed.\n};\n\nexport const TILE_REFINEMENT = {\n ADD: 1, // Render tile and, if screen space error exceeded, also refine to its children.\n REPLACE: 2 // Render tile or, if screen space error exceeded, refine to its descendants instead.\n};\n\nexport const TILE_TYPE = {\n EMPTY: 'empty',\n SCENEGRAPH: 'scenegraph',\n POINTCLOUD: 'pointcloud',\n MESH: 'mesh'\n};\n\nexport const TILESET_TYPE = {\n I3S: 'I3S',\n TILES3D: 'TILES3D'\n};\n\nexport const LOD_METRIC_TYPE = {\n GEOMETRIC_ERROR: 'geometricError',\n MAX_SCREEN_THRESHOLD: 'maxScreenThreshold'\n};\n\n// Cesium 3D Tiles Specific\nexport const TILE3D_OPTIMIZATION_HINT = {\n NOT_COMPUTED: -1,\n USE_OPTIMIZATION: 1,\n SKIP_OPTIMIZATION: 0\n};\n"],"mappings":"AAAA,OAAO,MAAMA,kBAAkB,GAAG;EAChCC,QAAQ,EAAE,CAAC;EACXC,OAAO,EAAE,CAAC;EACVC,UAAU,EAAE,CAAC;EACbC,KAAK,EAAE,CAAC;EACRC,OAAO,EAAE,CAAC;EACVC,MAAM,EAAE;AACV,CAAC;;AAED,OAAO,MAAMC,eAAe,GAAG;EAC7BC,GAAG,EAAE,CAAC;EACNC,OAAO,EAAE;AACX,CAAC;;AAED,OAAO,MAAMC,SAAS,GAAG;EACvBC,KAAK,EAAE,OAAO;EACdC,UAAU,EAAE,YAAY;EACxBC,UAAU,EAAE,YAAY;EACxBC,IAAI,EAAE;AACR,CAAC;AAED,OAAO,MAAMC,YAAY,GAAG;EAC1BC,GAAG,EAAE,KAAK;EACVC,OAAO,EAAE;AACX,CAAC;AAED,OAAO,MAAMC,eAAe,GAAG;EAC7BC,eAAe,EAAE,gBAAgB;EACjCC,oBAAoB,EAAE;AACxB,CAAC;;AAGD,OAAO,MAAMC,wBAAwB,GAAG;EACtCC,YAAY,EAAE,CAAC,CAAC;EAChBC,gBAAgB,EAAE,CAAC;EACnBC,iBAAiB,EAAE;AACrB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/index.ts"],"names":["default","Tileset3D","Tile3D","TilesetTraverser","TilesetCache","createBoundingVolume","calculateTransformProps","getFrameState","getLodStatus","TILE_CONTENT_STATE","TILE_REFINEMENT","TILE_TYPE","TILESET_TYPE","LOD_METRIC_TYPE"],"mappings":"AACA,SAAQA,OAAO,IAAIC,SAAnB,QAAmC,sBAAnC;AACA,SAAQD,OAAO,IAAIE,MAAnB,QAAgC,mBAAhC;AAEA,SAAQF,OAAO,IAAIG,gBAAnB,QAA0C,wCAA1C;AACA,SAAQH,OAAO,IAAII,YAAnB,QAAsC,yBAAtC;AAEA,SAAQC,oBAAR,QAAmC,mCAAnC;AACA,SAAQC,uBAAR,QAAsC,mCAAtC;AAEA,SAAQC,aAAR,QAA4B,+BAA5B;AACA,SAAQC,YAAR,QAA2B,2BAA3B;AAEA,SACEC,kBADF,EAEEC,eAFF,EAGEC,SAHF,EAIEC,YAJF,EAKEC,eALF,QAMO,aANP","sourcesContent":["export type {Tileset3DProps} from './tileset/tileset-3d';\nexport {default as Tileset3D} from './tileset/tileset-3d';\nexport {default as Tile3D} from './tileset/tile-3d';\n\nexport {default as TilesetTraverser} from './tileset/traversers/tileset-traverser';\nexport {default as TilesetCache} from './tileset/tileset-cache';\n\nexport {createBoundingVolume} from './tileset/helpers/bounding-volume';\nexport {calculateTransformProps} from './tileset/helpers/transform-utils';\n\nexport {getFrameState} from './tileset/helpers/frame-state';\nexport {getLodStatus} from './tileset/helpers/i3s-lod';\n\nexport {\n TILE_CONTENT_STATE,\n TILE_REFINEMENT,\n TILE_TYPE,\n TILESET_TYPE,\n LOD_METRIC_TYPE\n} from './constants';\n"],"file":"index.js"}
1
+ {"version":3,"file":"index.js","names":["default","Tileset3D","Tile3D","TilesetTraverser","TilesetCache","createBoundingVolume","calculateTransformProps","getFrameState","getLodStatus","TILE_CONTENT_STATE","TILE_REFINEMENT","TILE_TYPE","TILESET_TYPE","LOD_METRIC_TYPE"],"sources":["../../src/index.ts"],"sourcesContent":["export type {Tileset3DProps} from './tileset/tileset-3d';\nexport {default as Tileset3D} from './tileset/tileset-3d';\nexport {default as Tile3D} from './tileset/tile-3d';\n\nexport {default as TilesetTraverser} from './tileset/traversers/tileset-traverser';\nexport {default as TilesetCache} from './tileset/tileset-cache';\n\nexport {createBoundingVolume} from './tileset/helpers/bounding-volume';\nexport {calculateTransformProps} from './tileset/helpers/transform-utils';\n\nexport {getFrameState} from './tileset/helpers/frame-state';\nexport {getLodStatus} from './tileset/helpers/i3s-lod';\n\nexport {\n TILE_CONTENT_STATE,\n TILE_REFINEMENT,\n TILE_TYPE,\n TILESET_TYPE,\n LOD_METRIC_TYPE\n} from './constants';\n"],"mappings":"AACA,SAAQA,OAAO,IAAIC,SAAS,QAAO,sBAAsB;AACzD,SAAQD,OAAO,IAAIE,MAAM,QAAO,mBAAmB;AAEnD,SAAQF,OAAO,IAAIG,gBAAgB,QAAO,wCAAwC;AAClF,SAAQH,OAAO,IAAII,YAAY,QAAO,yBAAyB;AAE/D,SAAQC,oBAAoB,QAAO,mCAAmC;AACtE,SAAQC,uBAAuB,QAAO,mCAAmC;AAEzE,SAAQC,aAAa,QAAO,+BAA+B;AAC3D,SAAQC,YAAY,QAAO,2BAA2B;AAEtD,SACEC,kBAAkB,EAClBC,eAAe,EACfC,SAAS,EACTC,YAAY,EACZC,eAAe,QACV,aAAa"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/tileset/helpers/3d-tiles-options.ts"],"names":["get3dTilesOptions","tileset","assetGltfUpAxis","asset","gltfUpAxis"],"mappings":"AAAA,OAAO,SAASA,iBAAT,CAA2BC,OAA3B,EAAoC;AACzC,SAAO;AACLC,IAAAA,eAAe,EAAGD,OAAO,CAACE,KAAR,IAAiBF,OAAO,CAACE,KAAR,CAAcC,UAAhC,IAA+C;AAD3D,GAAP;AAGD","sourcesContent":["export function get3dTilesOptions(tileset) {\n return {\n assetGltfUpAxis: (tileset.asset && tileset.asset.gltfUpAxis) || 'Y'\n };\n}\n"],"file":"3d-tiles-options.js"}
1
+ {"version":3,"file":"3d-tiles-options.js","names":["get3dTilesOptions","tileset","assetGltfUpAxis","asset","gltfUpAxis"],"sources":["../../../../src/tileset/helpers/3d-tiles-options.ts"],"sourcesContent":["export function get3dTilesOptions(tileset) {\n return {\n assetGltfUpAxis: (tileset.asset && tileset.asset.gltfUpAxis) || 'Y'\n };\n}\n"],"mappings":"AAAA,OAAO,SAASA,iBAAiB,CAACC,OAAO,EAAE;EACzC,OAAO;IACLC,eAAe,EAAGD,OAAO,CAACE,KAAK,IAAIF,OAAO,CAACE,KAAK,CAACC,UAAU,IAAK;EAClE,CAAC;AACH"}
@@ -1,3 +1,5 @@
1
+
2
+
1
3
  import { Quaternion, Vector3, Matrix3, Matrix4, degrees } from '@math.gl/core';
2
4
  import { BoundingSphere, OrientedBoundingBox } from '@math.gl/culling';
3
5
  import { Ellipsoid } from '@math.gl/geospatial';
@@ -10,34 +12,31 @@ function defined(x) {
10
12
  const scratchScale = new Vector3();
11
13
  const scratchNorthWest = new Vector3();
12
14
  const scratchSouthEast = new Vector3();
15
+
13
16
  export function createBoundingVolume(boundingVolumeHeader, transform, result) {
14
17
  assert(boundingVolumeHeader, '3D Tile: boundingVolume must be defined');
15
18
 
16
19
  if (boundingVolumeHeader.box) {
17
20
  return createBox(boundingVolumeHeader.box, transform, result);
18
21
  }
19
-
20
22
  if (boundingVolumeHeader.region) {
21
23
  const [west, south, east, north, minHeight, maxHeight] = boundingVolumeHeader.region;
22
24
  const northWest = Ellipsoid.WGS84.cartographicToCartesian([degrees(west), degrees(north), minHeight], scratchNorthWest);
23
25
  const southEast = Ellipsoid.WGS84.cartographicToCartesian([degrees(east), degrees(south), maxHeight], scratchSouthEast);
24
26
  const centerInCartesian = new Vector3().addVectors(northWest, southEast).multiplyScalar(0.5);
25
27
  const radius = new Vector3().subVectors(northWest, southEast).len() / 2.0;
28
+
26
29
  return createSphere([centerInCartesian[0], centerInCartesian[1], centerInCartesian[2], radius], new Matrix4());
27
30
  }
28
-
29
31
  if (boundingVolumeHeader.sphere) {
30
32
  return createSphere(boundingVolumeHeader.sphere, transform, result);
31
33
  }
32
-
33
34
  throw new Error('3D Tile: boundingVolume must contain a sphere, region, or box');
34
35
  }
35
-
36
36
  function createBox(box, transform, result) {
37
37
  const center = new Vector3(box[0], box[1], box[2]);
38
38
  transform.transform(center, center);
39
39
  let origin = [];
40
-
41
40
  if (box.length === 10) {
42
41
  const halfSize = box.slice(3, 6);
43
42
  const quaternion = new Quaternion();
@@ -55,18 +54,15 @@ function createBox(box, transform, result) {
55
54
  } else {
56
55
  origin = [...box.slice(3, 6), ...box.slice(6, 9), ...box.slice(9, 12)];
57
56
  }
58
-
59
57
  const xAxis = transform.transformAsVector(origin.slice(0, 3));
60
58
  const yAxis = transform.transformAsVector(origin.slice(3, 6));
61
59
  const zAxis = transform.transformAsVector(origin.slice(6, 9));
62
60
  const halfAxes = new Matrix3([xAxis[0], xAxis[1], xAxis[2], yAxis[0], yAxis[1], yAxis[2], zAxis[0], zAxis[1], zAxis[2]]);
63
-
64
61
  if (defined(result)) {
65
62
  result.center = center;
66
63
  result.halfAxes = halfAxes;
67
64
  return result;
68
65
  }
69
-
70
66
  return new OrientedBoundingBox(center, halfAxes);
71
67
  }
72
68
 
@@ -76,13 +72,11 @@ function createSphere(sphere, transform, result) {
76
72
  const scale = transform.getScale(scratchScale);
77
73
  const uniformScale = Math.max(Math.max(scale[0], scale[1]), scale[2]);
78
74
  const radius = sphere[3] * uniformScale;
79
-
80
75
  if (defined(result)) {
81
76
  result.center = center;
82
77
  result.radius = radius;
83
78
  return result;
84
79
  }
85
-
86
80
  return new BoundingSphere(center, radius);
87
81
  }
88
82
  //# sourceMappingURL=bounding-volume.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/tileset/helpers/bounding-volume.ts"],"names":["Quaternion","Vector3","Matrix3","Matrix4","degrees","BoundingSphere","OrientedBoundingBox","Ellipsoid","assert","defined","x","undefined","scratchScale","scratchNorthWest","scratchSouthEast","createBoundingVolume","boundingVolumeHeader","transform","result","box","createBox","region","west","south","east","north","minHeight","maxHeight","northWest","WGS84","cartographicToCartesian","southEast","centerInCartesian","addVectors","multiplyScalar","radius","subVectors","len","createSphere","sphere","Error","center","origin","length","halfSize","slice","quaternion","fromArray","y","z","transformByQuaternion","scale","toArray","xAxis","transformAsVector","yAxis","zAxis","halfAxes","getScale","uniformScale","Math","max"],"mappings":"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","sourcesContent":["// This file is derived from the Cesium code base under Apache 2 license\n// See LICENSE.md and https://github.com/AnalyticalGraphicsInc/cesium/blob/master/LICENSE.md\n\n/* eslint-disable */\nimport {Quaternion, Vector3, Matrix3, Matrix4, degrees} from '@math.gl/core';\nimport {BoundingSphere, OrientedBoundingBox} from '@math.gl/culling';\nimport {Ellipsoid} from '@math.gl/geospatial';\nimport {assert} from '@loaders.gl/loader-utils';\n\n// const scratchProjectedBoundingSphere = new BoundingSphere();\n\nfunction defined(x) {\n return x !== undefined && x !== null;\n}\n\n// const scratchMatrix = new Matrix3();\nconst scratchScale = new Vector3();\nconst scratchNorthWest = new Vector3();\nconst scratchSouthEast = new Vector3();\n// const scratchRectangle = new Rectangle();\n// const scratchOrientedBoundingBox = new OrientedBoundingBox();\n// const scratchTransform = new Matrix4();\n\n/**\n * Create a bounding volume from the tile's bounding volume header.\n * @param {Object} boundingVolumeHeader The tile's bounding volume header.\n * @param {Matrix4} transform The transform to apply to the bounding volume.\n * @param [result] The object onto which to store the result.\n * @returns The modified result parameter or a new TileBoundingVolume instance if none was provided.\n */\nexport function createBoundingVolume(boundingVolumeHeader, transform, result) {\n assert(boundingVolumeHeader, '3D Tile: boundingVolume must be defined');\n\n // boundingVolume schema:\n // https://github.com/AnalyticalGraphicsInc/3d-tiles/blob/master/specification/schema/boundingVolume.schema.json\n if (boundingVolumeHeader.box) {\n return createBox(boundingVolumeHeader.box, transform, result);\n }\n if (boundingVolumeHeader.region) {\n // [west, south, east, north, minimum height, maximum height]\n // Latitudes and longitudes are in the WGS 84 datum as defined in EPSG 4979 and are in radians.\n // Heights are in meters above (or below) the WGS 84 ellipsoid.\n const [west, south, east, north, minHeight, maxHeight] = boundingVolumeHeader.region;\n\n const northWest = Ellipsoid.WGS84.cartographicToCartesian(\n [degrees(west), degrees(north), minHeight],\n scratchNorthWest\n );\n const southEast = Ellipsoid.WGS84.cartographicToCartesian(\n [degrees(east), degrees(south), maxHeight],\n scratchSouthEast\n );\n const centerInCartesian = new Vector3().addVectors(northWest, southEast).multiplyScalar(0.5);\n const radius = new Vector3().subVectors(northWest, southEast).len() / 2.0;\n\n // TODO improve region boundingVolume\n // for now, create a sphere as the boundingVolume instead of box\n return createSphere(\n [centerInCartesian[0], centerInCartesian[1], centerInCartesian[2], radius],\n new Matrix4()\n );\n }\n\n if (boundingVolumeHeader.sphere) {\n return createSphere(boundingVolumeHeader.sphere, transform, result);\n }\n\n throw new Error('3D Tile: boundingVolume must contain a sphere, region, or box');\n}\n\nfunction createBox(box, transform, result) {\n // https://math.gl/modules/culling/docs/api-reference/oriented-bounding-box\n // 1. A half-axes based representation.\n // box: An array of 12 numbers that define an oriented bounding box.\n // The first three elements define the x, y, and z values for the center of the box.\n // The next three elements (with indices 3, 4, and 5) define the x axis direction and half-length.\n // The next three elements (indices 6, 7, and 8) define the y axis direction and half-length.\n // The last three elements (indices 9, 10, and 11) define the z axis direction and half-length.\n // 2. A half-size-quaternion based representation.\n // box: An array of 10 numbers that define an oriented bounding box.\n // The first three elements define the x, y, and z values for the center of the box in a right-handed 3-axis (x, y, z) Cartesian coordinate system where the z-axis is up.\n // The next three elements (with indices 3, 4, and 5) define the halfSize.\n // The last four elements (indices 6, 7, 8 and 10) define the quaternion.\n const center = new Vector3(box[0], box[1], box[2]);\n transform.transform(center, center);\n let origin: number[] = [];\n if (box.length === 10) {\n const halfSize = box.slice(3, 6);\n const quaternion = new Quaternion();\n quaternion.fromArray(box, 6);\n const x = new Vector3([1, 0, 0]);\n const y = new Vector3([0, 1, 0]);\n const z = new Vector3([0, 0, 1]);\n x.transformByQuaternion(quaternion);\n x.scale(halfSize[0]);\n y.transformByQuaternion(quaternion);\n y.scale(halfSize[1]);\n z.transformByQuaternion(quaternion);\n z.scale(halfSize[2]);\n origin = [...x.toArray(), ...y.toArray(), ...z.toArray()];\n } else {\n origin = [...box.slice(3, 6), ...box.slice(6, 9), ...box.slice(9, 12)];\n }\n const xAxis = transform.transformAsVector(origin.slice(0, 3));\n const yAxis = transform.transformAsVector(origin.slice(3, 6));\n const zAxis = transform.transformAsVector(origin.slice(6, 9));\n const halfAxes = new Matrix3([\n xAxis[0],\n xAxis[1],\n xAxis[2],\n yAxis[0],\n yAxis[1],\n yAxis[2],\n zAxis[0],\n zAxis[1],\n zAxis[2]\n ]);\n\n if (defined(result)) {\n result.center = center;\n result.halfAxes = halfAxes;\n return result;\n }\n\n return new OrientedBoundingBox(center, halfAxes);\n}\n\n/*\nfunction createBoxFromTransformedRegion(region, transform, initialTransform, result) {\n const rectangle = Rectangle.unpack(region, 0, scratchRectangle);\n const minimumHeight = region[4];\n const maximumHeight = region[5];\n\n const orientedBoundingBox = OrientedBoundingBox.fromRectangle(\n rectangle,\n minimumHeight,\n maximumHeight,\n Ellipsoid.WGS84,\n scratchOrientedBoundingBox\n );\n const center = orientedBoundingBox.center;\n const halfAxes = orientedBoundingBox.halfAxes;\n\n // A region bounding volume is not transformed by the transform in the tileset JSON,\n // but may be transformed by additional transforms applied in Cesium.\n // This is why the transform is calculated as the difference between the initial transform and the current transform.\n transform = Matrix4.multiplyTransformation(\n transform,\n Matrix4.inverseTransformation(initialTransform, scratchTransform),\n scratchTransform\n );\n center = Matrix4.multiplyByPoint(transform, center, center);\n const rotationScale = Matrix4.getRotation(transform, scratchMatrix);\n halfAxes = Matrix3.multiply(rotationScale, halfAxes, halfAxes);\n\n if (defined(result) && result instanceof TileOrientedBoundingBox) {\n result.update(center, halfAxes);\n return result;\n }\n\n return new TileOrientedBoundingBox(center, halfAxes);\n}\n\nfunction createRegion(region, transform, initialTransform, result) {\n if (!Matrix4.equalsEpsilon(transform, initialTransform, CesiumMath.EPSILON8)) {\n return createBoxFromTransformedRegion(region, transform, initialTransform, result);\n }\n\n if (defined(result)) {\n return result;\n }\n\n const rectangleRegion = Rectangle.unpack(region, 0, scratchRectangle);\n\n return new TileBoundingRegion({\n rectangle: rectangleRegion,\n minimumHeight: region[4],\n maximumHeight: region[5]\n });\n}\n*/\n\nfunction createSphere(sphere, transform, result?) {\n // Find the transformed center\n const center = new Vector3(sphere[0], sphere[1], sphere[2]);\n transform.transform(center, center);\n const scale = transform.getScale(scratchScale);\n\n const uniformScale = Math.max(Math.max(scale[0], scale[1]), scale[2]);\n const radius = sphere[3] * uniformScale;\n\n if (defined(result)) {\n result.center = center;\n result.radius = radius;\n return result;\n }\n\n return new BoundingSphere(center, radius);\n}\n"],"file":"bounding-volume.js"}
1
+ {"version":3,"file":"bounding-volume.js","names":["Quaternion","Vector3","Matrix3","Matrix4","degrees","BoundingSphere","OrientedBoundingBox","Ellipsoid","assert","defined","x","undefined","scratchScale","scratchNorthWest","scratchSouthEast","createBoundingVolume","boundingVolumeHeader","transform","result","box","createBox","region","west","south","east","north","minHeight","maxHeight","northWest","WGS84","cartographicToCartesian","southEast","centerInCartesian","addVectors","multiplyScalar","radius","subVectors","len","createSphere","sphere","Error","center","origin","length","halfSize","slice","quaternion","fromArray","y","z","transformByQuaternion","scale","toArray","xAxis","transformAsVector","yAxis","zAxis","halfAxes","getScale","uniformScale","Math","max"],"sources":["../../../../src/tileset/helpers/bounding-volume.ts"],"sourcesContent":["// This file is derived from the Cesium code base under Apache 2 license\n// See LICENSE.md and https://github.com/AnalyticalGraphicsInc/cesium/blob/master/LICENSE.md\n\n/* eslint-disable */\nimport {Quaternion, Vector3, Matrix3, Matrix4, degrees} from '@math.gl/core';\nimport {BoundingSphere, OrientedBoundingBox} from '@math.gl/culling';\nimport {Ellipsoid} from '@math.gl/geospatial';\nimport {assert} from '@loaders.gl/loader-utils';\n\n// const scratchProjectedBoundingSphere = new BoundingSphere();\n\nfunction defined(x) {\n return x !== undefined && x !== null;\n}\n\n// const scratchMatrix = new Matrix3();\nconst scratchScale = new Vector3();\nconst scratchNorthWest = new Vector3();\nconst scratchSouthEast = new Vector3();\n// const scratchRectangle = new Rectangle();\n// const scratchOrientedBoundingBox = new OrientedBoundingBox();\n// const scratchTransform = new Matrix4();\n\n/**\n * Create a bounding volume from the tile's bounding volume header.\n * @param {Object} boundingVolumeHeader The tile's bounding volume header.\n * @param {Matrix4} transform The transform to apply to the bounding volume.\n * @param [result] The object onto which to store the result.\n * @returns The modified result parameter or a new TileBoundingVolume instance if none was provided.\n */\nexport function createBoundingVolume(boundingVolumeHeader, transform, result) {\n assert(boundingVolumeHeader, '3D Tile: boundingVolume must be defined');\n\n // boundingVolume schema:\n // https://github.com/AnalyticalGraphicsInc/3d-tiles/blob/master/specification/schema/boundingVolume.schema.json\n if (boundingVolumeHeader.box) {\n return createBox(boundingVolumeHeader.box, transform, result);\n }\n if (boundingVolumeHeader.region) {\n // [west, south, east, north, minimum height, maximum height]\n // Latitudes and longitudes are in the WGS 84 datum as defined in EPSG 4979 and are in radians.\n // Heights are in meters above (or below) the WGS 84 ellipsoid.\n const [west, south, east, north, minHeight, maxHeight] = boundingVolumeHeader.region;\n\n const northWest = Ellipsoid.WGS84.cartographicToCartesian(\n [degrees(west), degrees(north), minHeight],\n scratchNorthWest\n );\n const southEast = Ellipsoid.WGS84.cartographicToCartesian(\n [degrees(east), degrees(south), maxHeight],\n scratchSouthEast\n );\n const centerInCartesian = new Vector3().addVectors(northWest, southEast).multiplyScalar(0.5);\n const radius = new Vector3().subVectors(northWest, southEast).len() / 2.0;\n\n // TODO improve region boundingVolume\n // for now, create a sphere as the boundingVolume instead of box\n return createSphere(\n [centerInCartesian[0], centerInCartesian[1], centerInCartesian[2], radius],\n new Matrix4()\n );\n }\n\n if (boundingVolumeHeader.sphere) {\n return createSphere(boundingVolumeHeader.sphere, transform, result);\n }\n\n throw new Error('3D Tile: boundingVolume must contain a sphere, region, or box');\n}\n\nfunction createBox(box, transform, result) {\n // https://math.gl/modules/culling/docs/api-reference/oriented-bounding-box\n // 1. A half-axes based representation.\n // box: An array of 12 numbers that define an oriented bounding box.\n // The first three elements define the x, y, and z values for the center of the box.\n // The next three elements (with indices 3, 4, and 5) define the x axis direction and half-length.\n // The next three elements (indices 6, 7, and 8) define the y axis direction and half-length.\n // The last three elements (indices 9, 10, and 11) define the z axis direction and half-length.\n // 2. A half-size-quaternion based representation.\n // box: An array of 10 numbers that define an oriented bounding box.\n // The first three elements define the x, y, and z values for the center of the box in a right-handed 3-axis (x, y, z) Cartesian coordinate system where the z-axis is up.\n // The next three elements (with indices 3, 4, and 5) define the halfSize.\n // The last four elements (indices 6, 7, 8 and 10) define the quaternion.\n const center = new Vector3(box[0], box[1], box[2]);\n transform.transform(center, center);\n let origin: number[] = [];\n if (box.length === 10) {\n const halfSize = box.slice(3, 6);\n const quaternion = new Quaternion();\n quaternion.fromArray(box, 6);\n const x = new Vector3([1, 0, 0]);\n const y = new Vector3([0, 1, 0]);\n const z = new Vector3([0, 0, 1]);\n x.transformByQuaternion(quaternion);\n x.scale(halfSize[0]);\n y.transformByQuaternion(quaternion);\n y.scale(halfSize[1]);\n z.transformByQuaternion(quaternion);\n z.scale(halfSize[2]);\n origin = [...x.toArray(), ...y.toArray(), ...z.toArray()];\n } else {\n origin = [...box.slice(3, 6), ...box.slice(6, 9), ...box.slice(9, 12)];\n }\n const xAxis = transform.transformAsVector(origin.slice(0, 3));\n const yAxis = transform.transformAsVector(origin.slice(3, 6));\n const zAxis = transform.transformAsVector(origin.slice(6, 9));\n const halfAxes = new Matrix3([\n xAxis[0],\n xAxis[1],\n xAxis[2],\n yAxis[0],\n yAxis[1],\n yAxis[2],\n zAxis[0],\n zAxis[1],\n zAxis[2]\n ]);\n\n if (defined(result)) {\n result.center = center;\n result.halfAxes = halfAxes;\n return result;\n }\n\n return new OrientedBoundingBox(center, halfAxes);\n}\n\n/*\nfunction createBoxFromTransformedRegion(region, transform, initialTransform, result) {\n const rectangle = Rectangle.unpack(region, 0, scratchRectangle);\n const minimumHeight = region[4];\n const maximumHeight = region[5];\n\n const orientedBoundingBox = OrientedBoundingBox.fromRectangle(\n rectangle,\n minimumHeight,\n maximumHeight,\n Ellipsoid.WGS84,\n scratchOrientedBoundingBox\n );\n const center = orientedBoundingBox.center;\n const halfAxes = orientedBoundingBox.halfAxes;\n\n // A region bounding volume is not transformed by the transform in the tileset JSON,\n // but may be transformed by additional transforms applied in Cesium.\n // This is why the transform is calculated as the difference between the initial transform and the current transform.\n transform = Matrix4.multiplyTransformation(\n transform,\n Matrix4.inverseTransformation(initialTransform, scratchTransform),\n scratchTransform\n );\n center = Matrix4.multiplyByPoint(transform, center, center);\n const rotationScale = Matrix4.getRotation(transform, scratchMatrix);\n halfAxes = Matrix3.multiply(rotationScale, halfAxes, halfAxes);\n\n if (defined(result) && result instanceof TileOrientedBoundingBox) {\n result.update(center, halfAxes);\n return result;\n }\n\n return new TileOrientedBoundingBox(center, halfAxes);\n}\n\nfunction createRegion(region, transform, initialTransform, result) {\n if (!Matrix4.equalsEpsilon(transform, initialTransform, CesiumMath.EPSILON8)) {\n return createBoxFromTransformedRegion(region, transform, initialTransform, result);\n }\n\n if (defined(result)) {\n return result;\n }\n\n const rectangleRegion = Rectangle.unpack(region, 0, scratchRectangle);\n\n return new TileBoundingRegion({\n rectangle: rectangleRegion,\n minimumHeight: region[4],\n maximumHeight: region[5]\n });\n}\n*/\n\nfunction createSphere(sphere, transform, result?) {\n // Find the transformed center\n const center = new Vector3(sphere[0], sphere[1], sphere[2]);\n transform.transform(center, center);\n const scale = transform.getScale(scratchScale);\n\n const uniformScale = Math.max(Math.max(scale[0], scale[1]), scale[2]);\n const radius = sphere[3] * uniformScale;\n\n if (defined(result)) {\n result.center = center;\n result.radius = radius;\n return result;\n }\n\n return new BoundingSphere(center, radius);\n}\n"],"mappings":"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"}
@@ -4,6 +4,7 @@ import { Ellipsoid } from '@math.gl/geospatial';
4
4
  const scratchVector = new Vector3();
5
5
  const scratchPosition = new Vector3();
6
6
  const cullingVolume = new CullingVolume([new Plane(), new Plane(), new Plane(), new Plane(), new Plane(), new Plane()]);
7
+
7
8
  export function getFrameState(viewport, frameNumber) {
8
9
  const {
9
10
  cameraDirection,
@@ -13,14 +14,17 @@ export function getFrameState(viewport, frameNumber) {
13
14
  const {
14
15
  metersPerUnit
15
16
  } = viewport.distanceScales;
16
- const viewportCenterCartographic = viewport.unprojectPosition(viewport.center);
17
- const viewportCenterCartesian = Ellipsoid.WGS84.cartographicToCartesian(viewportCenterCartographic, new Vector3());
17
+
18
+ const viewportCenterCartesian = worldToCartesian(viewport, viewport.center);
18
19
  const enuToFixedTransform = Ellipsoid.WGS84.eastNorthUpToFixedFrame(viewportCenterCartesian);
19
20
  const cameraPositionCartographic = viewport.unprojectPosition(viewport.cameraPosition);
20
21
  const cameraPositionCartesian = Ellipsoid.WGS84.cartographicToCartesian(cameraPositionCartographic, new Vector3());
21
- const cameraDirectionCartesian = new Vector3(enuToFixedTransform.transformAsVector(new Vector3(cameraDirection).scale(metersPerUnit))).normalize();
22
- const cameraUpCartesian = new Vector3(enuToFixedTransform.transformAsVector(new Vector3(cameraUp).scale(metersPerUnit))).normalize();
23
- commonSpacePlanesToWGS84(viewport, viewportCenterCartesian);
22
+
23
+ const cameraDirectionCartesian = new Vector3(
24
+ enuToFixedTransform.transformAsVector(new Vector3(cameraDirection).scale(metersPerUnit))).normalize();
25
+ const cameraUpCartesian = new Vector3(
26
+ enuToFixedTransform.transformAsVector(new Vector3(cameraUp).scale(metersPerUnit))).normalize();
27
+ commonSpacePlanesToWGS84(viewport);
24
28
  const ViewportClass = viewport.constructor;
25
29
  const {
26
30
  longitude,
@@ -38,6 +42,7 @@ export function getFrameState(viewport, frameNumber) {
38
42
  zoom,
39
43
  pitch: 0
40
44
  });
45
+
41
46
  return {
42
47
  camera: {
43
48
  position: cameraPositionCartesian,
@@ -52,17 +57,16 @@ export function getFrameState(viewport, frameNumber) {
52
57
  sseDenominator: 1.15
53
58
  };
54
59
  }
60
+
55
61
  export function limitSelectedTiles(tiles, frameState, maximumTilesSelected) {
56
62
  if (maximumTilesSelected === 0 || tiles.length <= maximumTilesSelected) {
57
63
  return [tiles, []];
58
64
  }
59
-
60
65
  const tuples = [];
61
66
  const {
62
67
  longitude: viewportLongitude,
63
68
  latitude: viewportLatitude
64
69
  } = frameState.viewport;
65
-
66
70
  for (const [index, tile] of tiles.entries()) {
67
71
  const [longitude, latitude] = tile.header.mbs;
68
72
  const deltaLon = Math.abs(viewportLongitude - longitude);
@@ -70,34 +74,46 @@ export function limitSelectedTiles(tiles, frameState, maximumTilesSelected) {
70
74
  const distance = Math.sqrt(deltaLat * deltaLat + deltaLon * deltaLon);
71
75
  tuples.push([index, distance]);
72
76
  }
73
-
74
77
  const tuplesSorted = tuples.sort((a, b) => a[1] - b[1]);
75
78
  const selectedTiles = [];
76
-
77
79
  for (let i = 0; i < maximumTilesSelected; i++) {
78
80
  selectedTiles.push(tiles[tuplesSorted[i][0]]);
79
81
  }
80
-
81
82
  const unselectedTiles = [];
82
-
83
83
  for (let i = maximumTilesSelected; i < tuplesSorted.length; i++) {
84
84
  unselectedTiles.push(tiles[tuplesSorted[i][0]]);
85
85
  }
86
-
87
86
  return [selectedTiles, unselectedTiles];
88
87
  }
89
-
90
- function commonSpacePlanesToWGS84(viewport, viewportCenterCartesian) {
88
+ function commonSpacePlanesToWGS84(viewport) {
91
89
  const frustumPlanes = viewport.getFrustumPlanes();
92
- let i = 0;
93
90
 
91
+ const nearCenterCommon = closestPointOnPlane(frustumPlanes.near, viewport.cameraPosition);
92
+ const nearCenterCartesian = worldToCartesian(viewport, nearCenterCommon);
93
+ const cameraCartesian = worldToCartesian(viewport, viewport.cameraPosition, scratchPosition);
94
+ let i = 0;
95
+ cullingVolume.planes[i++].fromPointNormal(nearCenterCartesian, scratchVector.copy(nearCenterCartesian).subtract(cameraCartesian));
94
96
  for (const dir in frustumPlanes) {
97
+ if (dir === 'near') {
98
+ continue;
99
+ }
100
+
95
101
  const plane = frustumPlanes[dir];
96
- const distanceToCenter = plane.normal.dot(viewport.center);
97
- scratchPosition.copy(plane.normal).scale(plane.distance - distanceToCenter).add(viewport.center);
98
- const cartographicPos = viewport.unprojectPosition(scratchPosition);
99
- const cartesianPos = Ellipsoid.WGS84.cartographicToCartesian(cartographicPos, new Vector3());
100
- cullingVolume.planes[i++].fromPointNormal(cartesianPos, scratchVector.copy(viewportCenterCartesian).subtract(cartesianPos));
102
+ const posCommon = closestPointOnPlane(plane, nearCenterCommon, scratchPosition);
103
+ const cartesianPos = worldToCartesian(viewport, posCommon, scratchPosition);
104
+ cullingVolume.planes[i++].fromPointNormal(cartesianPos,
105
+ scratchVector.copy(nearCenterCartesian).subtract(cartesianPos));
101
106
  }
102
107
  }
108
+ function closestPointOnPlane(plane, refPoint) {
109
+ let out = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : new Vector3();
110
+ const distanceToRef = plane.normal.dot(refPoint);
111
+ out.copy(plane.normal).scale(plane.distance - distanceToRef).add(refPoint);
112
+ return out;
113
+ }
114
+ function worldToCartesian(viewport, point) {
115
+ let out = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : new Vector3();
116
+ const cartographicPos = viewport.unprojectPosition(point);
117
+ return Ellipsoid.WGS84.cartographicToCartesian(cartographicPos, out);
118
+ }
103
119
  //# sourceMappingURL=frame-state.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/tileset/helpers/frame-state.ts"],"names":["Vector3","CullingVolume","Plane","Ellipsoid","scratchVector","scratchPosition","cullingVolume","getFrameState","viewport","frameNumber","cameraDirection","cameraUp","height","metersPerUnit","distanceScales","viewportCenterCartographic","unprojectPosition","center","viewportCenterCartesian","WGS84","cartographicToCartesian","enuToFixedTransform","eastNorthUpToFixedFrame","cameraPositionCartographic","cameraPosition","cameraPositionCartesian","cameraDirectionCartesian","transformAsVector","scale","normalize","cameraUpCartesian","commonSpacePlanesToWGS84","ViewportClass","constructor","longitude","latitude","width","bearing","zoom","topDownViewport","pitch","camera","position","direction","up","sseDenominator","limitSelectedTiles","tiles","frameState","maximumTilesSelected","length","tuples","viewportLongitude","viewportLatitude","index","tile","entries","header","mbs","deltaLon","Math","abs","deltaLat","distance","sqrt","push","tuplesSorted","sort","a","b","selectedTiles","i","unselectedTiles","frustumPlanes","getFrustumPlanes","dir","plane","distanceToCenter","normal","dot","copy","add","cartographicPos","cartesianPos","planes","fromPointNormal","subtract"],"mappings":"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","sourcesContent":["import {Tile3D} from '@loaders.gl/tiles';\nimport {Vector3} from '@math.gl/core';\nimport {CullingVolume, Plane} from '@math.gl/culling';\nimport {Ellipsoid} from '@math.gl/geospatial';\n\nexport type FrameState = {\n camera: {\n position: number[];\n direction: number[];\n up: number[];\n };\n viewport: {[key: string]: any};\n topDownViewport: {[key: string]: any}; // Use it to calculate projected radius for a tile\n height: number;\n cullingVolume: CullingVolume;\n frameNumber: number; // TODO: This can be the same between updates, what number is unique for between updates?\n sseDenominator: number; // Assumes fovy = 60 degrees\n};\n\nconst scratchVector = new Vector3();\nconst scratchPosition = new Vector3();\nconst cullingVolume = new CullingVolume([\n new Plane(),\n new Plane(),\n new Plane(),\n new Plane(),\n new Plane(),\n new Plane()\n]);\n\n// Extracts a frame state appropriate for tile culling from a deck.gl viewport\n// TODO - this could likely be generalized and merged back into deck.gl for other culling scenarios\nexport function getFrameState(viewport, frameNumber: number): FrameState {\n // Traverse and and request. Update _selectedTiles so that we know what to render.\n const {cameraDirection, cameraUp, height} = viewport;\n const {metersPerUnit} = viewport.distanceScales;\n\n const viewportCenterCartographic = viewport.unprojectPosition(viewport.center);\n // TODO - Ellipsoid.eastNorthUpToFixedFrame() breaks on raw array, create a Vector.\n // TODO - Ellipsoid.eastNorthUpToFixedFrame() takes a cartesian, is that intuitive?\n const viewportCenterCartesian = Ellipsoid.WGS84.cartographicToCartesian(\n viewportCenterCartographic,\n new Vector3()\n );\n const enuToFixedTransform = Ellipsoid.WGS84.eastNorthUpToFixedFrame(viewportCenterCartesian);\n\n const cameraPositionCartographic = viewport.unprojectPosition(viewport.cameraPosition);\n const cameraPositionCartesian = Ellipsoid.WGS84.cartographicToCartesian(\n cameraPositionCartographic,\n new Vector3()\n );\n\n // These should still be normalized as the transform has scale 1 (goes from meters to meters)\n const cameraDirectionCartesian = new Vector3(\n // @ts-ignore\n enuToFixedTransform.transformAsVector(new Vector3(cameraDirection).scale(metersPerUnit))\n ).normalize();\n const cameraUpCartesian = new Vector3(\n // @ts-ignore\n enuToFixedTransform.transformAsVector(new Vector3(cameraUp).scale(metersPerUnit))\n ).normalize();\n\n commonSpacePlanesToWGS84(viewport, viewportCenterCartesian);\n\n const ViewportClass = viewport.constructor;\n const {longitude, latitude, width, bearing, zoom} = viewport;\n // @ts-ignore\n const topDownViewport = new ViewportClass({\n longitude,\n latitude,\n height,\n width,\n bearing,\n zoom,\n pitch: 0\n });\n\n // TODO: make a file/class for frameState and document what needs to be attached to this so that traversal can function\n return {\n camera: {\n position: cameraPositionCartesian,\n direction: cameraDirectionCartesian,\n up: cameraUpCartesian\n },\n viewport,\n topDownViewport,\n height,\n cullingVolume,\n frameNumber, // TODO: This can be the same between updates, what number is unique for between updates?\n sseDenominator: 1.15 // Assumes fovy = 60 degrees\n };\n}\n\n/**\n * Limit `tiles` array length with `maximumTilesSelected` number.\n * The criteria for this filtering is distance of a tile center\n * to the `frameState.viewport`'s longitude and latitude\n * @param tiles - tiles array to filter\n * @param frameState - frameState to calculate distances\n * @param maximumTilesSelected - maximal amount of tiles in the output array\n * @returns new tiles array\n */\nexport function limitSelectedTiles(\n tiles: Tile3D[],\n frameState: FrameState,\n maximumTilesSelected: number\n): [Tile3D[], Tile3D[]] {\n if (maximumTilesSelected === 0 || tiles.length <= maximumTilesSelected) {\n return [tiles, []];\n }\n // Accumulate distances in couples array: [tileIndex: number, distanceToViewport: number]\n const tuples: [number, number][] = [];\n const {longitude: viewportLongitude, latitude: viewportLatitude} = frameState.viewport;\n for (const [index, tile] of tiles.entries()) {\n const [longitude, latitude] = tile.header.mbs;\n const deltaLon = Math.abs(viewportLongitude - longitude);\n const deltaLat = Math.abs(viewportLatitude - latitude);\n const distance = Math.sqrt(deltaLat * deltaLat + deltaLon * deltaLon);\n tuples.push([index, distance]);\n }\n const tuplesSorted = tuples.sort((a, b) => a[1] - b[1]);\n const selectedTiles: Tile3D[] = [];\n for (let i = 0; i < maximumTilesSelected; i++) {\n selectedTiles.push(tiles[tuplesSorted[i][0]]);\n }\n const unselectedTiles: Tile3D[] = [];\n for (let i = maximumTilesSelected; i < tuplesSorted.length; i++) {\n unselectedTiles.push(tiles[tuplesSorted[i][0]]);\n }\n\n return [selectedTiles, unselectedTiles];\n}\n\nfunction commonSpacePlanesToWGS84(viewport, viewportCenterCartesian) {\n // Extract frustum planes based on current view.\n const frustumPlanes = viewport.getFrustumPlanes();\n let i = 0;\n for (const dir in frustumPlanes) {\n const plane = frustumPlanes[dir];\n const distanceToCenter = plane.normal.dot(viewport.center);\n scratchPosition\n .copy(plane.normal)\n .scale(plane.distance - distanceToCenter)\n .add(viewport.center);\n const cartographicPos = viewport.unprojectPosition(scratchPosition);\n\n const cartesianPos = Ellipsoid.WGS84.cartographicToCartesian(cartographicPos, new Vector3());\n\n cullingVolume.planes[i++].fromPointNormal(\n cartesianPos,\n // Want the normal to point into the frustum since that's what culling expects\n scratchVector.copy(viewportCenterCartesian).subtract(cartesianPos)\n );\n }\n}\n"],"file":"frame-state.js"}
1
+ {"version":3,"file":"frame-state.js","names":["Vector3","CullingVolume","Plane","Ellipsoid","scratchVector","scratchPosition","cullingVolume","getFrameState","viewport","frameNumber","cameraDirection","cameraUp","height","metersPerUnit","distanceScales","viewportCenterCartesian","worldToCartesian","center","enuToFixedTransform","WGS84","eastNorthUpToFixedFrame","cameraPositionCartographic","unprojectPosition","cameraPosition","cameraPositionCartesian","cartographicToCartesian","cameraDirectionCartesian","transformAsVector","scale","normalize","cameraUpCartesian","commonSpacePlanesToWGS84","ViewportClass","constructor","longitude","latitude","width","bearing","zoom","topDownViewport","pitch","camera","position","direction","up","sseDenominator","limitSelectedTiles","tiles","frameState","maximumTilesSelected","length","tuples","viewportLongitude","viewportLatitude","index","tile","entries","header","mbs","deltaLon","Math","abs","deltaLat","distance","sqrt","push","tuplesSorted","sort","a","b","selectedTiles","i","unselectedTiles","frustumPlanes","getFrustumPlanes","nearCenterCommon","closestPointOnPlane","near","nearCenterCartesian","cameraCartesian","planes","fromPointNormal","copy","subtract","dir","plane","posCommon","cartesianPos","refPoint","out","distanceToRef","normal","dot","add","point","cartographicPos"],"sources":["../../../../src/tileset/helpers/frame-state.ts"],"sourcesContent":["import {Tile3D} from '@loaders.gl/tiles';\nimport {Vector3} from '@math.gl/core';\nimport {CullingVolume, Plane} from '@math.gl/culling';\nimport {Ellipsoid} from '@math.gl/geospatial';\nimport {GeospatialViewport, Viewport} from '../../types';\n\nexport type FrameState = {\n camera: {\n position: number[];\n direction: number[];\n up: number[];\n };\n viewport: GeospatialViewport;\n topDownViewport: GeospatialViewport; // Use it to calculate projected radius for a tile\n height: number;\n cullingVolume: CullingVolume;\n frameNumber: number; // TODO: This can be the same between updates, what number is unique for between updates?\n sseDenominator: number; // Assumes fovy = 60 degrees\n};\n\nconst scratchVector = new Vector3();\nconst scratchPosition = new Vector3();\nconst cullingVolume = new CullingVolume([\n new Plane(),\n new Plane(),\n new Plane(),\n new Plane(),\n new Plane(),\n new Plane()\n]);\n\n// Extracts a frame state appropriate for tile culling from a deck.gl viewport\n// TODO - this could likely be generalized and merged back into deck.gl for other culling scenarios\nexport function getFrameState(viewport: GeospatialViewport, frameNumber: number): FrameState {\n // Traverse and and request. Update _selectedTiles so that we know what to render.\n // Traverse and and request. Update _selectedTiles so that we know what to render.\n const {cameraDirection, cameraUp, height} = viewport;\n const {metersPerUnit} = viewport.distanceScales;\n\n // TODO - Ellipsoid.eastNorthUpToFixedFrame() breaks on raw array, create a Vector.\n // TODO - Ellipsoid.eastNorthUpToFixedFrame() takes a cartesian, is that intuitive?\n const viewportCenterCartesian = worldToCartesian(viewport, viewport.center);\n const enuToFixedTransform = Ellipsoid.WGS84.eastNorthUpToFixedFrame(viewportCenterCartesian);\n\n const cameraPositionCartographic = viewport.unprojectPosition(viewport.cameraPosition);\n const cameraPositionCartesian = Ellipsoid.WGS84.cartographicToCartesian(\n cameraPositionCartographic,\n new Vector3()\n );\n\n // These should still be normalized as the transform has scale 1 (goes from meters to meters)\n const cameraDirectionCartesian = new Vector3(\n // @ts-ignore\n enuToFixedTransform.transformAsVector(new Vector3(cameraDirection).scale(metersPerUnit))\n ).normalize();\n const cameraUpCartesian = new Vector3(\n // @ts-ignore\n enuToFixedTransform.transformAsVector(new Vector3(cameraUp).scale(metersPerUnit))\n ).normalize();\n\n commonSpacePlanesToWGS84(viewport);\n\n const ViewportClass = viewport.constructor;\n const {longitude, latitude, width, bearing, zoom} = viewport;\n // @ts-ignore\n const topDownViewport = new ViewportClass({\n longitude,\n latitude,\n height,\n width,\n bearing,\n zoom,\n pitch: 0\n });\n\n // TODO: make a file/class for frameState and document what needs to be attached to this so that traversal can function\n return {\n camera: {\n position: cameraPositionCartesian,\n direction: cameraDirectionCartesian,\n up: cameraUpCartesian\n },\n viewport,\n topDownViewport,\n height,\n cullingVolume,\n frameNumber, // TODO: This can be the same between updates, what number is unique for between updates?\n sseDenominator: 1.15 // Assumes fovy = 60 degrees\n };\n}\n\n/**\n * Limit `tiles` array length with `maximumTilesSelected` number.\n * The criteria for this filtering is distance of a tile center\n * to the `frameState.viewport`'s longitude and latitude\n * @param tiles - tiles array to filter\n * @param frameState - frameState to calculate distances\n * @param maximumTilesSelected - maximal amount of tiles in the output array\n * @returns new tiles array\n */\nexport function limitSelectedTiles(\n tiles: Tile3D[],\n frameState: FrameState,\n maximumTilesSelected: number\n): [Tile3D[], Tile3D[]] {\n if (maximumTilesSelected === 0 || tiles.length <= maximumTilesSelected) {\n return [tiles, []];\n }\n // Accumulate distances in couples array: [tileIndex: number, distanceToViewport: number]\n const tuples: [number, number][] = [];\n const {longitude: viewportLongitude, latitude: viewportLatitude} = frameState.viewport;\n for (const [index, tile] of tiles.entries()) {\n const [longitude, latitude] = tile.header.mbs;\n const deltaLon = Math.abs(viewportLongitude - longitude);\n const deltaLat = Math.abs(viewportLatitude - latitude);\n const distance = Math.sqrt(deltaLat * deltaLat + deltaLon * deltaLon);\n tuples.push([index, distance]);\n }\n const tuplesSorted = tuples.sort((a, b) => a[1] - b[1]);\n const selectedTiles: Tile3D[] = [];\n for (let i = 0; i < maximumTilesSelected; i++) {\n selectedTiles.push(tiles[tuplesSorted[i][0]]);\n }\n const unselectedTiles: Tile3D[] = [];\n for (let i = maximumTilesSelected; i < tuplesSorted.length; i++) {\n unselectedTiles.push(tiles[tuplesSorted[i][0]]);\n }\n\n return [selectedTiles, unselectedTiles];\n}\n\nfunction commonSpacePlanesToWGS84(viewport) {\n // Extract frustum planes based on current view.\n const frustumPlanes = viewport.getFrustumPlanes();\n\n // Get the near/far plane centers\n const nearCenterCommon = closestPointOnPlane(frustumPlanes.near, viewport.cameraPosition);\n const nearCenterCartesian = worldToCartesian(viewport, nearCenterCommon);\n const cameraCartesian = worldToCartesian(viewport, viewport.cameraPosition, scratchPosition);\n\n let i = 0;\n cullingVolume.planes[i++].fromPointNormal(\n nearCenterCartesian,\n scratchVector.copy(nearCenterCartesian).subtract(cameraCartesian)\n );\n\n for (const dir in frustumPlanes) {\n if (dir === 'near') {\n continue; // eslint-disable-line no-continue\n }\n const plane = frustumPlanes[dir];\n const posCommon = closestPointOnPlane(plane, nearCenterCommon, scratchPosition);\n const cartesianPos = worldToCartesian(viewport, posCommon, scratchPosition);\n\n cullingVolume.planes[i++].fromPointNormal(\n cartesianPos,\n // Want the normal to point into the frustum since that's what culling expects\n scratchVector.copy(nearCenterCartesian).subtract(cartesianPos)\n );\n }\n}\n\nfunction closestPointOnPlane(\n plane: {distance: number; normal: Vector3},\n refPoint: [number, number, number] | Vector3,\n out: Vector3 = new Vector3()\n): Vector3 {\n const distanceToRef = plane.normal.dot(refPoint);\n out\n .copy(plane.normal)\n .scale(plane.distance - distanceToRef)\n .add(refPoint);\n return out;\n}\n\nfunction worldToCartesian(\n viewport: Viewport,\n point: number[] | Vector3,\n out: Vector3 = new Vector3()\n): Vector3 {\n const cartographicPos = viewport.unprojectPosition(point);\n return Ellipsoid.WGS84.cartographicToCartesian(cartographicPos, out);\n}\n"],"mappings":"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"}