Skip to content

Commit fac6644

Browse files
ibesoragithub-actions[bot]
authored andcommitted
Fix interaction handlers not working on model layers
GitOrigin-RevId: 529d81e87d1dff1598a54db77e6a8f7955ff4a04
1 parent d534a33 commit fac6644

9 files changed

Lines changed: 91 additions & 3 deletions

File tree

3d-style/style/style_layer/building_style_layer.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,7 @@ class BuildingStyleLayer extends StyleLayer {
7373
pixelPosMatrix: Float32Array,
7474
elevationHelper: DEMSampler | null | undefined,
7575
layoutVertexArrayOffset: number,
76+
scope: string | undefined
7677
): boolean | number {
7778
let height = this.layout.get('building-height').evaluate(feature, featureState);
7879
const base = this.layout.get('building-base').evaluate(feature, featureState);

3d-style/style/style_layer/model_style_layer.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ import type {EvaluationFeature} from '../../../src/data/evaluation_feature';
2929
import type {ProgramName} from '../../../src/render/program';
3030
import type {QueryResult} from '../../../src/source/query_features';
3131
import type SourceCache from '../../../src/source/source_cache';
32+
import type {DEMSampler} from '../../../src/terrain/elevation';
3233

3334
class ModelStyleLayer extends StyleLayer {
3435
override type: 'model';
@@ -167,6 +168,10 @@ class ModelStyleLayer extends StyleLayer {
167168
geometry: Array<Array<Point>>,
168169
zoom: number,
169170
transform: Transform,
171+
pixelPosMatrix: Float32Array,
172+
elevationHelper: DEMSampler | null | undefined,
173+
layoutVertexArrayOffset: number,
174+
scope: string | undefined
170175
): number | boolean {
171176
if (!this.modelManager) return false;
172177
const modelManager = this.modelManager;
@@ -179,7 +184,7 @@ class ModelStyleLayer extends StyleLayer {
179184
(feature.properties && feature.properties.hasOwnProperty("id")) ? (feature.properties["id"] as string | number) : undefined;
180185
if (instances.idToFeaturesIndex.hasOwnProperty(featureId)) {
181186
const modelFeature = instances.features[instances.idToFeaturesIndex[featureId]];
182-
const model = modelManager.getModel(modelId, this.scope);
187+
const model = modelManager.getModel(modelId, scope || this.scope);
183188
if (!model) return false;
184189

185190
let matrix: mat4 = [];

src/data/feature_index.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ type QueryParameters = {
4141
availableImages: ImageId[];
4242
worldview: string | undefined;
4343
queryRadius?: number;
44+
scope?: string | undefined
4445
};
4546

4647
type FeatureIndices = FeatureIndexStruct | {
@@ -176,7 +177,7 @@ class FeatureIndex {
176177
}
177178

178179
// eslint-disable-next-line @typescript-eslint/no-unsafe-argument
179-
return styleLayer.queryIntersectsFeature(tilespaceGeometry, feature, featureState, featureGeometry, this.z, transform, pixelPosMatrix, elevationHelper, layoutVertexArrayOffset);
180+
return styleLayer.queryIntersectsFeature(tilespaceGeometry, feature, featureState, featureGeometry, this.z, transform, pixelPosMatrix, elevationHelper, layoutVertexArrayOffset, params.scope);
180181
};
181182

182183
this.loadMatchingFeature(

src/source/query_features.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,7 @@ export function queryRenderedFeatures(
9696
availableImages: ImageId[],
9797
transform: Transform,
9898
visualizeQueryGeometry: boolean = false,
99+
scope: string | undefined = undefined
99100
): QueryResult {
100101
const sourceCacheTransform = query.sourceCache.transform;
101102
const tileResults = query.sourceCache.tilesIn(queryGeometry, query.has3DLayers, visualizeQueryGeometry);
@@ -110,6 +111,7 @@ export function queryRenderedFeatures(
110111
transform,
111112
sourceCacheTransform,
112113
visualizeQueryGeometry,
114+
scope
113115
);
114116

115117
if (Object.keys(queryResults).length) {

src/source/tile.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -524,6 +524,7 @@ class Tile {
524524
transform: Transform,
525525
sourceCacheTransform: Transform,
526526
visualizeQueryGeometry: boolean,
527+
scope: string | undefined
527528
): QueryResult {
528529
Debug.run(() => {
529530
if (visualizeQueryGeometry) {
@@ -558,7 +559,8 @@ class Tile {
558559
availableImages,
559560
tileTransform: this.tileTransform,
560561
worldview: this.worldview,
561-
queryRadius: maxFeatureQueryRadius
562+
queryRadius: maxFeatureQueryRadius,
563+
scope
562564
}
563565
);
564566
}

src/style/style.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3524,6 +3524,7 @@ class Style extends Evented<MapEvents> {
35243524
this._availableImages,
35253525
transform,
35263526
showQueryGeometry,
3527+
this.getActualScope()
35273528
);
35283529

35293530
if (Object.keys(queryResult).length) queryResults.push(queryResult);

src/style/style_layer.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -482,6 +482,7 @@ class StyleLayer extends Evented {
482482
_pixelPosMatrix: Float32Array,
483483
_elevationHelper: DEMSampler | null | undefined,
484484
_layoutVertexArrayOffset: number,
485+
scope: string | undefined
485486
// @ts-expect-error - TS2355 - A function whose declared type is neither 'undefined', 'void', nor 'any' must return a value.
486487
): boolean | number {}
487488
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
[
2+
{
3+
"type": "Feature",
4+
"state": {},
5+
"geometry": {
6+
"type": "Point",
7+
"coordinates": [
8+
-122.40923747420311,
9+
37.7815259123996
10+
]
11+
},
12+
"properties": {
13+
"id": 13
14+
},
15+
"source": "trees"
16+
}
17+
]
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
{
2+
"version": 8,
3+
"metadata": {
4+
"test": {
5+
"height": 512,
6+
"allowed": 0.0015,
7+
"operations": [
8+
["addSource",
9+
"trees",
10+
{
11+
"type": "geojson",
12+
"data": "local://data/trees.geojson"
13+
}],
14+
["addLayer", {
15+
"id": "tree-layer-diffuse",
16+
"type": "model",
17+
"source": "trees",
18+
"layout": {
19+
"model-id": "tree-diffuse"
20+
},
21+
"paint": {
22+
"model-scale": [ 70.0, 50.0, 50.0],
23+
"model-translation": [0, 0, 100]
24+
}
25+
}
26+
],
27+
["addModel", "tree-diffuse", "local://models/tree-no-material.glb"],
28+
["wait"]
29+
],
30+
"queryGeometry": [
31+
165,
32+
279
33+
]
34+
}
35+
},
36+
"sources": {
37+
},
38+
"transition": {
39+
"duration": 0
40+
},
41+
"models": {
42+
},
43+
"pitch": 60,
44+
"bearing": 0,
45+
"zoom": 15,
46+
"schema": {},
47+
"center": [
48+
-122.40784,
49+
37.78432
50+
],
51+
"light": {
52+
"intensity": 1,
53+
"position": [1, 110, 90],
54+
"anchor": "map"
55+
},
56+
"layers": [
57+
]
58+
}

0 commit comments

Comments
 (0)