diff --git a/src/ol/geom/geometry.js b/src/ol/geom/geometry.js index 09d93cf5f2..0351bf22cd 100644 --- a/src/ol/geom/geometry.js +++ b/src/ol/geom/geometry.js @@ -3,9 +3,9 @@ goog.provide('ol.geom.GeometryEvent'); goog.provide('ol.geom.GeometryType'); goog.require('goog.events.Event'); -goog.require('goog.events.EventTarget'); goog.require('goog.object'); goog.require('ol.Extent'); +goog.require('ol.Observable'); goog.require('ol.TransformFunction'); @@ -30,13 +30,13 @@ ol.geom.GeometryType = { /** * @constructor - * @extends {goog.events.EventTarget} + * @extends {ol.Observable} * @todo stability experimental */ ol.geom.Geometry = function() { goog.base(this); }; -goog.inherits(ol.geom.Geometry, goog.events.EventTarget); +goog.inherits(ol.geom.Geometry, ol.Observable); /** diff --git a/src/ol/interaction/drawinteraction.js b/src/ol/interaction/drawinteraction.js index 6157a21131..b2bd009c99 100644 --- a/src/ol/interaction/drawinteraction.js +++ b/src/ol/interaction/drawinteraction.js @@ -10,6 +10,7 @@ goog.require('ol.MapBrowserEvent'); goog.require('ol.MapBrowserEvent.EventType'); goog.require('ol.geom.GeometryType'); goog.require('ol.geom.LineString'); +goog.require('ol.geom.LinearRing'); goog.require('ol.geom.MultiLineString'); goog.require('ol.geom.MultiPoint'); goog.require('ol.geom.MultiPolygon'); @@ -209,6 +210,7 @@ ol.interaction.Draw.prototype.atFinish_ = function(event) { if (this.mode_ === ol.interaction.DrawMode.LINESTRING) { potentiallyDone = geometry.getCoordinates().length > 2; } else if (this.mode_ === ol.interaction.DrawMode.POLYGON) { + goog.asserts.assertInstanceof(geometry, ol.geom.Polygon); potentiallyDone = geometry.getRings()[0].getCoordinates().length > 3; } if (potentiallyDone) { @@ -270,22 +272,29 @@ ol.interaction.Draw.prototype.modifyDrawing_ = function(event) { var geometry = this.sketchFeature_.getGeometry(); var coordinates, last; if (this.mode_ === ol.interaction.DrawMode.POINT) { + goog.asserts.assertInstanceof(geometry, ol.geom.Point); last = geometry.getCoordinates(); last[0] = coordinate[0]; last[1] = coordinate[1]; geometry.setCoordinates(last); } else { if (this.mode_ === ol.interaction.DrawMode.LINESTRING) { + goog.asserts.assertInstanceof(geometry, ol.geom.LineString); coordinates = geometry.getCoordinates(); - } else if (this.mode_ === ol.interaction.DrawMode.POLYGON) { + } else { + goog.asserts.assert(this.mode_ === ol.interaction.DrawMode.POLYGON); + goog.asserts.assertInstanceof(geometry, ol.geom.Polygon); geometry = geometry.getRings()[0]; + goog.asserts.assertInstanceof(geometry, ol.geom.LinearRing); coordinates = geometry.getCoordinates(); } if (this.atFinish_(event)) { // snap to finish coordinate = this.finishCoordinate_.slice(); } - this.sketchPoint_.getGeometry().setCoordinates(coordinate); + var point = this.sketchPoint_.getGeometry(); + goog.asserts.assertInstanceof(point, ol.geom.Point); + point.setCoordinates(coordinate); last = coordinates[coordinates.length - 1]; last[0] = coordinate[0]; last[1] = coordinate[1]; @@ -304,11 +313,13 @@ ol.interaction.Draw.prototype.addToDrawing_ = function(event) { var geometry = this.sketchFeature_.getGeometry(); var coordinates, last; if (this.mode_ === ol.interaction.DrawMode.LINESTRING) { + goog.asserts.assertInstanceof(geometry, ol.geom.LineString); this.finishCoordinate_ = coordinate.slice(); coordinates = geometry.getCoordinates(); coordinates.push(coordinate.slice()); geometry.setCoordinates(coordinates); } else if (this.mode_ === ol.interaction.DrawMode.POLYGON) { + goog.asserts.assertInstanceof(geometry, ol.geom.Polygon); var ring = geometry.getRings()[0]; coordinates = ring.getCoordinates(); coordinates.push(coordinate.slice()); @@ -329,10 +340,12 @@ ol.interaction.Draw.prototype.finishDrawing_ = function(event) { var geometry = sketchFeature.getGeometry(); var coordinates = geometry.getCoordinates(); if (this.mode_ === ol.interaction.DrawMode.LINESTRING) { + goog.asserts.assertInstanceof(geometry, ol.geom.LineString); // remove the redundant last point coordinates.pop(); geometry.setCoordinates(coordinates); } else if (this.mode_ === ol.interaction.DrawMode.POLYGON) { + goog.asserts.assertInstanceof(geometry, ol.geom.Polygon); // force clockwise order for exterior ring sketchFeature.setGeometry(new ol.geom.Polygon(coordinates)); } diff --git a/src/ol/interaction/modifyinteraction.js b/src/ol/interaction/modifyinteraction.js index 94fde65c71..33fc1fde76 100644 --- a/src/ol/interaction/modifyinteraction.js +++ b/src/ol/interaction/modifyinteraction.js @@ -339,8 +339,9 @@ ol.interaction.Modify.prototype.createOrUpdateVertexFeature_ = this.vertexFeature_ = vertexFeature; this.sketchLayer_.getVectorSource().addFeatures([vertexFeature]); } else { - var geometry = vertexFeature.getGeometry(); - geometry.setCoordinates(coordinates); + var point = vertexFeature.getGeometry(); + goog.asserts.assertInstanceof(point, ol.geom.Point); + point.setCoordinates(coordinates); } if (this.sketchLayer_.getStyle() !== style) { this.sketchLayer_.setStyle(style); @@ -505,6 +506,7 @@ ol.interaction.Modify.prototype.insertVertex_ = var segment = segmentData.segment; var feature = segmentData.feature; var geometry = segmentData.geometry; + goog.asserts.assertInstanceof(geometry, ol.geom.LineString); var index = segmentData.index; var coordinates = geometry.getCoordinates(); coordinates.splice(index + 1, 0, vertex); diff --git a/src/ol/renderer/canvas/canvasvectorrenderer.js b/src/ol/renderer/canvas/canvasvectorrenderer.js index 213f0e6cbc..c90bda9f7c 100644 --- a/src/ol/renderer/canvas/canvasvectorrenderer.js +++ b/src/ol/renderer/canvas/canvasvectorrenderer.js @@ -274,6 +274,7 @@ ol.renderer.canvas.Vector.prototype.renderPointFeatures_ = } for (j = 0, jj = components.length; j < jj; ++j) { point = components[j]; + goog.asserts.assertInstanceof(point, ol.geom.Point); vec = [point.get(0), point.get(1), 0]; goog.vec.Mat4.multVec3(this.transform_, vec, vec); context.drawImage(content, Math.round(vec[0] + xOffset), @@ -406,6 +407,7 @@ ol.renderer.canvas.Vector.prototype.renderPolygonFeatures_ = } for (j = 0, jj = components.length; j < jj; ++j) { poly = components[j]; + goog.asserts.assertInstanceof(poly, ol.geom.Polygon); rings = poly.getRings(); numRings = rings.length; if (numRings > 0) { @@ -537,9 +539,11 @@ ol.renderer.canvas.Vector.getLabelVectors = function(geometry) { } var type = geometry.getType(); if (type == ol.geom.GeometryType.POINT) { + goog.asserts.assertInstanceof(geometry, ol.geom.Point); return [[geometry.get(0), geometry.get(1), 0]]; } if (type == ol.geom.GeometryType.POLYGON) { + goog.asserts.assertInstanceof(geometry, ol.geom.Polygon); var coordinates = geometry.getInteriorPoint(); return [[coordinates[0], coordinates[1], 0]]; } diff --git a/test/spec/ol/geom/geometry.test.js b/test/spec/ol/geom/geometry.test.js index a2898d1fe8..25949ffb84 100644 --- a/test/spec/ol/geom/geometry.test.js +++ b/test/spec/ol/geom/geometry.test.js @@ -6,7 +6,7 @@ describe('ol.geom.Geometry', function() { it('creates a new geometry', function() { var geom = new ol.geom.Geometry(); expect(geom).to.be.a(ol.geom.Geometry); - expect(geom).to.be.a(goog.events.EventTarget); + expect(geom).to.be.a(ol.Observable); }); }); @@ -45,7 +45,7 @@ describe('ol.geom.GeometryEvent', function() { }); goog.require('goog.events.Event'); -goog.require('goog.events.EventTarget'); +goog.require('ol.Observable'); goog.require('ol.geom.Geometry'); goog.require('ol.geom.GeometryEvent'); goog.require('ol.geom.Point');