{"version":3,"file":"ThreeGltf.vue2.mjs","sources":["../../../../packages/ThreeGltf/ThreeGltf.vue"],"sourcesContent":["<template>\r\n  <div style=\"display: none\">\r\n    <div\r\n      ref=\"popupRef\"\r\n      style=\"width: 0; height: 0; position: relative\"\r\n    >\r\n      <div\r\n        class=\"content-container\"\r\n        style=\"transform: translate(-50%, -100%); position: absolute\"\r\n      >\r\n        <slot />\r\n      </div>\r\n    </div>\r\n  </div>\r\n</template>\r\n<script setup lang=\"ts\">\r\nimport { defineOptions, getCurrentInstance, ref, watch } from \"vue\";\r\nimport { useRegister, buildProps } from \"@vuemap/vue-amap\";\r\nimport { CSS2DObject } from \"../ThreeLayer/CSS2DRenderer\";\r\nimport { CSS3DObject } from \"../ThreeLayer/CSS3DRenderer\";\r\nimport CustomThreeGltf from \"./CustomThreeGltf\";\r\nimport type { MoveAnimation, Vec, ConfigLoader } from \"./Type\";\r\nimport type { PropType } from \"vue\";\r\nconst popupRef = ref<HTMLDivElement>();\r\n\r\ndefineOptions({\r\n  name: \"ElAmapThreeGltf\",\r\n  inheritAttrs: false,\r\n});\r\n\r\nconst props = defineProps(\r\n  buildProps({\r\n    url: {\r\n      type: String,\r\n    },\r\n    position: {\r\n      type: Array as PropType<number[]>,\r\n    },\r\n    height: {\r\n      type: Number,\r\n      default: 0,\r\n    },\r\n    rotation: {\r\n      type: Object as PropType<Vec>,\r\n    },\r\n    scale: {\r\n      type: [Number, Array],\r\n      default: 1,\r\n    },\r\n    angle: {\r\n      type: Number,\r\n      default: 0,\r\n    },\r\n    moveAnimation: {\r\n      type: Object as PropType<MoveAnimation>,\r\n    }, //位置移动是否开启动画\r\n    configLoader: {\r\n      type: Function as PropType<ConfigLoader>,\r\n    },\r\n    useModelCache: {\r\n      type: Boolean,\r\n      default: false,\r\n    },\r\n    showPopup: {\r\n      type: Boolean,\r\n      default: false,\r\n    },\r\n    popupHeight: {\r\n      //弹窗距离模型中心点的高度\r\n      type: Number,\r\n      default: 0,\r\n    },\r\n    popupScale: {\r\n      //三维弹窗的缩放比例(只有在popupType为3D时生效)\r\n      type: [Number, Array<number>],\r\n      default: 1,\r\n    },\r\n    popupType:{//信息弹窗类型\r\n      type:String as PropType<'2D'|'3D'>,\r\n      default:'2D'\r\n    }\r\n  })\r\n);\r\nconst emits = defineEmits([\r\n  \"init\",\r\n  \"click\",\r\n  \"mousemove\",\r\n  \"mouseover\",\r\n  \"mouseout\",\r\n]);\r\n\r\nlet $amapComponent: CustomThreeGltf;\r\n\r\nlet popup: CSS2DObject | CSS3DObject;\r\n\r\nconst currentInstance = getCurrentInstance();\r\n\r\nconst { $$getInstance, parentInstance } = useRegister<CustomThreeGltf, any>(\r\n  (options, parentComponent) => {\r\n    return new Promise<CustomThreeGltf>((resolve) => {\r\n      // currentInstance.$$startAnimations = $$startAnimations;\r\n      // currentInstance.$$stopAnimations = $$stopAnimations;\r\n      // Object.assign( currentInstance.ctx, currentInstance.exposed);\r\n      // eslint-disable-next-line @typescript-eslint/ban-ts-comment\r\n      // @ts-ignore\r\n      $amapComponent = new CustomThreeGltf(\r\n        parentComponent,\r\n        options,\r\n        {\r\n          $emit: emits,\r\n          ...(currentInstance?.exposed || {}),\r\n        },\r\n        () => {\r\n          addPopup($amapComponent);\r\n          resolve($amapComponent);\r\n        }\r\n      );\r\n    });\r\n  },\r\n  {\r\n    emits,\r\n    destroyComponent () {\r\n      if ($amapComponent && parentInstance?.$amapComponent) {\r\n        if (!parentInstance.isDestroy) {\r\n          $amapComponent.remove();\r\n        }\r\n        $amapComponent.layer?.cssRenderer?.domElement?.remove();\r\n        $amapComponent.destroy();\r\n        $amapComponent = null as any;\r\n      }\r\n    },\r\n  }\r\n);\r\n\r\nconst addPopup = (instance: CustomThreeGltf) => {\r\n  const element = popupRef.value as HTMLDivElement;\r\n  const contentEle = element.querySelector('.content-container');\r\n  if(contentEle?.children?.length==0) return;\r\n  if (props.popupType === \"2D\") {\r\n    if(!instance?.layer?.css2DRenderer){\r\n      return;\r\n    }\r\n    const css2dObject = new CSS2DObject(element);\r\n    css2dObject.center.set(0.5, 1);\r\n    css2dObject.translateY(props.popupHeight || 0);\r\n    popup = css2dObject;\r\n    popup.visible = props.showPopup;\r\n    instance.object.add(popup);\r\n  } else if (props.popupType === \"3D\") {\r\n    if(!instance?.layer?.css3DRenderer){\r\n      return;\r\n    }\r\n    const scales =\r\n      typeof props.popupScale === \"number\"\r\n        ? [props.popupScale, props.popupScale, props.popupScale]\r\n        : props.popupScale;\r\n    const css3DObject = new CSS3DObject(element);\r\n    css3DObject.translateY(props.popupHeight || 0);\r\n    css3DObject.scale.set(scales[0], scales[1], scales[2]);\r\n    popup = css3DObject;\r\n    popup.visible = props.showPopup;\r\n    instance.object.add(popup);\r\n  }\r\n  instance?.refresh();\r\n};\r\n\r\nconst $$startAnimations = () => {\r\n  $amapComponent.startAnimations();\r\n};\r\nconst $$stopAnimations = () => {\r\n  $amapComponent.stopAnimations();\r\n};\r\n\r\ndefineExpose({\r\n  $$getInstance,\r\n  $$startAnimations,\r\n  $$stopAnimations,\r\n});\r\n\r\nwatch(\r\n  () => props.showPopup,\r\n  (val) => {\r\n    if(val && !popup){\r\n      addPopup($amapComponent);\r\n      return;\r\n    }\r\n    if(popup){\r\n      popup.visible = val;\r\n      $amapComponent.refresh();\r\n    }\r\n  }\r\n);\r\n\r\nwatch(\r\n  () => props.popupHeight,\r\n  (val, old) => {\r\n    if (popup) {\r\n      const changeVal = (val || 0) - (old || 0);\r\n      popup.translateY(changeVal || 0);\r\n      $amapComponent.refresh();\r\n    }\r\n  }\r\n);\r\n\r\nwatch(\r\n  () => props.popupScale,\r\n  (val) => {\r\n    if (popup && val) {\r\n      const scales = typeof val === \"number\" ? [val, val, val] : val;\r\n      popup.scale.set(scales[0], scales[1], scales[2]);\r\n      $amapComponent.refresh();\r\n    }\r\n  }\r\n);\r\n</script>\r\n"],"names":[],"mappings":"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"}