diff --git a/src/ol/style/regularshape.js b/src/ol/style/regularshape.js index 92bcbd4c29..e82ed18486 100644 --- a/src/ol/style/regularshape.js +++ b/src/ol/style/regularshape.js @@ -66,10 +66,9 @@ ol.style.RegularShape = function(options) { /** * @private - * @type {number} + * @type {number|undefined} */ - this.radius2_ = - options.radius2 !== undefined ? options.radius2 : this.radius_; + this.radius2_ = options.radius2; /** * @private @@ -146,7 +145,7 @@ ol.inherits(ol.style.RegularShape, ol.style.Image); ol.style.RegularShape.prototype.clone = function() { var style = new ol.style.RegularShape({ fill: this.getFill() ? this.getFill().clone() : undefined, - points: this.getRadius2() !== this.getRadius() ? this.getPoints() / 2 : this.getPoints(), + points: this.getPoints(), radius: this.getRadius(), radius2: this.getRadius2(), angle: this.getAngle(), @@ -263,7 +262,7 @@ ol.style.RegularShape.prototype.getRadius = function() { /** * Get the secondary radius for the shape. - * @return {number} Radius2. + * @return {number|undefined} Radius2. * @api */ ol.style.RegularShape.prototype.getRadius2 = function() { @@ -428,17 +427,20 @@ ol.style.RegularShape.prototype.draw_ = function(renderOptions, context, x, y) { context.beginPath(); - if (this.points_ === Infinity) { + var points = this.points_; + if (points === Infinity) { context.arc( renderOptions.size / 2, renderOptions.size / 2, this.radius_, 0, 2 * Math.PI, true); } else { - if (this.radius2_ !== this.radius_) { - this.points_ = 2 * this.points_; + var radius2 = (this.radius2_ !== undefined) ? this.radius2_ + : this.radius_; + if (radius2 !== this.radius_) { + points = 2 * points; } - for (i = 0; i <= this.points_; i++) { - angle0 = i * 2 * Math.PI / this.points_ - Math.PI / 2 + this.angle_; - radiusC = i % 2 === 0 ? this.radius_ : this.radius2_; + for (i = 0; i <= points; i++) { + angle0 = i * 2 * Math.PI / points - Math.PI / 2 + this.angle_; + radiusC = i % 2 === 0 ? this.radius_ : radius2; context.lineTo(renderOptions.size / 2 + radiusC * Math.cos(angle0), renderOptions.size / 2 + radiusC * Math.sin(angle0)); } @@ -504,18 +506,21 @@ ol.style.RegularShape.prototype.drawHitDetectionCanvas_ = function(renderOptions context.beginPath(); - if (this.points_ === Infinity) { + var points = this.points_; + if (points === Infinity) { context.arc( renderOptions.size / 2, renderOptions.size / 2, this.radius_, 0, 2 * Math.PI, true); } else { - if (this.radius2_ !== this.radius_) { - this.points_ = 2 * this.points_; + var radius2 = (this.radius2_ !== undefined) ? this.radius2_ + : this.radius_; + if (radius2 !== this.radius_) { + points = 2 * points; } var i, radiusC, angle0; - for (i = 0; i <= this.points_; i++) { - angle0 = i * 2 * Math.PI / this.points_ - Math.PI / 2 + this.angle_; - radiusC = i % 2 === 0 ? this.radius_ : this.radius2_; + for (i = 0; i <= points; i++) { + angle0 = i * 2 * Math.PI / points - Math.PI / 2 + this.angle_; + radiusC = i % 2 === 0 ? this.radius_ : radius2; context.lineTo(renderOptions.size / 2 + radiusC * Math.cos(angle0), renderOptions.size / 2 + radiusC * Math.sin(angle0)); } diff --git a/test/spec/ol/style/regularshape.test.js b/test/spec/ol/style/regularshape.test.js index 2a10c4242c..ff7d3f3aac 100644 --- a/test/spec/ol/style/regularshape.test.js +++ b/test/spec/ol/style/regularshape.test.js @@ -36,22 +36,6 @@ describe('ol.style.RegularShape', function() { expect(style.getRadius2()).to.eql(10); }); - it('will use radius for radius2 if radius2 not defined', function() { - var style = new ol.style.RegularShape({ - radius: 5 - }); - expect(style.getRadius()).to.eql(5); - expect(style.getRadius2()).to.eql(5); - }); - - it('will use radius1 for radius2 if radius2 not defined', function() { - var style = new ol.style.RegularShape({ - radius1: 5 - }); - expect(style.getRadius()).to.eql(5); - expect(style.getRadius2()).to.eql(5); - }); - it('creates a canvas if no atlas is used (no fill-style)', function() { var style = new ol.style.RegularShape({radius: 10}); expect(style.getImage()).to.be.an(HTMLCanvasElement);