All files / engine/Source/Scene Cesium3DTileContentFactory.js

91.3% Statements 21/23
66.66% Branches 4/6
100% Functions 12/12
91.3% Lines 21/23

Press n or j to go to the next uncovered block, b, p or k for the previous block.

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