@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 {
|
|
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
|
-
|
|
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
|
-
|
|
205
|
-
|
|
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
|
-
|
|
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,
|
|
1
|
+
{"version":3,"file":"featureAtPixelInteraction.js","sourceRoot":"","sources":["../../../src/interaction/featureAtPixelInteraction.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -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
|
-
|
|
309
|
+
primitivesToExclude = [...this._excludeFromPickPosition]
|
|
322
310
|
.flatMap((f) => f[primitives])
|
|
323
311
|
.filter((f) => !!f);
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
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
|
-
|
|
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);
|