{"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'\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<any>(null)\n  const selectedFeature = ref<any>(null)\n  let unwatchFns: Array<WatchStopHandle> = []\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            }\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 ? scene.imageryLayers.pickImageryLayerFeatures(pickRay, scene) : Promise.resolve()\n\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, when } = Cesium\n    ignoreSplitter = defaultValue(ignoreSplitter, false)\n    const result = new PickedFeatures()\n\n    result.providerCoords = providerCoords\n    result.pickPosition = pickPosition\n\n    result.allFeaturesAvailablePromise = when\n      .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      .otherwise(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            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            continue\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, result) => {\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    pickedFeatures,\n    position,\n    computeScreenSpacePosition,\n    update,\n    animateAppear,\n    animateDepart\n  })\n\n  return {\n    pickFromScreenPosition,\n    rootRef,\n    rootStyle,\n    onPostRender\n  }\n}\n"],"names":[],"mappings":"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"}