Merge pull request #7559 from ahocevar/unskip-image-features
Handle skipping and unskipping features with renderMode: 'image'
This commit is contained in:
@@ -8525,7 +8525,7 @@ olx.view.FitOptions.prototype.callback;
|
||||
* pixelToCoordinateTransform: ol.Transform,
|
||||
* postRenderFunctions: Array.<ol.PostRenderFunction>,
|
||||
* size: ol.Size,
|
||||
* skippedFeatureUids: Object.<string, boolean>,
|
||||
* skippedFeatureUids: !Object.<string, boolean>,
|
||||
* tileQueue: ol.TileQueue,
|
||||
* time: number,
|
||||
* usedTiles: Object.<string, Object.<string, ol.TileRange>>,
|
||||
|
||||
@@ -4,6 +4,7 @@ goog.require('ol');
|
||||
goog.require('ol.ImageCanvas');
|
||||
goog.require('ol.LayerType');
|
||||
goog.require('ol.ViewHint');
|
||||
goog.require('ol.array');
|
||||
goog.require('ol.extent');
|
||||
goog.require('ol.layer.VectorRenderType');
|
||||
goog.require('ol.obj');
|
||||
@@ -35,6 +36,11 @@ ol.renderer.canvas.ImageLayer = function(imageLayer) {
|
||||
*/
|
||||
this.imageTransform_ = ol.transform.create();
|
||||
|
||||
/**
|
||||
* @type {!Array.<string>}
|
||||
*/
|
||||
this.skippedFeatures_ = [];
|
||||
|
||||
/**
|
||||
* @private
|
||||
* @type {ol.renderer.canvas.VectorLayer}
|
||||
@@ -139,11 +145,15 @@ ol.renderer.canvas.ImageLayer.prototype.prepareFrame = function(frameState, laye
|
||||
rotation: 0
|
||||
}))
|
||||
}));
|
||||
if (vectorRenderer.prepareFrame(imageFrameState, layerState) && vectorRenderer.replayGroupChanged) {
|
||||
var skippedFeatures = Object.keys(imageFrameState.skippedFeatureUids).sort();
|
||||
if (vectorRenderer.prepareFrame(imageFrameState, layerState) &&
|
||||
(vectorRenderer.replayGroupChanged ||
|
||||
!ol.array.equals(skippedFeatures, this.skippedFeatures_))) {
|
||||
context.canvas.width = imageFrameState.size[0] * pixelRatio;
|
||||
context.canvas.height = imageFrameState.size[1] * pixelRatio;
|
||||
vectorRenderer.composeFrame(imageFrameState, layerState, context);
|
||||
this.image_ = new ol.ImageCanvas(renderedExtent, viewResolution, pixelRatio, context.canvas);
|
||||
this.skippedFeatures_ = skippedFeatures;
|
||||
}
|
||||
} else {
|
||||
image = imageSource.getImage(
|
||||
|
||||
BIN
test/rendering/ol/layer/expected/vector.png
Normal file
BIN
test/rendering/ol/layer/expected/vector.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 1.6 KiB |
@@ -248,6 +248,32 @@ describe('ol.rendering.layer.Vector', function() {
|
||||
});
|
||||
});
|
||||
|
||||
it('unskips features correctly with renderMode: \'image\'', function(done) {
|
||||
createMap('canvas');
|
||||
addCircle(500);
|
||||
addPolygon(300);
|
||||
map.skipFeature(source.getFeatures()[1]);
|
||||
map.addLayer(new ol.layer.Vector({
|
||||
renderMode: 'image',
|
||||
source: source,
|
||||
style: new ol.style.Style({
|
||||
fill: new ol.style.Fill({
|
||||
color: 'rgba(255,0,0,0.5)'
|
||||
}),
|
||||
stroke: new ol.style.Stroke({
|
||||
width: 2,
|
||||
color: 'black'
|
||||
})
|
||||
})
|
||||
}));
|
||||
map.renderSync();
|
||||
map.unskipFeature(source.getFeatures()[1]);
|
||||
map.once('postrender', function() {
|
||||
expectResemble(map, 'rendering/ol/layer/expected/vector.png',
|
||||
IMAGE_TOLERANCE, done);
|
||||
});
|
||||
});
|
||||
|
||||
it('renders fill/stroke batches correctly with the canvas renderer', function(done) {
|
||||
createMap('canvas');
|
||||
source = new ol.source.Vector({
|
||||
|
||||
Reference in New Issue
Block a user