{"version":3,"file":"PrimitiveCluster.mjs","sources":["../../../../../packages/shared/src/PrimitiveCluster.ts"],"sourcesContent":["/*\n * @Author: zouyaoji@https://github.com/zouyaoji\n * @Date: 2023-05-26 13:30:22\n * @Description: Do not edit\n * @LastEditors: zouyaoji 370681295@qq.com\n * @LastEditTime: 2023-07-28 14:58:36\n * @FilePath: \\vue-cesium@next\\packages\\shared\\src\\PrimitiveCluster.ts\n */\nimport { defaultValue } from '@vue-cesium/utils/util'\nimport KDBush from 'kdbush'\nimport { VcPrimitiveClusterOptions } from '@vue-cesium/utils/types'\n\n/**\n * 图元聚合\n * https://github.com/tingyuxuan2302/cesium-vue3-vite/blob/github/src/utils/cesiumCtrl/primitiveCluster.js\n */\nexport default class PrimitiveCluster {\n  _enabled: boolean\n  _pixelRange: number\n  _minimumClusterSize: number\n  _clusterBillboards: boolean\n  _clusterLabels: boolean\n  _clusterPoints: boolean\n  _labelCollection: any\n  _billboardCollection: any\n  _pointCollection: any\n  _clusterBillboardCollection: any\n  _clusterLabelCollection: any\n  _clusterPointCollection: any\n  _collectionIndicesByEntity: any\n  _unusedLabelIndices: any[]\n  _unusedBillboardIndices: any[]\n  _unusedPointIndices: any[]\n  _previousClusters: any[]\n  _previousHeight: number\n  _enabledDirty: boolean\n  _clusterDirty: boolean\n  _cluster: any\n  _removeEventListener: Cesium.Event.RemoveCallback\n  _clusterEvent: Cesium.Event\n  show: boolean\n  _scene: Cesium.Scene\n  _pixelRangeDirty: boolean\n  _minimumClusterSizeDirty: boolean\n  constructor(options?: VcPrimitiveClusterOptions) {\n    options = defaultValue(options, {})\n\n    this._enabled = defaultValue(options.enabled, false)\n    this._pixelRange = defaultValue(options.pixelRange, 80)\n    this._minimumClusterSize = defaultValue(options.minimumClusterSize, 2)\n    this._clusterBillboards = defaultValue(options.clusterBillboards, true)\n    this._clusterLabels = defaultValue(options.clusterLabels, true)\n    this._clusterPoints = defaultValue(options.clusterPoints, true)\n\n    this._labelCollection = undefined\n    this._billboardCollection = undefined\n    this._pointCollection = undefined\n\n    this._clusterBillboardCollection = undefined\n    this._clusterLabelCollection = undefined\n    this._clusterPointCollection = undefined\n\n    this._collectionIndicesByEntity = {}\n\n    this._unusedLabelIndices = []\n    this._unusedBillboardIndices = []\n    this._unusedPointIndices = []\n\n    this._previousClusters = []\n    this._previousHeight = undefined\n\n    this._enabledDirty = false\n    this._clusterDirty = false\n\n    this._cluster = undefined\n    this._removeEventListener = undefined\n\n    this._clusterEvent = new Cesium.Event()\n\n    /**\n     * Determines if entities in this collection will be shown.\n     *\n     * @type {Boolean}\n     * @default true\n     */\n    this.show = defaultValue(options.show, true)\n  }\n\n  _initialize(scene: Cesium.Scene) {\n    this._scene = scene\n\n    const cluster = createDeclutterCallback(this)\n    this._cluster = cluster\n    this._removeEventListener = scene.camera.changed.addEventListener(cluster)\n  }\n\n  get enabled() {\n    return this._enabled\n  }\n\n  set enabled(value) {\n    this._enabledDirty = value !== this._enabled\n    this._enabled = value\n  }\n\n  get pixelRange() {\n    return this._pixelRange\n  }\n  set pixelRange(value) {\n    this._clusterDirty = this._clusterDirty || value !== this._pixelRange\n    this._pixelRange = value\n  }\n\n  get minimumClusterSize() {\n    return this._minimumClusterSize\n  }\n  set minimumClusterSize(value) {\n    this._clusterDirty = this._clusterDirty || value !== this._minimumClusterSize\n    this._minimumClusterSize = value\n  }\n\n  get clusterEvent() {\n    return this._clusterEvent\n  }\n\n  get clusterBillboards() {\n    return this._clusterBillboards\n  }\n  set clusterBillboards(value) {\n    this._clusterDirty = this._clusterDirty || value !== this._clusterBillboards\n    this._clusterBillboards = value\n  }\n\n  get clusterLabels() {\n    return this._clusterLabels\n  }\n  set clusterLabels(value) {\n    this._clusterDirty = this._clusterDirty || value !== this._clusterLabels\n    this._clusterLabels = value\n  }\n\n  get clusterPoints() {\n    return this._clusterPoints\n  }\n  set clusterPoints(value) {\n    this._clusterDirty = this._clusterDirty || value !== this._clusterPoints\n    this._clusterPoints = value\n  }\n\n  getLabel(entity) {\n    return createGetEntity.call(this, entity, '_labelCollection', Cesium.LabelCollection, '_unusedLabelIndices', 'labelIndex')\n  }\n\n  removeLabel(entity) {\n    const { defined } = Cesium\n    const entityIndices = this._collectionIndicesByEntity && this._collectionIndicesByEntity[entity.id]\n    if (!defined(this._labelCollection) || !defined(entityIndices) || !defined(entityIndices.labelIndex)) {\n      return\n    }\n\n    const index = entityIndices.labelIndex\n    entityIndices.labelIndex = undefined\n    removeEntityIndicesIfUnused(this, entity.id)\n\n    const label = this._labelCollection.get(index)\n    label.show = false\n    label.text = ''\n    label.id = undefined\n\n    this._unusedLabelIndices.push(index)\n\n    this._clusterDirty = true\n  }\n\n  getBillboard(entity) {\n    return createGetEntity.call(this, entity, '_billboardCollection', Cesium.BillboardCollection, '_unusedBillboardIndices', 'billboardIndex')\n  }\n\n  removeBillboard(entity) {\n    const { defined } = Cesium\n    const entityIndices = this._collectionIndicesByEntity && this._collectionIndicesByEntity[entity.id]\n    if (!defined(this._billboardCollection) || !defined(entityIndices) || !defined(entityIndices.billboardIndex)) {\n      return\n    }\n\n    const index = entityIndices.billboardIndex\n    entityIndices.billboardIndex = undefined\n    removeEntityIndicesIfUnused(this, entity.id)\n\n    const billboard = this._billboardCollection.get(index)\n    billboard.id = undefined\n    billboard.show = false\n    billboard.image = undefined\n\n    this._unusedBillboardIndices.push(index)\n\n    this._clusterDirty = true\n  }\n\n  getPoint(entity) {\n    return createGetEntity.call(this, entity, '_pointCollection', Cesium.PointPrimitiveCollection, '_unusedPointIndices', 'pointIndex')\n  }\n\n  removePoint(entity) {\n    const { defined } = Cesium\n    const entityIndices = this._collectionIndicesByEntity && this._collectionIndicesByEntity[entity.id]\n    if (!defined(this._pointCollection) || !defined(entityIndices) || !defined(entityIndices.pointIndex)) {\n      return\n    }\n\n    const index = entityIndices.pointIndex\n    entityIndices.pointIndex = undefined\n    removeEntityIndicesIfUnused(this, entity.id)\n\n    const point = this._pointCollection.get(index)\n    point.show = false\n    point.id = undefined\n\n    this._unusedPointIndices.push(index)\n\n    this._clusterDirty = true\n  }\n\n  update(frameState) {\n    if (!this.show) {\n      return\n    }\n\n    const { defined } = Cesium\n\n    // If clustering is enabled before the label collection is updated,\n    // the glyphs haven't been created so the screen space bounding boxes\n    // are incorrect.\n    let commandList\n    if (defined(this._labelCollection) && this._labelCollection.length > 0 && this._labelCollection.get(0)._glyphs.length === 0) {\n      commandList = frameState.commandList\n      frameState.commandList = []\n      this._labelCollection.update(frameState)\n      frameState.commandList = commandList\n    }\n\n    // If clustering is enabled before the billboard collection is updated,\n    // the images haven't been added to the image atlas so the screen space bounding boxes\n    // are incorrect.\n    if (defined(this._billboardCollection) && this._billboardCollection.length > 0 && !defined(this._billboardCollection.get(0).width)) {\n      commandList = frameState.commandList\n      frameState.commandList = []\n      this._billboardCollection.update(frameState)\n      frameState.commandList = commandList\n    }\n\n    if (this._enabledDirty) {\n      this._enabledDirty = false\n      updateEnable(this)\n      this._clusterDirty = true\n    }\n\n    if (this._clusterDirty) {\n      this._clusterDirty = false\n      this._cluster()\n    }\n\n    if (defined(this._clusterLabelCollection)) {\n      this._clusterLabelCollection.update(frameState)\n    }\n    if (defined(this._clusterBillboardCollection)) {\n      this._clusterBillboardCollection.update(frameState)\n    }\n    if (defined(this._clusterPointCollection)) {\n      this._clusterPointCollection.update(frameState)\n    }\n\n    if (defined(this._labelCollection)) {\n      this._labelCollection.update(frameState)\n    }\n    if (defined(this._billboardCollection)) {\n      this._billboardCollection.update(frameState)\n    }\n    if (defined(this._pointCollection)) {\n      this._pointCollection.update(frameState)\n    }\n  }\n\n  destroy() {\n    const { defined } = Cesium\n    this._labelCollection = this._labelCollection && this._labelCollection.destroy()\n    this._billboardCollection = this._billboardCollection && this._billboardCollection.destroy()\n    this._pointCollection = this._pointCollection && this._pointCollection.destroy()\n\n    this._clusterLabelCollection = this._clusterLabelCollection && this._clusterLabelCollection.destroy()\n    this._clusterBillboardCollection = this._clusterBillboardCollection && this._clusterBillboardCollection.destroy()\n    this._clusterPointCollection = this._clusterPointCollection && this._clusterPointCollection.destroy()\n\n    if (defined(this._removeEventListener)) {\n      this._removeEventListener()\n      this._removeEventListener = undefined\n    }\n\n    this._labelCollection = undefined\n    this._billboardCollection = undefined\n    this._pointCollection = undefined\n\n    this._clusterBillboardCollection = undefined\n    this._clusterLabelCollection = undefined\n    this._clusterPointCollection = undefined\n\n    this._collectionIndicesByEntity = undefined\n\n    this._unusedLabelIndices = []\n    this._unusedBillboardIndices = []\n    this._unusedPointIndices = []\n\n    this._previousClusters = []\n    this._previousHeight = undefined\n\n    this._enabledDirty = false\n    this._pixelRangeDirty = false\n    this._minimumClusterSizeDirty = false\n\n    return undefined\n  }\n}\n\nfunction updateEnable(entityCluster) {\n  if (entityCluster.enabled) {\n    return\n  }\n\n  const { defined } = Cesium\n\n  if (defined(entityCluster._clusterLabelCollection)) {\n    entityCluster._clusterLabelCollection.destroy()\n  }\n  if (defined(entityCluster._clusterBillboardCollection)) {\n    entityCluster._clusterBillboardCollection.destroy()\n  }\n  if (defined(entityCluster._clusterPointCollection)) {\n    entityCluster._clusterPointCollection.destroy()\n  }\n\n  entityCluster._clusterLabelCollection = undefined\n  entityCluster._clusterBillboardCollection = undefined\n  entityCluster._clusterPointCollection = undefined\n\n  disableCollectionClustering(entityCluster._labelCollection)\n  disableCollectionClustering(entityCluster._billboardCollection)\n  disableCollectionClustering(entityCluster._pointCollection)\n}\n\nfunction disableCollectionClustering(collection) {\n  const { defined } = Cesium\n\n  if (!defined(collection)) {\n    return\n  }\n\n  const length = collection.length\n  for (let i = 0; i < length; ++i) {\n    collection.get(i).clusterShow = true\n  }\n}\n\nfunction createGetEntity(this, entity, collectionProperty, CollectionConstructor, unusedIndicesProperty, entityIndexProperty) {\n  const { defined } = Cesium\n  let collection = this[collectionProperty]\n\n  if (!defined(this._collectionIndicesByEntity)) {\n    this._collectionIndicesByEntity = {}\n  }\n\n  let entityIndices = this._collectionIndicesByEntity[entity.id]\n\n  if (!defined(entityIndices)) {\n    entityIndices = this._collectionIndicesByEntity[entity.id] = {\n      billboardIndex: undefined,\n      labelIndex: undefined,\n      pointIndex: undefined\n    }\n  }\n\n  if (defined(collection) && defined(entityIndices[entityIndexProperty])) {\n    return collection.get(entityIndices[entityIndexProperty])\n  }\n\n  if (!defined(collection)) {\n    collection = this[collectionProperty] = new CollectionConstructor({\n      scene: this._scene\n    })\n  }\n\n  let index\n  let entityItem\n\n  const unusedIndices = this[unusedIndicesProperty]\n  if (unusedIndices.length > 0) {\n    index = unusedIndices.pop()\n    entityItem = collection.get(index)\n  } else {\n    entityItem = collection.add()\n    index = collection.length - 1\n  }\n\n  entityIndices[entityIndexProperty] = index\n\n  const that = this\n  Promise.resolve().then(function () {\n    that._clusterDirty = true\n  })\n\n  return entityItem\n}\n\nfunction removeEntityIndicesIfUnused(entityCluster, entityId) {\n  const { defined } = Cesium\n  const indices = entityCluster._collectionIndicesByEntity[entityId]\n\n  if (!defined(indices.billboardIndex) && !defined(indices.labelIndex) && !defined(indices.pointIndex)) {\n    delete entityCluster._collectionIndicesByEntity[entityId]\n  }\n}\n\nfunction getX(point) {\n  return point.coord.x\n}\n\nfunction getY(point) {\n  return point.coord.y\n}\n\nfunction expandBoundingBox(bbox, pixelRange) {\n  bbox.x -= pixelRange\n  bbox.y -= pixelRange\n  bbox.width += pixelRange * 2.0\n  bbox.height += pixelRange * 2.0\n}\n\nfunction getBoundingBox(item, coord, pixelRange, entityCluster, result) {\n  const { defined, Label, Billboard, PointPrimitive, BoundingRectangle } = Cesium\n  const labelBoundingBoxScratch = new BoundingRectangle()\n  if (defined(item._labelCollection) && entityCluster._clusterLabels) {\n    result = Label['getScreenSpaceBoundingBox'](item, coord, result)\n  } else if (defined(item._billboardCollection) && entityCluster._clusterBillboards) {\n    result = Billboard['getScreenSpaceBoundingBox'](item, coord, result)\n  } else if (defined(item._pointPrimitiveCollection) && entityCluster._clusterPoints) {\n    result = PointPrimitive['getScreenSpaceBoundingBox'](item, coord, result)\n  }\n\n  expandBoundingBox(result, pixelRange)\n\n  if (\n    entityCluster._clusterLabels &&\n    !defined(item._labelCollection) &&\n    defined(item.id) &&\n    hasLabelIndex(entityCluster, item.id.id) &&\n    defined(item.id._label)\n  ) {\n    const labelIndex = entityCluster._collectionIndicesByEntity[item.id.id].labelIndex\n    const label = entityCluster._labelCollection.get(labelIndex)\n    const labelBBox = Label['getScreenSpaceBoundingBox'](label, coord, labelBoundingBoxScratch)\n    expandBoundingBox(labelBBox, pixelRange)\n    result = BoundingRectangle.union(result, labelBBox, result)\n  }\n\n  return result\n}\n\nfunction addNonClusteredItem(item, entityCluster) {\n  const { defined } = Cesium\n  item.clusterShow = true\n\n  if (!defined(item._labelCollection) && defined(item.id) && hasLabelIndex(entityCluster, item.id.id) && defined(item.id._label)) {\n    const labelIndex = entityCluster._collectionIndicesByEntity[item.id.id].labelIndex\n    const label = entityCluster._labelCollection.get(labelIndex)\n    label.clusterShow = true\n  }\n}\n\nfunction addCluster(position, numPoints, ids, entityCluster) {\n  const cluster = {\n    billboard: entityCluster._clusterBillboardCollection.add(),\n    label: entityCluster._clusterLabelCollection.add(),\n    point: entityCluster._clusterPointCollection.add()\n  }\n\n  cluster.billboard.show = false\n  cluster.point.show = false\n  cluster.label.show = true\n  cluster.label.text = numPoints.toLocaleString()\n  cluster.label.id = ids\n  cluster.billboard.position = cluster.label.position = cluster.point.position = position\n  cluster.billboard.owner = entityCluster\n  cluster.label.owner = entityCluster\n  cluster.point.owner = entityCluster\n\n  entityCluster._clusterEvent.raiseEvent(ids, cluster)\n}\n\nfunction hasLabelIndex(entityCluster, entityId) {\n  const { defined } = Cesium\n  return (\n    defined(entityCluster) &&\n    defined(entityCluster._collectionIndicesByEntity[entityId]) &&\n    defined(entityCluster._collectionIndicesByEntity[entityId].labelIndex)\n  )\n}\n\nfunction getScreenSpacePositions(collection, points, scene, occluder, entityCluster) {\n  const { defined, SceneMode } = Cesium\n  if (!defined(collection)) {\n    return\n  }\n\n  const length = collection.length\n  for (let i = 0; i < length; ++i) {\n    const item = collection.get(i)\n    item.clusterShow = false\n\n    if (!item.show || (entityCluster._scene.mode === SceneMode.SCENE3D && !occluder.isPointVisible(item.position))) {\n      continue\n    }\n\n    // const canClusterLabels =\n    //   entityCluster._clusterLabels && defined(item._labelCollection);\n    // const canClusterBillboards =\n    //   entityCluster._clusterBillboards && defined(item.id._billboard);\n    // const canClusterPoints =\n    //   entityCluster._clusterPoints && defined(item.id._point);\n    // if (canClusterLabels && (canClusterPoints || canClusterBillboards)) {\n    //   continue;\n    // }\n\n    const coord = item.computeScreenSpacePosition(scene)\n    if (!defined(coord)) {\n      continue\n    }\n\n    points.push({\n      index: i,\n      collection: collection,\n      clustered: false,\n      coord: coord\n    })\n  }\n}\n\nfunction createDeclutterCallback(entityCluster) {\n  const { defined, LabelCollection, BillboardCollection, PointPrimitiveCollection, Billboard, Matrix4, Cartesian3, Cartesian2, BoundingRectangle } =\n    Cesium\n\n  const pointBoundinRectangleScratch = new BoundingRectangle()\n  const totalBoundingRectangleScratch = new BoundingRectangle()\n  const neighborBoundingRectangleScratch = new BoundingRectangle()\n\n  return function (amount) {\n    if ((defined(amount) && amount < 0.05) || !entityCluster.enabled) {\n      return\n    }\n\n    const scene = entityCluster._scene\n\n    const labelCollection = entityCluster._labelCollection\n    const billboardCollection = entityCluster._billboardCollection\n    const pointCollection = entityCluster._pointCollection\n\n    if (\n      (!defined(labelCollection) && !defined(billboardCollection) && !defined(pointCollection)) ||\n      (!entityCluster._clusterBillboards && !entityCluster._clusterLabels && !entityCluster._clusterPoints)\n    ) {\n      return\n    }\n\n    let clusteredLabelCollection = entityCluster._clusterLabelCollection\n    let clusteredBillboardCollection = entityCluster._clusterBillboardCollection\n    let clusteredPointCollection = entityCluster._clusterPointCollection\n\n    if (defined(clusteredLabelCollection)) {\n      clusteredLabelCollection.removeAll()\n    } else {\n      clusteredLabelCollection = entityCluster._clusterLabelCollection = new LabelCollection({\n        scene: scene\n      })\n    }\n\n    if (defined(clusteredBillboardCollection)) {\n      clusteredBillboardCollection.removeAll()\n    } else {\n      clusteredBillboardCollection = entityCluster._clusterBillboardCollection = new BillboardCollection({\n        scene: scene\n      })\n    }\n\n    if (defined(clusteredPointCollection)) {\n      clusteredPointCollection.removeAll()\n    } else {\n      clusteredPointCollection = entityCluster._clusterPointCollection = new PointPrimitiveCollection()\n    }\n\n    const pixelRange = entityCluster._pixelRange\n    const minimumClusterSize = entityCluster._minimumClusterSize\n\n    const clusters = entityCluster._previousClusters\n    const newClusters = []\n\n    const previousHeight = entityCluster._previousHeight\n    const currentHeight = scene.camera.positionCartographic.height\n\n    const ellipsoid = scene.mapProjection.ellipsoid\n    const cameraPosition = scene.camera.positionWC\n    const occluder = new Cesium['EllipsoidalOccluder'](ellipsoid, cameraPosition)\n\n    const points = []\n    if (entityCluster._clusterLabels) {\n      getScreenSpacePositions(labelCollection, points, scene, occluder, entityCluster)\n    }\n    if (entityCluster._clusterBillboards) {\n      getScreenSpacePositions(billboardCollection, points, scene, occluder, entityCluster)\n    }\n    if (entityCluster._clusterPoints) {\n      getScreenSpacePositions(pointCollection, points, scene, occluder, entityCluster)\n    }\n\n    let i\n    let j\n    let length\n    let bbox\n    let neighbors\n    let neighborLength\n    let neighborIndex\n    let neighborPoint\n    let ids\n    let numPoints\n\n    let collection\n    let collectionIndex\n\n    const index = new KDBush(points, getX, getY, 64, Int32Array)\n\n    if (currentHeight < previousHeight) {\n      length = clusters.length\n      for (i = 0; i < length; ++i) {\n        const cluster = clusters[i]\n\n        if (!occluder.isPointVisible(cluster.position)) {\n          continue\n        }\n\n        const coord = Billboard['_computeScreenSpacePosition'](Matrix4.IDENTITY, cluster.position, Cartesian3.ZERO, Cartesian2.ZERO, scene)\n        if (!defined(coord)) {\n          continue\n        }\n\n        const factor = 1.0 - currentHeight / previousHeight\n        let width = (cluster.width = cluster.width * factor)\n        let height = (cluster.height = cluster.height * factor)\n\n        width = Math.max(width, cluster.minimumWidth)\n        height = Math.max(height, cluster.minimumHeight)\n\n        const minX = coord.x - width * 0.5\n        const minY = coord.y - height * 0.5\n        const maxX = coord.x + width\n        const maxY = coord.y + height\n\n        neighbors = index.range(minX, minY, maxX, maxY)\n        neighborLength = neighbors.length\n        numPoints = 0\n        ids = []\n\n        for (j = 0; j < neighborLength; ++j) {\n          neighborIndex = neighbors[j]\n          neighborPoint = points[neighborIndex]\n          if (!neighborPoint.clustered) {\n            ++numPoints\n\n            collection = neighborPoint.collection\n            collectionIndex = neighborPoint.index\n            ids.push(collection.get(collectionIndex).id)\n          }\n        }\n\n        if (numPoints >= minimumClusterSize) {\n          addCluster(cluster.position, numPoints, ids, entityCluster)\n          newClusters.push(cluster)\n\n          for (j = 0; j < neighborLength; ++j) {\n            points[neighbors[j]].clustered = true\n          }\n        }\n      }\n    }\n\n    length = points.length\n    for (i = 0; i < length; ++i) {\n      const point = points[i]\n      if (point.clustered) {\n        continue\n      }\n\n      point.clustered = true\n\n      collection = point.collection\n      collectionIndex = point.index\n\n      const item = collection.get(collectionIndex)\n      bbox = getBoundingBox(item, point.coord, pixelRange, entityCluster, pointBoundinRectangleScratch)\n      const totalBBox = BoundingRectangle.clone(bbox, totalBoundingRectangleScratch)\n\n      neighbors = index.range(bbox.x, bbox.y, bbox.x + bbox.width, bbox.y + bbox.height)\n      neighborLength = neighbors.length\n\n      const clusterPosition = Cartesian3.clone(item.position)\n      numPoints = 1\n      ids = [item.id]\n\n      for (j = 0; j < neighborLength; ++j) {\n        neighborIndex = neighbors[j]\n        neighborPoint = points[neighborIndex]\n        if (!neighborPoint.clustered) {\n          const neighborItem = neighborPoint.collection.get(neighborPoint.index)\n          const neighborBBox = getBoundingBox(neighborItem, neighborPoint.coord, pixelRange, entityCluster, neighborBoundingRectangleScratch)\n\n          Cartesian3.add(neighborItem.position, clusterPosition, clusterPosition)\n\n          BoundingRectangle.union(totalBBox, neighborBBox, totalBBox)\n          ++numPoints\n\n          ids.push(neighborItem.id)\n        }\n      }\n\n      if (numPoints >= minimumClusterSize) {\n        const position = Cartesian3.multiplyByScalar(clusterPosition, 1.0 / numPoints, clusterPosition)\n        addCluster(position, numPoints, ids, entityCluster)\n        newClusters.push({\n          position: position,\n          width: totalBBox.width,\n          height: totalBBox.height,\n          minimumWidth: bbox.width,\n          minimumHeight: bbox.height\n        })\n\n        for (j = 0; j < neighborLength; ++j) {\n          points[neighbors[j]].clustered = true\n        }\n      } else {\n        addNonClusteredItem(item, entityCluster)\n      }\n    }\n\n    if (clusteredLabelCollection.length === 0) {\n      clusteredLabelCollection.destroy()\n      entityCluster._clusterLabelCollection = undefined\n    }\n\n    if (clusteredBillboardCollection.length === 0) {\n      clusteredBillboardCollection.destroy()\n      entityCluster._clusterBillboardCollection = undefined\n    }\n\n    if (clusteredPointCollection.length === 0) {\n      clusteredPointCollection.destroy()\n      entityCluster._clusterPointCollection = undefined\n    }\n\n    entityCluster._previousClusters = newClusters\n    entityCluster._previousHeight = currentHeight\n  }\n}\n"],"names":[],"mappings":"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"}