Polygon rendering (no holes yet)
This commit is contained in:
@@ -9,8 +9,10 @@ goog.require('ol.canvas');
|
|||||||
goog.require('ol.geom.Geometry');
|
goog.require('ol.geom.Geometry');
|
||||||
goog.require('ol.geom.LineString');
|
goog.require('ol.geom.LineString');
|
||||||
goog.require('ol.geom.Point');
|
goog.require('ol.geom.Point');
|
||||||
|
goog.require('ol.geom.Polygon');
|
||||||
goog.require('ol.style.LiteralLine');
|
goog.require('ol.style.LiteralLine');
|
||||||
goog.require('ol.style.LiteralPoint');
|
goog.require('ol.style.LiteralPoint');
|
||||||
|
goog.require('ol.style.LiteralPolygon');
|
||||||
goog.require('ol.style.LiteralShape');
|
goog.require('ol.style.LiteralShape');
|
||||||
goog.require('ol.style.ShapeType');
|
goog.require('ol.style.ShapeType');
|
||||||
|
|
||||||
@@ -116,6 +118,77 @@ ol.renderer.canvas.Renderer.prototype.renderPoints =
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param {Array.<ol.geom.Polygon>} polygons Array of polygons.
|
||||||
|
* @param {ol.style.LiteralPolygon} symbolizer Polygon symbolizer.
|
||||||
|
*/
|
||||||
|
ol.renderer.canvas.Renderer.prototype.renderPolygons =
|
||||||
|
function(polygons, symbolizer) {
|
||||||
|
|
||||||
|
var context = this.context_,
|
||||||
|
strokeStyle = symbolizer.strokeStyle,
|
||||||
|
fillStyle = symbolizer.fillStyle,
|
||||||
|
i, ii, poly, rings, numRings, coords, dim, j, jj, x, y;
|
||||||
|
|
||||||
|
context.globalAlpha = symbolizer.opacity;
|
||||||
|
if (strokeStyle) {
|
||||||
|
context.strokeStyle = symbolizer.strokeStyle;
|
||||||
|
context.lineWidth = symbolizer.strokeWidth;
|
||||||
|
}
|
||||||
|
if (fillStyle) {
|
||||||
|
context.fillStyle = fillStyle;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Four scenarios covered here:
|
||||||
|
* 1) stroke only, no holes - only need to have a single path
|
||||||
|
* 2) fill only, no holes - only need to have a single path
|
||||||
|
* 3) fill and stroke, no holes
|
||||||
|
* 4) holes - render polygon to sketch canvas first
|
||||||
|
*/
|
||||||
|
context.beginPath();
|
||||||
|
for (i = 0, ii = polygons.length; i < ii; ++i) {
|
||||||
|
poly = polygons[i];
|
||||||
|
dim = poly.dimension;
|
||||||
|
rings = poly.rings;
|
||||||
|
numRings = rings.length;
|
||||||
|
if (numRings > 1) {
|
||||||
|
// scenario 4
|
||||||
|
// TODO: use sketch canvas to render outer and punch holes for inner rings
|
||||||
|
throw new Error('Rendering holes not implemented');
|
||||||
|
} else {
|
||||||
|
coords = rings[0].coordinates;
|
||||||
|
for (j = 0, jj = coords.length; j < jj; j += dim) {
|
||||||
|
x = coords[j];
|
||||||
|
y = coords[j + 1];
|
||||||
|
if (j === 0) {
|
||||||
|
context.moveTo(x, y);
|
||||||
|
} else {
|
||||||
|
context.lineTo(x, y);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (fillStyle && strokeStyle) {
|
||||||
|
// scenario 3 - fill and stroke each time
|
||||||
|
context.fill();
|
||||||
|
context.stroke();
|
||||||
|
if (i < ii - 1) {
|
||||||
|
context.beginPath();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!(fillStyle && strokeStyle)) {
|
||||||
|
if (fillStyle) {
|
||||||
|
// scenario 2 - fill all at once
|
||||||
|
context.fill();
|
||||||
|
} else {
|
||||||
|
// scenario 1 - stroke all at once
|
||||||
|
context.stroke();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param {ol.style.LiteralShape} circle Shape symbolizer.
|
* @param {ol.style.LiteralShape} circle Shape symbolizer.
|
||||||
* @return {!HTMLCanvasElement} Canvas element.
|
* @return {!HTMLCanvasElement} Canvas element.
|
||||||
|
|||||||
Reference in New Issue
Block a user