Allow multiple renderGeometryFunctions on ol.layer.Vector
This commit is contained in:
@@ -8,7 +8,7 @@ goog.require('ol.layer.Layer');
|
|||||||
* @enum {string}
|
* @enum {string}
|
||||||
*/
|
*/
|
||||||
ol.layer.VectorProperty = {
|
ol.layer.VectorProperty = {
|
||||||
RENDER_GEOMETRY_FUNCTION: 'renderGeometryFunction',
|
RENDER_GEOMETRY_FUNCTIONS: 'renderGeometryFunctions',
|
||||||
STYLE_FUNCTION: 'styleFunction'
|
STYLE_FUNCTION: 'styleFunction'
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -36,17 +36,16 @@ goog.inherits(ol.layer.Vector, ol.layer.Layer);
|
|||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return {function(ol.geom.Geometry): boolean|undefined} Render geometry
|
* @return {ol.Collection|undefined} Render geometry functions.
|
||||||
* function.
|
|
||||||
*/
|
*/
|
||||||
ol.layer.Vector.prototype.getRenderGeometryFunction = function() {
|
ol.layer.Vector.prototype.getRenderGeometryFunctions = function() {
|
||||||
return /** @type {function(ol.geom.Geometry): boolean|undefined} */ (
|
return /** @type {ol.Collection|undefined} */ (
|
||||||
this.get(ol.layer.VectorProperty.RENDER_GEOMETRY_FUNCTION));
|
this.get(ol.layer.VectorProperty.RENDER_GEOMETRY_FUNCTIONS));
|
||||||
};
|
};
|
||||||
goog.exportProperty(
|
goog.exportProperty(
|
||||||
ol.layer.Vector.prototype,
|
ol.layer.Vector.prototype,
|
||||||
'getRenderGeometryFunction',
|
'getRenderGeometryFunctions',
|
||||||
ol.layer.Vector.prototype.getRenderGeometryFunction);
|
ol.layer.Vector.prototype.getRenderGeometryFunctions);
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -63,18 +62,18 @@ goog.exportProperty(
|
|||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param {function(ol.geom.Geometry): boolean|undefined} renderGeometryFunction
|
* @param {ol.Collection|undefined} renderGeometryFunctions Render geometry
|
||||||
* Render geometry function.
|
* functions.
|
||||||
*/
|
*/
|
||||||
ol.layer.Vector.prototype.setRenderGeometryFunction =
|
ol.layer.Vector.prototype.setRenderGeometryFunctions =
|
||||||
function(renderGeometryFunction) {
|
function(renderGeometryFunctions) {
|
||||||
this.set(
|
this.set(ol.layer.VectorProperty.RENDER_GEOMETRY_FUNCTIONS,
|
||||||
ol.layer.VectorProperty.RENDER_GEOMETRY_FUNCTION, renderGeometryFunction);
|
renderGeometryFunctions);
|
||||||
};
|
};
|
||||||
goog.exportProperty(
|
goog.exportProperty(
|
||||||
ol.layer.Vector.prototype,
|
ol.layer.Vector.prototype,
|
||||||
'setRenderGeometryFunction',
|
'setRenderGeometryFunctions',
|
||||||
ol.layer.Vector.prototype.setRenderGeometryFunction);
|
ol.layer.Vector.prototype.setRenderGeometryFunctions);
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -117,18 +117,38 @@ ol.renderer.canvas.VectorLayer.prototype.forEachFeatureAtPixel =
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* @private
|
* @private
|
||||||
* @return {function(ol.geom.Geometry): boolean|undefined} Render geometry
|
* @return {function(ol.geom.Geometry): boolean} Render geometry function.
|
||||||
* function.
|
|
||||||
*/
|
*/
|
||||||
ol.renderer.canvas.VectorLayer.prototype.getRenderGeometryFunction_ =
|
ol.renderer.canvas.VectorLayer.prototype.getRenderGeometryFunction_ =
|
||||||
function() {
|
function() {
|
||||||
var vectorLayer = this.getLayer();
|
var vectorLayer = this.getLayer();
|
||||||
goog.asserts.assertInstanceof(vectorLayer, ol.layer.Vector);
|
goog.asserts.assertInstanceof(vectorLayer, ol.layer.Vector);
|
||||||
var renderGeometryFunction = vectorLayer.getRenderGeometryFunction();
|
var renderGeometryFunctions = vectorLayer.getRenderGeometryFunctions();
|
||||||
if (!goog.isDef(renderGeometryFunction)) {
|
if (!goog.isDef(renderGeometryFunctions)) {
|
||||||
renderGeometryFunction = goog.functions.TRUE;
|
return goog.functions.TRUE;
|
||||||
|
}
|
||||||
|
var renderGeometryFunctionsArray = renderGeometryFunctions.getArray();
|
||||||
|
switch (renderGeometryFunctionsArray.length) {
|
||||||
|
case 0:
|
||||||
|
return goog.functions.TRUE;
|
||||||
|
case 1:
|
||||||
|
return renderGeometryFunctionsArray[0];
|
||||||
|
default:
|
||||||
|
return (
|
||||||
|
/**
|
||||||
|
* @param {ol.geom.Geometry} geometry Geometry.
|
||||||
|
* @return {boolean} Render geometry.
|
||||||
|
*/
|
||||||
|
function(geometry) {
|
||||||
|
var i, ii;
|
||||||
|
for (i = 0, ii = renderGeometryFunctionsArray.length; i < ii; ++i) {
|
||||||
|
if (!renderGeometryFunctionsArray[i](geometry)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
});
|
||||||
}
|
}
|
||||||
return renderGeometryFunction;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user