{"version":3,"file":"use-selection-indicatior.mjs","sources":["../../../../../../packages/components/controls/selection-indicator/use-selection-indicatior.ts"],"sourcesContent":["import { VcComponentInternalInstance, VcViewerProvider } from '@vue-cesium/utils/types'\nimport { CSSProperties, nextTick, onUnmounted, reactive, ref, watch, WatchStopHandle } from 'vue'\nimport Feature from './Feature'\nimport PickedFeatures from './PickedFeatures'\nimport { isArray } from '@vue-cesium/utils/util'\nimport { pickImageryLayerFeatures } from './util'\n\nexport default function (instance: VcComponentInternalInstance, props, $services: VcViewerProvider) {\n  // state\n  const offScreen = '-1000px'\n  const screenPositionX = ref(offScreen)\n  const screenPositionY = ref(offScreen)\n  const transform = ''\n  const opacity = 1.0\n  const position = ref<Cesium.Cartesian3>()\n  const rootRef = ref<HTMLElement | null>()\n  let selectionIndicatorTween\n  let selectionIndicatorIsAppearing\n  const pickedFeatures = ref<PickedFeatures>(null)\n  const selectedFeature = ref<Feature | Cesium.Entity>(null)\n  let unwatchFns: Array<WatchStopHandle> = []\n  let isCluster = false\n  // computed\n  const rootStyle = reactive<CSSProperties>({\n    top: screenPositionY.value,\n    left: screenPositionX.value,\n    transform,\n    opacity: opacity\n  })\n  // watch\n  unwatchFns.push(\n    watch(selectedFeature, val => {\n      const selectedFeature: any = val\n      const { defined } = Cesium\n      if (defined(selectedFeature) && defined(selectedFeature?.position)) {\n        const { viewer } = $services\n        // Todo 高亮逻辑\n        position.value =\n          selectedFeature?.position instanceof Cesium.Cartesian3\n            ? selectedFeature?.position\n            : selectedFeature?.position?.getValue(viewer.clock.currentTime)\n        animateAppear()\n        instance.proxy?.$emit('pickEvt', selectedFeature)\n      } else {\n        animateDepart()\n        instance.proxy?.$emit('pickEvt', selectedFeature)\n      }\n\n      update()\n    })\n  )\n\n  unwatchFns.push(\n    watch(pickedFeatures, val => {\n      const { defined, Entity } = Cesium\n      const pickedFeatures = val\n      if (!defined(pickedFeatures)) {\n        selectedFeature.value = undefined\n      } else {\n        const fakeFeature = new Entity({\n          id: '__Vc__Pick__Location__'\n        })\n        fakeFeature.position = pickedFeatures.pickPosition\n        selectedFeature.value = fakeFeature\n      }\n\n      nextTick(() => {\n        if (defined(pickedFeatures.allFeaturesAvailablePromise)) {\n          pickedFeatures.allFeaturesAvailablePromise.then(() => {\n            // We only show features that are associated with a catalog item, so make sure the one we select to be\n            // open initially is one we're actually going to show.\n            const featuresShownAtAll = pickedFeatures.features.filter(x => defined(x))\n            selectedFeature.value = featuresShownAtAll.filter(featureHasInfo)[0]\n            if (!defined(selectedFeature.value) && featuresShownAtAll.length > 0) {\n              // Handles the case when no features have info - still want something to be open.\n              selectedFeature.value = featuresShownAtAll[0]\n              if (isCluster) {\n                if (selectedFeature.value instanceof Feature && selectedFeature.value?.pickedFeature?.primitive?.position) {\n                  selectedFeature.value.position = selectedFeature.value.pickedFeature.primitive.position\n                }\n              }\n            }\n          })\n        }\n      })\n    })\n  )\n  // methods\n  const featureHasInfo = feature => {\n    const { defined } = Cesium\n    return defined(feature.properties) || defined(feature.description)\n  }\n\n  const pickFromScreenPosition = (screenPosition: Cesium.Cartesian2) => {\n    const { defined } = Cesium\n    const { viewer } = $services\n    const scene = viewer.scene\n    const pickRay = scene.camera.getPickRay(screenPosition)\n    let pickPosition = scene.globe.pick(pickRay, scene)\n    if (!defined(pickPosition)) {\n      pickPosition = scene.pickPosition(screenPosition)\n      if (!defined(pickPosition)) {\n        return\n      }\n    }\n    const pickPositionCartographic = scene.globe.ellipsoid.cartesianToCartographic(pickPosition || new Cesium.Cartesian3())\n\n    const vectorFeatures = pickVectorFeatures(screenPosition)\n\n    const providerCoords = attachProviderCoordHooks()\n\n    const pickRasterPromise = props.allowFeatureInfoRequests\n      ? pickImageryLayerFeatures(pickRay, scene, props.includeImageryIds, props.excludeImageryIds)\n      : Promise.resolve()\n    const result = buildPickedFeatures(\n      providerCoords,\n      pickPosition,\n      vectorFeatures,\n      [pickRasterPromise],\n      undefined,\n      pickPositionCartographic.height,\n      false,\n      viewer\n    )\n    pickedFeatures.value = result\n  }\n\n  const buildPickedFeatures = (\n    providerCoords,\n    pickPosition,\n    existingFeatures,\n    featurePromises,\n    imageryLayers,\n    defaultHeight,\n    ignoreSplitter,\n    viewer\n  ) => {\n    const { defined, defaultValue } = Cesium\n    ignoreSplitter = defaultValue(ignoreSplitter, false)\n    const result = new PickedFeatures()\n\n    result.providerCoords = providerCoords\n    result.pickPosition = pickPosition\n\n    result.allFeaturesAvailablePromise = Promise.all(featurePromises)\n      .then(function (this, allFeatures) {\n        result.isLoading = false\n\n        result.features = allFeatures.reduce(\n          function (this, resultFeaturesSoFar, imageryLayerFeatures, i) {\n            if (!defined(imageryLayerFeatures)) {\n              return resultFeaturesSoFar\n            }\n\n            const features = imageryLayerFeatures.map(\n              function (feature) {\n                if (defined(imageryLayers)) {\n                  feature.imageryLayer = imageryLayers[i]\n                }\n\n                if (!defined(feature.position)) {\n                  feature.position = viewer.scene.globe.ellipsoid.cartesianToCartographic(pickPosition)\n                }\n\n                // If the picked feature does not have a height, use the height of the picked location.\n                // This at least avoids major parallax effects on the selection indicator.\n                if (!defined(feature.position.height) || feature.position.height === 0.0) {\n                  feature.position.height = defaultHeight\n                }\n                return Feature.fromImageryLayerFeature(feature, viewer)\n              }.bind(this)\n            )\n\n            return resultFeaturesSoFar.concat(features)\n          }.bind(this),\n          defaultValue(existingFeatures, [])\n        )\n      })\n      .catch(function () {\n        result.isLoading = false\n        result.error = 'An unknown error occurred while picking features.'\n      })\n\n    return result\n  }\n\n  const pickVectorFeatures = (screenPosition: Cesium.Cartesian2) => {\n    // Pick vector features\n    const vectorFeatures: Array<any> = []\n    const { defined } = Cesium\n    const { viewer } = $services\n    const scene = viewer.scene\n    const pickedList = scene.drillPick(screenPosition, props.limit)\n    for (let i = 0; i < pickedList.length; ++i) {\n      const picked = pickedList[i]\n      let id = picked.id\n\n      // if (\n      //   id &&\n      // id.entityCollection &&\n      // id.entityCollection.owner &&\n      // id.entityCollection.owner.name === featureHighlightName\n      // ) {\n      //   continue\n      // }\n      if (!defined(id) && defined(picked.primitive)) {\n        id = picked.primitive\n      }\n\n      const catalogItem = picked?.primitive?._catalogItem ?? id?._catalogItem\n\n      if (typeof catalogItem?.getFeaturesFromPickResult === 'function') {\n        const result = catalogItem.getFeaturesFromPickResult.bind(catalogItem)(screenPosition, picked)\n        if (result) {\n          if (Array.isArray(result)) {\n            vectorFeatures.push(...result)\n          } else {\n            vectorFeatures.push(result)\n          }\n        }\n      } else {\n        const pickedFeature = picked\n        if (pickedFeature.id) {\n          if (isArray(pickedFeature.id) && pickedFeature.id[0] instanceof Cesium.Entity) {\n            // 数据源集合（集群）\n            isCluster = true\n            pickedFeature.id.forEach(entity => {\n              const feature = Feature.fromPickedFeature(entity, pickedFeature, viewer, screenPosition)\n              vectorFeatures.push(feature)\n            })\n            continue\n          } else if (pickedFeature.id instanceof Cesium.Entity) {\n            // 实体 or 数据源\n            const feature = Feature.fromPickedFeature(pickedFeature.id, pickedFeature, viewer, screenPosition)\n            vectorFeatures.push(feature)\n            isCluster = false\n            continue\n          } else {\n            isCluster = false\n          }\n        }\n        // 图元\n        if (pickedFeature.primitive) {\n          const feature = Feature.fromPickedFeature(pickedFeature.primitive, pickedFeature, viewer, screenPosition)\n          vectorFeatures.push(feature)\n        } else if (pickedFeature.collection) {\n          // 图元集合\n          const feature = Feature.fromPickedFeature(pickedFeature.collection, pickedFeature, viewer, screenPosition)\n          vectorFeatures.push(feature)\n        }\n      }\n    }\n\n    return vectorFeatures\n  }\n\n  const attachProviderCoordHooks = () => {\n    const providerCoords = {}\n    const { viewer } = $services\n    const scene = viewer.scene\n\n    const pickFeaturesHook = function (imageryProvider, oldPick, x, y, level, longitude, latitude) {\n      if (oldPick) {\n        const featuresPromise = oldPick.call(imageryProvider, x, y, level, longitude, latitude)\n\n        // Use url to uniquely identify providers because what else can we do?\n        if (imageryProvider.url) {\n          providerCoords[imageryProvider.url] = {\n            x: x,\n            y: y,\n            level: level\n          }\n        }\n\n        imageryProvider.pickFeatures = oldPick\n        return featuresPromise\n      }\n\n      return Promise.reject(false)\n    }\n\n    for (let j = 0; j < scene.imageryLayers.length; j++) {\n      const imageryProvider = scene.imageryLayers.get(j).imageryProvider\n      imageryProvider.pickFeatures = pickFeaturesHook.bind(undefined, imageryProvider, imageryProvider.pickFeatures)\n    }\n\n    return providerCoords\n  }\n\n  const computeScreenSpacePosition = (position: Cesium.Cartesian3, result: Cesium.Cartesian2) => {\n    const { viewer } = $services\n    return Cesium.SceneTransforms.wgs84ToWindowCoordinates(viewer.scene, position, result)\n  }\n\n  const update = () => {\n    const { defined, Cartesian2 } = Cesium\n    if (props.show && defined(position.value)) {\n      const screenPosition = computeScreenSpacePosition(position.value, new Cartesian2())\n      if (!defined(screenPosition)) {\n        // rootStyle.left = offScreen\n        // rootStyle.right = offScreen\n      } else {\n        const { viewer } = $services\n        const container = viewer.container\n        const containerWidth = container.clientWidth\n        const containerHeight = container.clientHeight\n        // const selectionIndicatorElement = $(rootRef)\n        // const indicatorSize = selectionIndicatorElement?.clientWidth || 0\n        const indicatorSize = props.width\n        const halfSize = indicatorSize * 0.5\n\n        screenPosition.x = Math.min(Math.max(screenPosition.x, -indicatorSize), containerWidth + indicatorSize) - halfSize\n        screenPosition.y = Math.min(Math.max(screenPosition.y, -indicatorSize), containerHeight + indicatorSize) - halfSize\n\n        rootStyle.left = Math.floor(screenPosition.x + 0.25) + 'px'\n        rootStyle.top = Math.floor(screenPosition.y + 0.25) + 'px'\n      }\n    }\n  }\n\n  const animateAppear = () => {\n    const { viewer } = $services\n    const { defined, EasingFunction } = Cesium\n    if (defined(selectionIndicatorTween)) {\n      if (selectionIndicatorIsAppearing) {\n        // Already appearing; don't restart the animation.\n        return\n      }\n      selectionIndicatorTween.cancelTween()\n      selectionIndicatorTween = undefined\n    }\n\n    selectionIndicatorIsAppearing = true\n\n    selectionIndicatorTween = viewer.scene.tweens.add({\n      startObject: {\n        scale: 2.0,\n        opacity: 0.0,\n        rotate: -180\n      },\n      stopObject: {\n        scale: 1.0,\n        opacity: 1.0,\n        rotate: 0\n      },\n      duration: 0.8,\n      easingFunction: EasingFunction.EXPONENTIAL_OUT,\n      update: function (value) {\n        rootStyle.opacity = value.opacity\n        rootStyle.transform = 'scale(' + value.scale + ') rotate(' + value.rotate + 'deg)'\n      },\n      complete: function () {\n        selectionIndicatorTween = undefined\n      },\n      cancel: function () {\n        selectionIndicatorTween = undefined\n      }\n    })\n  }\n\n  const animateDepart = () => {\n    const { viewer } = $services\n    const { defined, EasingFunction } = Cesium\n    if (defined(selectionIndicatorTween)) {\n      if (!selectionIndicatorIsAppearing) {\n        // Already disappearing, don't restart the animation.\n        return\n      }\n      selectionIndicatorTween.cancelTween()\n      selectionIndicatorTween = undefined\n    }\n\n    selectionIndicatorIsAppearing = false\n    selectionIndicatorTween = viewer.scene.tweens.add({\n      startObject: {\n        scale: 1.0,\n        opacity: 1.0\n      },\n      stopObject: {\n        scale: 1.5,\n        opacity: 0.0\n      },\n      duration: 0.8,\n      easingFunction: EasingFunction.EXPONENTIAL_OUT,\n      update: function (value) {\n        rootStyle.opacity = value.opacity\n        rootStyle.transform = 'scale(' + value.scale + ') rotate(0deg)'\n      },\n      complete: function () {\n        selectionIndicatorTween = undefined\n      },\n      cancel: function () {\n        selectionIndicatorTween = undefined\n      }\n    })\n  }\n\n  const onPostRender = () => {\n    update()\n  }\n\n  // life cycle\n  onUnmounted(() => {\n    unwatchFns.forEach(item => item())\n    unwatchFns = []\n  })\n\n  // expose public methods\n  Object.assign(instance.proxy, {\n    selectedFeature,\n    position,\n    computeScreenSpacePosition,\n    update,\n    animateAppear,\n    animateDepart,\n    getPickedFeatures: () => pickedFeatures\n  })\n\n  return {\n    pickFromScreenPosition,\n    rootRef,\n    rootStyle,\n    onPostRender\n  }\n}\n"],"names":["selectedFeature","pickedFeatures","position"],"mappings":"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"}