class M3DCacheLayerUtil {}

M3DCacheLayerUtil.addM3DLayer = function (layer, mapView, callback) {
  layer.layerIndex = mapView.scene.layers.appendM3DLayer(
    layer.url,
    {
      // 是否显示3d tileset模型
      show: layer.visible,
      // 是否自动定位
      autoReset: layer.autoReset,
      // 跳转时间，以秒为单位
      duration: layer.duration,
      // 最大屏幕空间误差
      maximumScreenSpaceError: layer.maximumScreenSpaceError,
      // 是否显示外包盒
      debugShowBoundingVolume: layer.debugShowBoundingVolume,
      // MapGISM3DSet的每帧回调函数
      callback: layer.callback,
      // gltf解析完成回调，提供修改gltf对象能力，MapGISM3DSet中包含多个gltf,对所有的gltf应用同一个回调可能不合适
      gltfParsedCallback: layer.gltfParsedCallback,
      // 是否需要填充M3D数据剖面，在MapGISM3DSet构造函数中给的原因是，要想支持剖面选取高亮必须统计primitive的oid列表,为了节省内存,原始数据在加载完成后就会释放，后续没有时机统计oid列表
      fillClip: layer.fillClip,
      // 是否会存在剖面几何，如果后续会addSectionGeometry方法给m3d图层设置剖切面设置为true
      hasSectionGeometry: layer.hasSectionGeometry,
      // 模型纹理拉伸比例，默认不发生变化
      textureCoordScale: layer.textureCoordScale,
      // 回调函数，加载完后返回加载的m3d图层
      loaded(tileSet) {
        tileSet.id = layer.id
        callback(tileSet)
      }
    })
}

/**
 * 移除图层
 * @param {Layer} layer 基本图层对象
 * @param {Viewer} sceneView Cesium的视图对象
 * */
M3DCacheLayerUtil.removeLayer = function (layer, sceneView) {
  sceneView.scene.layers.removeM3DLayerByID(layer.layerIndex)
}

export default M3DCacheLayerUtil
