Cesium3DTileContentFactory.js 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141
  1. import Batched3DModel3DTileContent from "./Batched3DModel3DTileContent.js";
  2. import Composite3DTileContent from "./Composite3DTileContent.js";
  3. import Geometry3DTileContent from "./Geometry3DTileContent.js";
  4. import Implicit3DTileContent from "./Implicit3DTileContent.js";
  5. import Instanced3DModel3DTileContent from "./Instanced3DModel3DTileContent.js";
  6. import PointCloud3DTileContent from "./PointCloud3DTileContent.js";
  7. import Tileset3DTileContent from "./Tileset3DTileContent.js";
  8. import Vector3DTileContent from "./Vector3DTileContent.js";
  9. import RuntimeError from "../Core/RuntimeError.js";
  10. import ModelExperimental3DTileContent from "./ModelExperimental/ModelExperimental3DTileContent.js";
  11. /**
  12. * Maps a tile's magic field in its header to a new content object for the tile's payload.
  13. *
  14. * @private
  15. */
  16. const Cesium3DTileContentFactory = {
  17. b3dm: function (tileset, tile, resource, arrayBuffer, byteOffset) {
  18. if (tileset.enableModelExperimental) {
  19. return ModelExperimental3DTileContent.fromB3dm(
  20. tileset,
  21. tile,
  22. resource,
  23. arrayBuffer,
  24. byteOffset
  25. );
  26. }
  27. return new Batched3DModel3DTileContent(
  28. tileset,
  29. tile,
  30. resource,
  31. arrayBuffer,
  32. byteOffset
  33. );
  34. },
  35. pnts: function (tileset, tile, resource, arrayBuffer, byteOffset) {
  36. if (tileset.enableModelExperimental) {
  37. return ModelExperimental3DTileContent.fromPnts(
  38. tileset,
  39. tile,
  40. resource,
  41. arrayBuffer,
  42. byteOffset
  43. );
  44. }
  45. return new PointCloud3DTileContent(
  46. tileset,
  47. tile,
  48. resource,
  49. arrayBuffer,
  50. byteOffset
  51. );
  52. },
  53. i3dm: function (tileset, tile, resource, arrayBuffer, byteOffset) {
  54. if (tileset.enableModelExperimental) {
  55. return ModelExperimental3DTileContent.fromI3dm(
  56. tileset,
  57. tile,
  58. resource,
  59. arrayBuffer,
  60. byteOffset
  61. );
  62. }
  63. return new Instanced3DModel3DTileContent(
  64. tileset,
  65. tile,
  66. resource,
  67. arrayBuffer,
  68. byteOffset
  69. );
  70. },
  71. cmpt: function (tileset, tile, resource, arrayBuffer, byteOffset) {
  72. // Send in the factory in order to avoid a cyclical dependency
  73. return new Composite3DTileContent(
  74. tileset,
  75. tile,
  76. resource,
  77. arrayBuffer,
  78. byteOffset,
  79. Cesium3DTileContentFactory
  80. );
  81. },
  82. externalTileset: function (tileset, tile, resource, json) {
  83. return new Tileset3DTileContent(tileset, tile, resource, json);
  84. },
  85. geom: function (tileset, tile, resource, arrayBuffer, byteOffset) {
  86. return new Geometry3DTileContent(
  87. tileset,
  88. tile,
  89. resource,
  90. arrayBuffer,
  91. byteOffset
  92. );
  93. },
  94. vctr: function (tileset, tile, resource, arrayBuffer, byteOffset) {
  95. return new Vector3DTileContent(
  96. tileset,
  97. tile,
  98. resource,
  99. arrayBuffer,
  100. byteOffset
  101. );
  102. },
  103. subt: function (tileset, tile, resource, arrayBuffer, byteOffset) {
  104. return new Implicit3DTileContent(
  105. tileset,
  106. tile,
  107. resource,
  108. undefined,
  109. arrayBuffer,
  110. byteOffset
  111. );
  112. },
  113. subtreeJson: function (tileset, tile, resource, json) {
  114. return new Implicit3DTileContent(tileset, tile, resource, json);
  115. },
  116. glb: function (tileset, tile, resource, arrayBuffer, byteOffset) {
  117. const arrayBufferByteLength = arrayBuffer.byteLength;
  118. if (arrayBufferByteLength < 12) {
  119. throw new RuntimeError("Invalid glb content");
  120. }
  121. const dataView = new DataView(arrayBuffer, byteOffset);
  122. const byteLength = dataView.getUint32(8, true);
  123. const glb = new Uint8Array(arrayBuffer, byteOffset, byteLength);
  124. return ModelExperimental3DTileContent.fromGltf(
  125. tileset,
  126. tile,
  127. resource,
  128. glb
  129. );
  130. },
  131. gltf: function (tileset, tile, resource, json) {
  132. return ModelExperimental3DTileContent.fromGltf(
  133. tileset,
  134. tile,
  135. resource,
  136. json
  137. );
  138. },
  139. };
  140. export default Cesium3DTileContentFactory;