core/layers/Models.js

/*
 * 模型主类
 * @Author: jianlei wang
 * @Date: 2024-02-26 17:02:30
 * @Last Modified by: jianlei wang
 * @Last Modified time: 2024-08-27 10:35:48
 */

import {
  load3Dtiles,
  load3DtilesOnPos,
  updatePos,
} from '../../utils/layers/3DTiles'
import { loadGltfEntity } from '../../utils/layers/Model'

/**
 * 模型主类
 * @class
 */
class Model {
  /**
   * 构造函数
   * @param {Object} viewer - 地图场景对象
   */
  constructor(viewer) {
    this._viewer = viewer
  }

  /**
   * 加载3Dtiles模型
   * @param {String} url - 模型地址
   * @param {Number} [height=0] - 可选:高度偏差,正数为向上偏,负数为向下偏,根据真实的模型位置不断进行调整
   * @returns {Promise<Primitive>} 模型对象,Primitive类对象,参考Cesium
   */
  async add3DTiles(url, height = 0) {
    const model = await load3Dtiles(this._viewer, url, height)
    return model
  }

  /**
   * 加载3Dtiles模型到指定位置
   * @param {String} url - 模型地址
   * @param {DegreePosZ} position - 设置模型位置,WGS84经纬度格式
   * @returns {Promise<Primitive>} 模型对象,Primitive类对象,参考Cesium
   */
  async add3DTilesOnPos(url, position) {
    const model = await load3DtilesOnPos(this._viewer, url, position)
    return model
  }

  /**
   * 调整模型位置
   * @param {Primitive} model 待调整模型对象
   * @param {DegreePosZ} position 设置模型位置,WGS84经纬度格式
   * @returns {Primitive} 模型对象,Primitive类对象,参考Cesium
   */
  update3DTiles(model, position) {
    const { x, y, z } = position
    updatePos(model, z, x, y)
    return model
  }

  /**
   * 加载gltf/glb模型
   * @param {String} url GLTF/GLB模型地址URL
   * @param {Cartesian3} position 加载位置坐标,笛卡尔坐标
   * @param {GltfOption} options 模型参数设置
   * @returns {Entity} 加载后的模型对象,Entity类对象,参考Cesium
   */
  addGltf(url, position, options) {
    const model = loadGltfEntity(this._viewer, url, position, options)
    return model
  }
}
export default Model