diff --git a/src/ol/render/canvas/canvasimmediate.js b/src/ol/render/canvas/canvasimmediate.js index dcf09919e3..f3aa2228b5 100644 --- a/src/ol/render/canvas/canvasimmediate.js +++ b/src/ol/render/canvas/canvasimmediate.js @@ -220,6 +220,23 @@ ol.render.canvas.Immediate.prototype.drawFeature = function(feature, style) { }; +/** + * @inheritDoc + */ +ol.render.canvas.Immediate.prototype.drawGeometryCollectionGeometry = + function(geometryCollectionGeometry, data) { + var geometries = geometryCollectionGeometry.getGeometriesArray(); + var i, ii; + for (i = 0, ii = geometries.length; i < ii; ++i) { + var geometry = geometries[i]; + var geometryRenderer = + ol.render.canvas.Immediate.GEOMETRY_RENDERES_[geometry.getType()]; + goog.asserts.assert(goog.isDef(geometryRenderer)); + geometryRenderer.call(this, geometry, data); + } +}; + + /** * @inheritDoc */ @@ -478,5 +495,7 @@ ol.render.canvas.Immediate.GEOMETRY_RENDERES_ = { 'MultiPoint': ol.render.canvas.Immediate.prototype.drawMultiPointGeometry, 'MultiLineString': ol.render.canvas.Immediate.prototype.drawMultiLineStringGeometry, - 'MultiPolygon': ol.render.canvas.Immediate.prototype.drawMultiPolygonGeometry + 'MultiPolygon': ol.render.canvas.Immediate.prototype.drawMultiPolygonGeometry, + 'GeometryCollection': + ol.render.canvas.Immediate.prototype.drawGeometryCollectionGeometry }; diff --git a/src/ol/render/canvas/canvasreplay.js b/src/ol/render/canvas/canvasreplay.js index 1aeaf5f3be..1fe7d69e92 100644 --- a/src/ol/render/canvas/canvasreplay.js +++ b/src/ol/render/canvas/canvasreplay.js @@ -329,6 +329,13 @@ ol.render.canvas.Replay.prototype.reverseInstructions_ = function() { ol.render.canvas.Replay.prototype.drawFeature = goog.abstractMethod; +/** + * @inheritDoc + */ +ol.render.canvas.Replay.prototype.drawGeometryCollectionGeometry = + goog.abstractMethod; + + /** * @inheritDoc */ diff --git a/src/ol/render/irender.js b/src/ol/render/irender.js index 07c7ffee11..bbefdd7af5 100644 --- a/src/ol/render/irender.js +++ b/src/ol/render/irender.js @@ -1,3 +1,5 @@ +// FIXME remove trailing "Geometry" in method names + goog.provide('ol.render.IRender'); @@ -17,6 +19,16 @@ ol.render.IRender.prototype.drawFeature = function(feature, style) { }; +/** + * @param {ol.geom.GeometryCollection} geometryCollectionGeometry Geometry + * collection. + * @param {Object} data Opaque data object. + */ +ol.render.IRender.prototype.drawGeometryCollectionGeometry = + function(geometryCollectionGeometry, data) { +}; + + /** * @param {ol.geom.Point} pointGeometry Point geometry. * @param {Object} data Opaque data object. diff --git a/src/ol/render/vector.js b/src/ol/render/vector.js index 717490f8c6..6143a6080f 100644 --- a/src/ol/render/vector.js +++ b/src/ol/render/vector.js @@ -1,6 +1,7 @@ goog.provide('ol.renderer.vector'); goog.require('goog.asserts'); +goog.require('ol.geom.GeometryCollection'); goog.require('ol.geom.LineString'); goog.require('ol.geom.MultiLineString'); goog.require('ol.geom.MultiPoint'); @@ -28,6 +29,29 @@ ol.renderer.vector.renderFeature = function( }; +/** + * @param {ol.render.IReplayGroup} replayGroup Replay group. + * @param {ol.geom.Geometry} geometry Geometry. + * @param {ol.style.Style} style Style. + * @param {Object} data Opaque data object. + * @private + */ +ol.renderer.vector.renderGeometryCollectionGeometry_ = + function(replayGroup, geometry, style, data) { + goog.asserts.assertInstanceof(geometry, ol.geom.GeometryCollection); + var geometryCollectionGeometry = /** @type {ol.geom.GeometryCollection} */ ( + geometry); + var geometries = geometryCollectionGeometry.getGeometriesArray(); + var i, ii; + for (i = 0, ii = geometries.length; i < ii; ++i) { + var geometryRenderer = + ol.renderer.vector.GEOMETRY_RENDERERS_[geometries[i].getType()]; + goog.asserts.assert(goog.isDef(geometryRenderer)); + geometryRenderer(replayGroup, geometries[i], style, data); + } +}; + + /** * @param {ol.render.IReplayGroup} replayGroup Replay group. * @param {ol.geom.Geometry} geometry Geometry. @@ -167,5 +191,6 @@ ol.renderer.vector.GEOMETRY_RENDERERS_ = { 'Polygon': ol.renderer.vector.renderPolygonGeometry_, 'MultiPoint': ol.renderer.vector.renderMultiPointGeometry_, 'MultiLineString': ol.renderer.vector.renderMultiLineStringGeometry_, - 'MultiPolygon': ol.renderer.vector.renderMultiPolygonGeometry_ + 'MultiPolygon': ol.renderer.vector.renderMultiPolygonGeometry_, + 'GeometryCollection': ol.renderer.vector.renderGeometryCollectionGeometry_ };