From 811c1302415d33813b57a51f76995bf5c7182314 Mon Sep 17 00:00:00 2001 From: changqing Date: Tue, 15 Dec 2020 15:38:23 +0800 Subject: [PATCH] Implement custom circle render --- src/ol/render/canvas/Builder.js | 20 ++++++++++++++++++++ src/ol/render/canvas/Executor.js | 8 +++++--- 2 files changed, 25 insertions(+), 3 deletions(-) diff --git a/src/ol/render/canvas/Builder.js b/src/ol/render/canvas/Builder.js index 1b710a74a9..8b1b0c53e3 100644 --- a/src/ol/render/canvas/Builder.js +++ b/src/ol/render/canvas/Builder.js @@ -345,6 +345,26 @@ class CanvasBuilder extends VectorContext { geometry, renderer, ]); + } else if (type == GeometryType.CIRCLE) { + const flatCoordinates = geometry.getFlatCoordinates(); + this.appendFlatLineCoordinates( + flatCoordinates, + 0, + flatCoordinates.length, + stride, + false, + false + ); + builderEnd = this.coordinates.length; + this.instructions.push([ + CanvasInstruction.CUSTOM, + builderBegin, + builderEnd, + geometry, + renderer, + undefined, + 4, + ]); } this.endGeometry(feature); } diff --git a/src/ol/render/canvas/Executor.js b/src/ol/render/canvas/Executor.js index 058961edaf..bf7b6c465b 100644 --- a/src/ol/render/canvas/Executor.js +++ b/src/ol/render/canvas/Executor.js @@ -731,6 +731,7 @@ class Executor { const geometry = /** @type {import("../../geom/SimpleGeometry.js").default} */ (instruction[3]); const renderer = instruction[4]; const fn = instruction.length == 6 ? instruction[5] : undefined; + const coordsLength = instruction.length >= 7 ? instruction[6] : 2; state.geometry = geometry; state.feature = feature; if (!(i in coordinateCache)) { @@ -740,9 +741,10 @@ class Executor { if (fn) { fn(pixelCoordinates, d, dd, 2, coords); } else { - coords[0] = pixelCoordinates[d]; - coords[1] = pixelCoordinates[d + 1]; - coords.length = 2; + for (let index = 0; index < coordsLength; index++) { + coords[index] = pixelCoordinates[d + index]; + } + coords.length = coordsLength; } renderer(coords, state); ++i;