@vcmap/core 6.1.2 → 6.1.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,10 +1,10 @@
1
- import { Cartographic, Cartesian3, Math as CesiumMath, Cesium3DTileFeature, Cesium3DTilePointFeature, Entity, } from '@vcmap-cesium/engine';
1
+ import { Cartesian3, Cesium3DTileFeature, Cesium3DTilePointFeature, Entity, } from '@vcmap-cesium/engine';
2
2
  import AbstractInteraction from './abstractInteraction.js';
3
- import Projection from '../util/projection.js';
4
3
  import { EventType, ModificationKeyType, PointerKeyType, } from './interactionType.js';
5
4
  import { allowPicking, vcsLayerName } from '../layer/layerSymbols.js';
6
5
  import { originalFeatureSymbol, primitives } from '../layer/vectorSymbols.js';
7
6
  import { vectorClusterGroupName } from '../vectorCluster/vectorClusterSymbols.js';
7
+ import { cartesianToMercator } from '../util/math.js';
8
8
  function getFeatureFromOlMap(map, pixel, hitTolerance) {
9
9
  let feature;
10
10
  map.forEachFeatureAtPixel(pixel, (feat) => {
@@ -67,6 +67,24 @@ function getFeatureFromScene(scene, windowPosition, hitTolerance) {
67
67
  }
68
68
  return { pickObject, feature };
69
69
  }
70
+ const MAX_UNDERGROUND_FEATURE_DEPTH_SQRD = 1000 ** 2;
71
+ function getPositionFromScene(scene, windowPosition, ray, primitivesToExclude) {
72
+ if (primitivesToExclude) {
73
+ const intersection = scene.pickFromRay(ray, primitivesToExclude);
74
+ if (intersection?.position) {
75
+ if (scene.globe.translucency.enabled) {
76
+ const globeIntersection = scene.globe.pick(ray, scene);
77
+ if (globeIntersection &&
78
+ Cartesian3.distanceSquared(globeIntersection, intersection.position) >
79
+ MAX_UNDERGROUND_FEATURE_DEPTH_SQRD) {
80
+ return globeIntersection;
81
+ }
82
+ }
83
+ return intersection.position;
84
+ }
85
+ }
86
+ return scene.pickPosition(windowPosition);
87
+ }
70
88
  /**
71
89
  * @group Interaction
72
90
  */
@@ -159,29 +177,7 @@ class FeatureAtPixelInteraction extends AbstractInteraction {
159
177
  if (feature) {
160
178
  event.feature = feature;
161
179
  }
162
- let scratchCartographic = new Cartographic();
163
- let scratchCartesian = new Cartesian3();
164
- let scratchPullCartesian = new Cartesian3();
165
180
  const { pickTranslucentDepth } = scene;
166
- const handlePick = () => {
167
- if (!scratchCartesian) {
168
- scratchCartesian = new Cartesian3();
169
- return Promise.resolve(event);
170
- }
171
- if (this.pullPickedPosition && event.ray) {
172
- scratchPullCartesian = Cartesian3.multiplyByScalar(event.ray.direction, this.pullPickedPosition, scratchPullCartesian);
173
- scratchCartesian = Cartesian3.subtract(scratchCartesian, scratchPullCartesian, scratchCartesian);
174
- }
175
- scratchCartographic = Cartographic.fromCartesian(scratchCartesian, scene.globe.ellipsoid, scratchCartographic);
176
- event.position = Projection.wgs84ToMercator([
177
- CesiumMath.toDegrees(scratchCartographic.longitude),
178
- CesiumMath.toDegrees(scratchCartographic.latitude),
179
- scratchCartographic.height,
180
- ], true);
181
- event.positionOrPixel = event.position;
182
- scene.pickTranslucentDepth = pickTranslucentDepth;
183
- return Promise.resolve(event);
184
- };
185
181
  if (!(event.type & this.pickPosition)) {
186
182
  return Promise.resolve(event);
187
183
  }
@@ -190,21 +186,27 @@ class FeatureAtPixelInteraction extends AbstractInteraction {
190
186
  scene.pickTranslucentDepth = true;
191
187
  event.exactPosition = true;
192
188
  }
189
+ let primitivesToExclude;
193
190
  if (feature &&
194
191
  feature[primitives] &&
195
192
  this._excludeFromPickPosition.has(feature)) {
196
- const primitivesToExclude = [...this._excludeFromPickPosition]
193
+ primitivesToExclude = [...this._excludeFromPickPosition]
197
194
  .flatMap((f) => f[primitives])
198
195
  .filter((f) => !!f);
199
- const intersection = scene.pickFromRay(event.ray, primitivesToExclude);
200
- if (intersection?.position) {
201
- scratchCartesian = intersection.position;
202
- }
203
196
  }
204
- else {
205
- scratchCartesian = scene.pickPosition(event.windowPosition, scratchCartesian);
197
+ const cartesianPosition = getPositionFromScene(scene, event.windowPosition, event.ray, primitivesToExclude);
198
+ if (!cartesianPosition ||
199
+ Cartesian3.equals(cartesianPosition, Cartesian3.ZERO)) {
200
+ return Promise.resolve(event);
201
+ }
202
+ if (this.pullPickedPosition && event.ray) {
203
+ const pulledCartesian = Cartesian3.multiplyByScalar(event.ray.direction, this.pullPickedPosition, new Cartesian3());
204
+ Cartesian3.subtract(cartesianPosition, pulledCartesian, cartesianPosition);
206
205
  }
207
- return handlePick();
206
+ event.position = cartesianToMercator(cartesianPosition);
207
+ event.positionOrPixel = event.position.slice();
208
+ scene.pickTranslucentDepth = pickTranslucentDepth;
209
+ return Promise.resolve(event);
208
210
  }
209
211
  return Promise.resolve(event);
210
212
  }
@@ -1 +1 @@
1
- {"version":3,"file":"featureAtPixelInteraction.js","sourceRoot":"","sources":["../../../src/interaction/featureAtPixelInteraction.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,YAAY,EACZ,UAAU,EACV,IAAI,IAAI,UAAU,EAClB,mBAAmB,EACnB,wBAAwB,EACxB,MAAM,GAGP,MAAM,sBAAsB,CAAC;AAG9B,OAAO,mBAGN,MAAM,0BAA0B,CAAC;AAClC,OAAO,UAAU,MAAM,uBAAuB,CAAC;AAC/C,OAAO,EACL,SAAS,EACT,mBAAmB,EACnB,cAAc,GACf,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACtE,OAAO,EAAE,qBAAqB,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAI9E,OAAO,EAAE,sBAAsB,EAAE,MAAM,0CAA0C,CAAC;AAiBlF,SAAS,mBAAmB,CAC1B,GAAU,EACV,KAAuB,EACvB,YAAoB;IAEpB,IAAI,OAA4B,CAAC;IACjC,GAAG,CAAC,qBAAqB,CACvB,KAAK,EACL,CAAC,IAAI,EAAE,EAAE;QACP,IAAI,gBAAgB,GAAG,IAAI,CAAC;QAC5B,IACE,gBAAgB;YAChB,CAAC,gBAAgB,CAAC,GAAG,CAAC,mBAAmB,CAAC,IAAI,IAAI;gBAChD,gBAAgB,CAAC,GAAG,CAAC,mBAAmB,CAAC,KAAK,IAAI,CAAC,EACrD,CAAC;YACD,IAAK,gBAA4B,CAAC,sBAAsB,CAAC,EAAE,CAAC;gBAC1D,MAAM,QAAQ,GAAG,gBAAgB,CAAC,GAAG,CAAC,UAAU,CAAc,CAAC;gBAC/D,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;oBAC1B,gBAAgB,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;gBACjC,CAAC;YACH,CAAC;YACD,OAAO;gBACJ,gBAA4B,CAAC,qBAAqB,CAAC;oBACnD,gBAA4B,CAAC;QAClC,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC,EACD,EAAE,YAAY,EAAE,CACjB,CAAC;IAEF,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,UAAU,wBAAwB,CACtC,MAAwB;IAExB,IAAI,OAAiC,CAAC;IACtC,IAAI,MAAM,CAAC,SAAS,IAAI,MAAM,CAAC,SAAS,CAAC,SAAS,EAAE,CAAC;QACnD,OAAO,GAAG,MAAM,CAAC,SAAS,CAAC,SAAS,CAAC;IACvC,CAAC;SAAM,IACL,MAAM,CAAC,SAAS;QAChB,MAAM,CAAC,SAAS,CAAC,YAAY,CAAC;QAC9B,CAAC,MAAM,YAAY,mBAAmB;YACpC,MAAM,YAAY,wBAAwB,CAAC;QAC7C,MAAM,CAAC,SAAS,CAAC,YAAY,CAAC,KAAK,KAAK,EACxC,CAAC;QACD,oBAAoB;QACpB,OAAO,GAAG,MAAM,CAAC;QACjB,MAAM,OAAO,GAAG,MAAM,CAAC,qBAAqB,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QAC/D,MAAM,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC;QACpC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,EAAE,CAAC,EAAE,EAAE,CAAC;YACtC,6DAA6D;YAC7D,aAAa;YACb,mEAAmE;YACnE,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;QACrD,CAAC;IACH,CAAC;SAAM,IAAI,MAAM,CAAC,EAAE,IAAI,MAAM,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC;QAC5C,qBAAqB;QACrB,OAAO,GAAG,MAAM,CAAC,EAAE,CAAC,SAAS,CAAC;IAChC,CAAC;SAAM,IACL,MAAM,CAAC,EAAE;QACT,MAAM,CAAC,EAAE,CAAC,YAAY,CAAC;QACvB,MAAM,CAAC,EAAE,YAAY,MAAM,EAC3B,CAAC;QACD,SAAS;QACT,OAAO,GAAG,MAAM,CAAC,EAAE,CAAC;IACtB,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,mBAAmB,CAC1B,KAAY,EACZ,cAA0B,EAC1B,YAAoB;IAEpB,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,cAAc,EAAE,YAAY,EAAE,YAAY,CAE3D,CAAC;IAEd,IAAI,OAAiC,CAAC;IACtC,IAAI,UAAU,EAAE,CAAC;QACf,OAAO,GAAG,wBAAwB,CAAC,UAAU,CAAC,CAAC;IACjD,CAAC;IACD,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC;AACjC,CAAC;AAED;;GAEG;AACH,MAAM,yBAA0B,SAAQ,mBAAmB;IACzD;;OAEG;IACH,YAAY,GAAG,SAAS,CAAC,KAAK,CAAC;IAE/B;;OAEG;IACH,eAAe,GAAG,IAAI,CAAC;IAEvB;;OAEG;IACH,kBAAkB,GAAG,CAAC,CAAC;IAEvB;;OAEG;IACH,YAAY,GAAG,EAAE,CAAC;IAEV,gBAAgB,CAA2B;IAE3C,wBAAwB,GAAiB,IAAI,GAAG,EAAE,CAAC;IAE3D;QACE,KAAK,CACH,SAAS,CAAC,GAAG,GAAG,SAAS,CAAC,IAAI,EAC9B,mBAAmB,CAAC,GAAG,EACvB,cAAc,CAAC,GAAG,CACnB,CAAC;QACF,IAAI,CAAC,SAAS,EAAE,CAAC;IACnB,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,KAAuB;QAChC,IAAI,KAAK,CAAC,IAAI,GAAG,SAAS,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,CAAC,YAAY,GAAG,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC;YACzE,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;gBAC1B,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,gBAAgB,CAAC;YACxC,CAAC;YACD,OAAO,KAAK,CAAC;QACf,CAAC;QAED,IAAI,KAAK,CAAC,IAAI,GAAG,SAAS,CAAC,OAAO,EAAE,CAAC;YACnC,IAAI,CAAC,gBAAgB,GAAG,SAAS,CAAC;QACpC,CAAC;QAED,IAAI,KAAK,CAAC,GAAG,CAAC,SAAS,KAAK,eAAe,EAAE,CAAC;YAC5C,MAAM,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC;QACvC,CAAC;aAAM,IAAI,KAAK,CAAC,GAAG,CAAC,SAAS,KAAK,YAAY,EAAE,CAAC;YAChD,MAAM,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;QACpC,CAAC;aAAM,IAAI,KAAK,CAAC,GAAG,CAAC,SAAS,KAAK,WAAW,EAAE,CAAC;YAC/C,MAAM,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;QACnC,CAAC;QACD,IAAI,KAAK,CAAC,IAAI,GAAG,SAAS,CAAC,SAAS,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;YACtD,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC,OAAO,CAAC;QACxC,CAAC;QAED,IAAI,KAAK,CAAC,IAAI,GAAG,SAAS,CAAC,IAAI,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACzD,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,gBAAgB,CAAC;QACxC,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,SAAS,CAAC,MAAyB;QACjC,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE,CAAC;YAClC,IAAI,CAAC,YAAY,GAAG,SAAS,CAAC,KAAK,CAAC;YACpC,IAAI,CAAC,kBAAkB,GAAG,CAAC,CAAC;QAC9B,CAAC;QACD,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;IAC1B,CAAC;IAED,uBAAuB,CAAC,OAAgB;QACtC,IAAI,CAAC,wBAAwB,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IAC7C,CAAC;IAED,qBAAqB,CAAC,OAAgB;QACpC,IAAI,CAAC,wBAAwB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAChD,CAAC;IAEO,kBAAkB,CACxB,KAAuB;QAEvB,MAAM,OAAO,GAAG,mBAAmB,CAChC,KAAK,CAAC,GAAqB,CAAC,KAAM,EACnC,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,EAAE,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,EAChD,IAAI,CAAC,YAAY,CAClB,CAAC;QAEF,IAAI,OAAO,EAAE,CAAC;YACZ,KAAK,CAAC,OAAO,GAAG,OAAO,CAAC;YACxB,KAAK,CAAC,aAAa,GAAG,IAAI,CAAC;QAC7B,CAAC;QACD,OAAO,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAChC,CAAC;IAEO,eAAe,CAAC,KAAuB;QAC7C,MAAM,OAAO,GAAG,mBAAmB,CAChC,KAAK,CAAC,GAAkB,CAAC,KAAM,EAChC,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,EAAE,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,EAChD,IAAI,CAAC,YAAY,CAClB,CAAC;QAEF,IAAI,OAAO,EAAE,CAAC;YACZ,KAAK,CAAC,OAAO,GAAG,OAAO,CAAC;YACxB,KAAK,CAAC,aAAa,GAAG,IAAI,CAAC;QAC7B,CAAC;QACD,OAAO,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAChC,CAAC;IAEO,cAAc,CAAC,KAAuB;QAC5C,MAAM,SAAS,GAAG,KAAK,CAAC,GAAgB,CAAC;QACzC,MAAM,KAAK,GAAG,SAAS,CAAC,QAAQ,EAAE,CAAC;QAEnC,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,OAAO,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAChC,CAAC;QAED,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,GAAG,mBAAmB,CACjD,KAAK,EACL,KAAK,CAAC,cAAc,EACpB,IAAI,CAAC,YAAY,CAClB,CAAC;QAEF,IAAI,OAAO,EAAE,CAAC;YACZ,KAAK,CAAC,OAAO,GAAG,OAAO,CAAC;QAC1B,CAAC;QAED,IAAI,mBAAmB,GAAG,IAAI,YAAY,EAAE,CAAC;QAC7C,IAAI,gBAAgB,GAAG,IAAI,UAAU,EAAE,CAAC;QACxC,IAAI,oBAAoB,GAAG,IAAI,UAAU,EAAE,CAAC;QAC5C,MAAM,EAAE,oBAAoB,EAAE,GAAG,KAAK,CAAC;QAEvC,MAAM,UAAU,GAAG,GAA8B,EAAE;YACjD,IAAI,CAAC,gBAAgB,EAAE,CAAC;gBACtB,gBAAgB,GAAG,IAAI,UAAU,EAAE,CAAC;gBACpC,OAAO,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;YAChC,CAAC;YAED,IAAI,IAAI,CAAC,kBAAkB,IAAI,KAAK,CAAC,GAAG,EAAE,CAAC;gBACzC,oBAAoB,GAAG,UAAU,CAAC,gBAAgB,CAChD,KAAK,CAAC,GAAG,CAAC,SAAS,EACnB,IAAI,CAAC,kBAAkB,EACvB,oBAAoB,CACrB,CAAC;gBAEF,gBAAgB,GAAG,UAAU,CAAC,QAAQ,CACpC,gBAAgB,EAChB,oBAAoB,EACpB,gBAAgB,CACjB,CAAC;YACJ,CAAC;YACD,mBAAmB,GAAG,YAAY,CAAC,aAAa,CAC9C,gBAAgB,EAChB,KAAK,CAAC,KAAK,CAAC,SAAS,EACrB,mBAAmB,CACpB,CAAC;YAEF,KAAK,CAAC,QAAQ,GAAG,UAAU,CAAC,eAAe,CACzC;gBACE,UAAU,CAAC,SAAS,CAAC,mBAAmB,CAAC,SAAS,CAAC;gBACnD,UAAU,CAAC,SAAS,CAAC,mBAAmB,CAAC,QAAQ,CAAC;gBAClD,mBAAmB,CAAC,MAAM;aAC3B,EACD,IAAI,CACL,CAAC;YACF,KAAK,CAAC,eAAe,GAAG,KAAK,CAAC,QAAQ,CAAC;YACvC,KAAK,CAAC,oBAAoB,GAAG,oBAAoB,CAAC;YAClD,OAAO,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAChC,CAAC,CAAC;QAEF,IAAI,CAAC,CAAC,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC;YACtC,OAAO,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAChC,CAAC;QAED,IAAI,UAAU,IAAI,KAAK,CAAC,qBAAqB,EAAE,CAAC;YAC9C,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;gBACzB,KAAK,CAAC,oBAAoB,GAAG,IAAI,CAAC;gBAClC,KAAK,CAAC,aAAa,GAAG,IAAI,CAAC;YAC7B,CAAC;YAED,IACE,OAAO;gBACN,OAAmB,CAAC,UAAU,CAAC;gBAChC,IAAI,CAAC,wBAAwB,CAAC,GAAG,CAAC,OAAkB,CAAC,EACrD,CAAC;gBACD,MAAM,mBAAmB,GAAG,CAAC,GAAG,IAAI,CAAC,wBAAwB,CAAC;qBAC3D,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;qBAC7B,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBACtB,MAAM,YAAY,GAAG,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,GAAI,EAAE,mBAAmB,CAAC,CAAC;gBACxE,IAAI,YAAY,EAAE,QAAQ,EAAE,CAAC;oBAC3B,gBAAgB,GAAG,YAAY,CAAC,QAAQ,CAAC;gBAC3C,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,gBAAgB,GAAG,KAAK,CAAC,YAAY,CACnC,KAAK,CAAC,cAAc,EACpB,gBAAgB,CACjB,CAAC;YACJ,CAAC;YACD,OAAO,UAAU,EAAE,CAAC;QACtB,CAAC;QAED,OAAO,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAChC,CAAC;IAED,OAAO;QACL,IAAI,CAAC,wBAAwB,CAAC,KAAK,EAAE,CAAC;QACtC,IAAI,CAAC,gBAAgB,GAAG,SAAS,CAAC;QAClC,KAAK,CAAC,OAAO,EAAE,CAAC;IAClB,CAAC;CACF;AAED,eAAe,yBAAyB,CAAC"}
1
+ {"version":3,"file":"featureAtPixelInteraction.js","sourceRoot":"","sources":["../../../src/interaction/featureAtPixelInteraction.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vcmap/core",
3
- "version": "6.1.2",
3
+ "version": "6.1.3",
4
4
  "description": "",
5
5
  "main": "dist/index.js",
6
6
  "type": "module",
@@ -1,12 +1,13 @@
1
1
  import {
2
- Cartographic,
3
2
  Cartesian3,
4
- Math as CesiumMath,
5
3
  Cesium3DTileFeature,
6
4
  Cesium3DTilePointFeature,
7
5
  Entity,
8
6
  Scene,
9
7
  Cartesian2,
8
+ Ray,
9
+ type Label,
10
+ Billboard,
10
11
  } from '@vcmap-cesium/engine';
11
12
  import OLMap from 'ol/Map.js';
12
13
  import type { Feature } from 'ol/index.js';
@@ -14,7 +15,6 @@ import AbstractInteraction, {
14
15
  type EventFeature,
15
16
  type InteractionEvent,
16
17
  } from './abstractInteraction.js';
17
- import Projection from '../util/projection.js';
18
18
  import {
19
19
  EventType,
20
20
  ModificationKeyType,
@@ -26,6 +26,8 @@ import type OpenlayersMap from '../map/openlayersMap.js';
26
26
  import type ObliqueMap from '../map/obliqueMap.js';
27
27
  import type CesiumMap from '../map/cesiumMap.js';
28
28
  import { vectorClusterGroupName } from '../vectorCluster/vectorClusterSymbols.js';
29
+ import { cartesianToMercator } from '../util/math.js';
30
+ import { PrimitiveType } from '../util/featureconverter/convert.js';
29
31
 
30
32
  /**
31
33
  * This is the return from cesium scene.pick and scene.drillPick, which returns "any". We cast to this type.
@@ -130,6 +132,33 @@ function getFeatureFromScene(
130
132
  return { pickObject, feature };
131
133
  }
132
134
 
135
+ const MAX_UNDERGROUND_FEATURE_DEPTH_SQRD = 1000 ** 2;
136
+ function getPositionFromScene(
137
+ scene: Scene,
138
+ windowPosition: Cartesian2,
139
+ ray: Ray,
140
+ primitivesToExclude?: (PrimitiveType | Label | Billboard | Entity)[],
141
+ ): Cartesian3 | undefined {
142
+ if (primitivesToExclude) {
143
+ const intersection = scene.pickFromRay(ray, primitivesToExclude);
144
+ if (intersection?.position) {
145
+ if (scene.globe.translucency.enabled) {
146
+ const globeIntersection = scene.globe.pick(ray, scene);
147
+ if (
148
+ globeIntersection &&
149
+ Cartesian3.distanceSquared(globeIntersection, intersection.position) >
150
+ MAX_UNDERGROUND_FEATURE_DEPTH_SQRD
151
+ ) {
152
+ return globeIntersection;
153
+ }
154
+ }
155
+
156
+ return intersection.position;
157
+ }
158
+ }
159
+ return scene.pickPosition(windowPosition);
160
+ }
161
+
133
162
  /**
134
163
  * @group Interaction
135
164
  */
@@ -260,49 +289,7 @@ class FeatureAtPixelInteraction extends AbstractInteraction {
260
289
  event.feature = feature;
261
290
  }
262
291
 
263
- let scratchCartographic = new Cartographic();
264
- let scratchCartesian = new Cartesian3();
265
- let scratchPullCartesian = new Cartesian3();
266
292
  const { pickTranslucentDepth } = scene;
267
-
268
- const handlePick = (): Promise<InteractionEvent> => {
269
- if (!scratchCartesian) {
270
- scratchCartesian = new Cartesian3();
271
- return Promise.resolve(event);
272
- }
273
-
274
- if (this.pullPickedPosition && event.ray) {
275
- scratchPullCartesian = Cartesian3.multiplyByScalar(
276
- event.ray.direction,
277
- this.pullPickedPosition,
278
- scratchPullCartesian,
279
- );
280
-
281
- scratchCartesian = Cartesian3.subtract(
282
- scratchCartesian,
283
- scratchPullCartesian,
284
- scratchCartesian,
285
- );
286
- }
287
- scratchCartographic = Cartographic.fromCartesian(
288
- scratchCartesian,
289
- scene.globe.ellipsoid,
290
- scratchCartographic,
291
- );
292
-
293
- event.position = Projection.wgs84ToMercator(
294
- [
295
- CesiumMath.toDegrees(scratchCartographic.longitude),
296
- CesiumMath.toDegrees(scratchCartographic.latitude),
297
- scratchCartographic.height,
298
- ],
299
- true,
300
- );
301
- event.positionOrPixel = event.position;
302
- scene.pickTranslucentDepth = pickTranslucentDepth;
303
- return Promise.resolve(event);
304
- };
305
-
306
293
  if (!(event.type & this.pickPosition)) {
307
294
  return Promise.resolve(event);
308
295
  }
@@ -313,25 +300,49 @@ class FeatureAtPixelInteraction extends AbstractInteraction {
313
300
  event.exactPosition = true;
314
301
  }
315
302
 
303
+ let primitivesToExclude;
316
304
  if (
317
305
  feature &&
318
306
  (feature as Feature)[primitives] &&
319
307
  this._excludeFromPickPosition.has(feature as Feature)
320
308
  ) {
321
- const primitivesToExclude = [...this._excludeFromPickPosition]
309
+ primitivesToExclude = [...this._excludeFromPickPosition]
322
310
  .flatMap((f) => f[primitives])
323
311
  .filter((f) => !!f);
324
- const intersection = scene.pickFromRay(event.ray!, primitivesToExclude);
325
- if (intersection?.position) {
326
- scratchCartesian = intersection.position;
327
- }
328
- } else {
329
- scratchCartesian = scene.pickPosition(
330
- event.windowPosition,
331
- scratchCartesian,
312
+ }
313
+
314
+ const cartesianPosition = getPositionFromScene(
315
+ scene,
316
+ event.windowPosition,
317
+ event.ray!,
318
+ primitivesToExclude,
319
+ );
320
+
321
+ if (
322
+ !cartesianPosition ||
323
+ Cartesian3.equals(cartesianPosition, Cartesian3.ZERO)
324
+ ) {
325
+ return Promise.resolve(event);
326
+ }
327
+
328
+ if (this.pullPickedPosition && event.ray) {
329
+ const pulledCartesian = Cartesian3.multiplyByScalar(
330
+ event.ray.direction,
331
+ this.pullPickedPosition,
332
+ new Cartesian3(),
333
+ );
334
+
335
+ Cartesian3.subtract(
336
+ cartesianPosition,
337
+ pulledCartesian,
338
+ cartesianPosition,
332
339
  );
333
340
  }
334
- return handlePick();
341
+
342
+ event.position = cartesianToMercator(cartesianPosition);
343
+ event.positionOrPixel = event.position.slice();
344
+ scene.pickTranslucentDepth = pickTranslucentDepth;
345
+ return Promise.resolve(event);
335
346
  }
336
347
 
337
348
  return Promise.resolve(event);