{"version":3,"file":"index.mjs","sources":["../../../../../packages/composables/use-primitives/index.ts"],"sourcesContent":["/**\n * for\n * ClassificationPrimitive\n * GroundPolylinePrimitive\n * GroundPrimitive\n * Model\n * Cesium3DTileset\n * Primitive\n * ParticleSystem\n */\nimport type { VcComponentInternalInstance, VcComponentPublicInstance } from 'casc-cesium-utils/types'\nimport useCommon from '../use-common'\nimport { mergeDescriptors } from 'casc-cesium-utils/merge-descriptors'\nimport { provide, ref } from 'vue'\nimport { vcKey } from 'casc-cesium-utils/config'\nimport { getInstanceListener } from 'casc-cesium-utils/private/vm'\nimport { isArray } from 'casc-cesium-utils/util'\n\nexport default function (props, ctx, vcInstance: VcComponentInternalInstance) {\n  // state\n  const commonState = useCommon(props, ctx, vcInstance)\n  if (commonState === void 0) {\n    return\n  }\n\n  const { emit } = ctx\n  const childCount = ref(0)\n  const instances = ref<Array<Cesium.GeometryInstance>>([])\n  // methods\n  vcInstance.createCesiumObject = async () => {\n    const options = commonState.transformProps(props)\n    if (!options.asynchronous) {\n      await Cesium[vcInstance.cesiumClass].initializeTerrainHeights?.()\n    }\n    if (props.geometryInstances) {\n      if (isArray(props.geometryInstances)) {\n        instances.value.push(...props.geometryInstances)\n        childCount.value += props.geometryInstances.length\n      } else {\n        childCount.value += 1\n        instances.value.push(props.geometryInstances)\n      }\n    }\n    return new Cesium[vcInstance.cesiumClass](options)\n  }\n\n  vcInstance.mount = async () => {\n    const primitives = vcInstance.cesiumClass.includes('Ground') ? commonState.$services.groundPrimitives : commonState.$services.primitives\n    const primitive = vcInstance.cesiumObject as Cesium.Primitive\n    primitive.readyPromise &&\n      primitive.readyPromise.then(e => {\n        const listener = getInstanceListener(vcInstance, 'readyPromise')\n        listener && emit('readyPromise', e, commonState.$services.viewer, vcInstance.proxy as VcComponentPublicInstance)\n      })\n    ;(primitive as any)._vcParent = primitives\n    const object = primitives && primitives.add(primitive)\n    if (vcInstance.cesiumClass === 'ParticleSystem') {\n      const intervalId = setInterval(() => {\n        if (Cesium.defined(object._billboardCollection)) {\n          object._billboardCollection._vcParent = object\n          clearInterval(intervalId)\n        }\n      }, 500)\n    }\n    return Cesium.defined(object)\n  }\n  vcInstance.unmount = async () => {\n    childCount.value = 0\n    instances.value = []\n    const primitives = vcInstance.cesiumClass.includes('Ground') ? commonState.$services.groundPrimitives : commonState.$services.primitives\n    const primitive = vcInstance.cesiumObject as Cesium.Primitive\n    return primitives && primitives.remove(primitive)\n  }\n\n  const updateGeometryInstances = (instance, index) => {\n    // Todo 同时改 geometry 的多个属性导致 bug\n    // 如可视域分析创建 VcGeometryEllipsoidOutline 修改 radii 和 innerRadii 有问题\n    instances.value.push(instance)\n    if (index === childCount.value - 1) {\n      const listener = getInstanceListener(vcInstance, 'update:geometryInstances')\n      if (listener) {\n        ctx.emit('update:geometryInstances', instances.value)\n      } else {\n        const primitive = vcInstance.cesiumObject as Cesium.Primitive\n        ;(primitive as any).geometryInstances = index === 0 ? instance : instances.value\n      }\n    }\n    return true\n  }\n\n  const removeGeometryInstances = instance => {\n    const index = instances.value.indexOf(instance)\n    instances.value.splice(index, 1)\n    return true\n  }\n\n  const getServices = () => {\n    return mergeDescriptors(commonState.getServices(), {\n      get primitive() {\n        return vcInstance.cesiumObject as Cesium.Primitive\n      }\n    })\n  }\n\n  // provide\n  provide(vcKey, getServices())\n\n  // expose public methods\n  Object.assign(vcInstance.proxy, {\n    // private but needed by VcGeometryInstance\n    __updateGeometryInstances: updateGeometryInstances,\n    __removeGeometryInstances: removeGeometryInstances,\n    __childCount: childCount\n  })\n\n  return {\n    transformProps: commonState.transformProps,\n    unwatchFns: commonState.unwatchFns,\n    setPropsWatcher: commonState.setPropsWatcher\n  }\n}\n"],"names":[],"mappings":"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"}