Implement hasFeatureAtPixel for webgl
This commit is contained in:
@@ -601,6 +601,53 @@ ol.renderer.webgl.Map.prototype.forEachFeatureAtPixel =
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @inheritDoc
|
||||
*/
|
||||
ol.renderer.webgl.Map.prototype.hasFeatureAtPixel =
|
||||
function(coordinate, frameState, layerFilter, thisArg2) {
|
||||
var hasFeature = false;
|
||||
|
||||
if (this.getGL().isContextLost()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
var context = this.getContext();
|
||||
var viewState = frameState.viewState;
|
||||
|
||||
// do the hit-detection for the overlays first
|
||||
if (!goog.isNull(this.replayGroup)) {
|
||||
// use default color values
|
||||
var d = ol.renderer.webgl.Map.DEFAULT_COLOR_VALUES_;
|
||||
|
||||
hasFeature = this.replayGroup.hasFeatureAtPixel(context,
|
||||
viewState.center, viewState.resolution, viewState.rotation,
|
||||
frameState.size, frameState.pixelRatio,
|
||||
d.opacity, d.brightness, d.contrast, d.hue, d.saturation, {},
|
||||
coordinate);
|
||||
if (hasFeature) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
var layerStates = this.getMap().getLayerGroup().getLayerStatesArray();
|
||||
var numLayers = layerStates.length;
|
||||
var i;
|
||||
for (i = numLayers - 1; i >= 0; --i) {
|
||||
var layerState = layerStates[i];
|
||||
var layer = layerState.layer;
|
||||
if (ol.layer.Layer.visibleAtResolution(layerState, viewState.resolution) &&
|
||||
layerFilter.call(thisArg2, layer)) {
|
||||
var layerRenderer = this.getLayerRenderer(layer);
|
||||
hasFeature = layerRenderer.hasFeatureAtPixel(coordinate, frameState);
|
||||
if (hasFeature) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
return hasFeature;
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @private
|
||||
*/
|
||||
|
||||
@@ -140,6 +140,28 @@ ol.renderer.webgl.VectorLayer.prototype.forEachFeatureAtPixel =
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @inheritDoc
|
||||
*/
|
||||
ol.renderer.webgl.VectorLayer.prototype.hasFeatureAtPixel =
|
||||
function(coordinate, frameState) {
|
||||
if (goog.isNull(this.replayGroup_) || goog.isNull(this.layerState_)) {
|
||||
return false;
|
||||
} else {
|
||||
var mapRenderer = this.getWebGLMapRenderer();
|
||||
var context = mapRenderer.getContext();
|
||||
var viewState = frameState.viewState;
|
||||
var layerState = this.layerState_;
|
||||
return this.replayGroup_.hasFeatureAtPixel(context,
|
||||
viewState.center, viewState.resolution, viewState.rotation,
|
||||
frameState.size, frameState.pixelRatio,
|
||||
layerState.opacity, layerState.brightness, layerState.contrast,
|
||||
layerState.hue, layerState.saturation, frameState.skippedFeatureUids,
|
||||
coordinate);
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* Handle changes in image style state.
|
||||
* @param {goog.events.Event} event Image style change event.
|
||||
|
||||
Reference in New Issue
Block a user