mapgis-3d-projector-setting

# 属性

# vueKey

  • 类型: String
  • 可选
  • 非侦听属性
  • 默认值: default
  • 描述: mapgis-web-scene 组件的 ID,当使用多个 mapgis-web-scene 组件时,需要指定该值,来唯一标识 mapgis-web-scene 组件,同时 mapgis-web-scene 插槽中的组件也需要传入相同的 vueKey,让组件知道应该作用于哪一个 mapgis-web-scene。

# vueIndex

  • 类型: Number
  • 可选
  • 非侦听属性
  • 默认值: (Math.random() * 100000000).toFixed(0)随机计算值
  • 描述: 当 mapgis-web-scene 插槽中使用了多个相同组件时,例如多个 mapgis-3d-igs-doc-layer 组件,用来区分组件的标识符。

# modelUrl

  • 类型: String
  • 必选
  • 侦听属性
  • 描述: 相机模型路径
  • 默认值:

# modelOffset

  • 类型: Object
  • 可选
  • 侦听属性
  • 描述: 相机模型朝向偏移量
  • 默认值: { headingOffset: -90, pitchOffset: 0, rollOffset: 0 }

# modelScale

  • 类型: Number
  • 可选
  • 侦听属性
  • 描述: 相机模型尺寸比例
  • 默认值: 1

# hideVPInvisible

  • 类型: Boolean
  • 可选
  • 侦听属性
  • 描述: 当摄像头不在当前视图范围内,隐藏投影;参数设置后,对新投放或者重新投放的对象有效,对于已经投放的对象无效
  • 默认值: false

# settings

  • 类型: Object
  • 可选
  • 侦听属性
  • 描述: 投放视频参数对象
  • 默认值:
{
    id: "987-765-543-124",
    name: "testProjector3",
    description: "",
    isProjected: false,
    params: {
      projectorType: "video",
      imgUrl: "",
      videoSource: {
        protocol: "m3u8",
        videoUrl: "http://192.168.91.123:10008/record/video3/20211221/out.m3u8",
      },
      cameraPosition: {
        x: 114.4006886798949,
        y: 30.467287432107295,
        z: 85.46751512564336,
      },
      orientation: {
        heading: 271.628505216584,
        pitch: -78.4,
        roll: 359.3,
      },
      hFOV: 32.5,
      vFOV: 19,
      hintLineVisible: true,
    }
}

# 方法

# putProjector

  • Description: 投放视频
  • Param: projector 投放视频参数对象

# cancelPutProjector

  • Description: 取消投放
  • Param: id 要取消投放视频的 id

onChangeSetting(val, tag)

# onChangeSetting

  • Description: 实时修改视频投放参数(朝向,视角和视锥线显示)
  • Param: val 要修改的值
  • Param: tag 要修改的值对应的 key 值

# 事件

# @load

  • Description: 在 ProjectorSetting 组件 加载完毕后发送该事件
  • Payload ProjectorSetting 组件对象

# @unload

  • Description: 在 ProjectorSetting 组件 销毁前发送该事件
  • Payload ProjectorSetting 组件对象

# @update-settings

  • Description: 在 修改配置点击确定按钮 时发送该事件
  • Payload 更新后的 settings

# @cancel

  • Description: 在 点击取消按钮 时发送该事件

# 插槽

# imgUpload

  • Description: 图片上传按钮插槽
  • Param: click {Function} 主要用来回传上传后图片路径。
<template slot="imgUpload" slot-scope="{ click }">
  <mp-upload-image
    :uploadUrl="`${baseUrl}/api/local-storage/pictures`"
    :click="click"
  ></mp-upload-image>
</template>

# 示例

<template>
  <mapgis-web-scene style="height: 95vh" v-on:load="handleLoad">
    <mapgis-3d-scene-layer
      :autoReset="autoReset"
      :maximumScreenSpaceError="maximumScreenSpaceError"
      :url="m3dUrl"
    ></mapgis-3d-scene-layer>
    <mapgis-ui-card
      v-if="isM3DLoaded"
      class="storybook-ui-card"
      style="max-height:500px;overflow-y:auto"
    >
      <mapgis-3d-projector-setting
        :settings="settings"
        :modelUrl="modelUrl"
        :modelOffset="modelOffset"
        :hideVPInvisible="hideVPInvisible"
      ></mapgis-3d-projector-setting>
    </mapgis-ui-card>
  </mapgis-web-scene>
</template>

<script>
export default {
  data() {
    return {
      m3dUrl: `${window.domain}/igs/rest/g3d/ZondyModels`,
      autoReset: true,
      maximumScreenSpaceError: 8,
      isM3DLoaded: false,
      modelUrl: "./CesiumModels/Cesium_Camera.glb",
      modelOffset: { headingOffset: -90, pitchOffset: 0, rollOffset: 0 },
      hideVPInvisible: false,
      settings: {
        id: "987-765-543-124",
        name: "testProjector3",
        description: "",
        isProjected: false,
        params: {
          projectorType: "video",
          imgUrl: "",
          videoSource: {
            protocol: "m3u8",
            videoUrl:
              "http://192.168.91.123:10008/record/video3/20211221/out.m3u8"
          },
          cameraPosition: {
            x: 114.4006886798949,
            y: 30.467287432107295,
            z: 85.46751512564336
          },
          orientation: {
            heading: 271.628505216584,
            pitch: -78.4,
            roll: 359.3
          },
          hFOV: 32.5,
          vFOV: 19,
          hintLineVisible: true
        }
      }
    };
  },
  methods: {
    handleLoad(e) {
      setTimeout(() => {
        //增加延时,确保模型已加载
        this.isM3DLoaded = true;
      }, 5000);
    }
  }
};
</script>