Geometries inherit from ol.Observable
Because ol.Observable is now a struct, we have stricter type checking (hence the extra assertions).
This commit is contained in:
@@ -3,9 +3,9 @@ goog.provide('ol.geom.GeometryEvent');
|
|||||||
goog.provide('ol.geom.GeometryType');
|
goog.provide('ol.geom.GeometryType');
|
||||||
|
|
||||||
goog.require('goog.events.Event');
|
goog.require('goog.events.Event');
|
||||||
goog.require('goog.events.EventTarget');
|
|
||||||
goog.require('goog.object');
|
goog.require('goog.object');
|
||||||
goog.require('ol.Extent');
|
goog.require('ol.Extent');
|
||||||
|
goog.require('ol.Observable');
|
||||||
goog.require('ol.TransformFunction');
|
goog.require('ol.TransformFunction');
|
||||||
|
|
||||||
|
|
||||||
@@ -30,13 +30,13 @@ ol.geom.GeometryType = {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* @constructor
|
* @constructor
|
||||||
* @extends {goog.events.EventTarget}
|
* @extends {ol.Observable}
|
||||||
* @todo stability experimental
|
* @todo stability experimental
|
||||||
*/
|
*/
|
||||||
ol.geom.Geometry = function() {
|
ol.geom.Geometry = function() {
|
||||||
goog.base(this);
|
goog.base(this);
|
||||||
};
|
};
|
||||||
goog.inherits(ol.geom.Geometry, goog.events.EventTarget);
|
goog.inherits(ol.geom.Geometry, ol.Observable);
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -10,6 +10,7 @@ goog.require('ol.MapBrowserEvent');
|
|||||||
goog.require('ol.MapBrowserEvent.EventType');
|
goog.require('ol.MapBrowserEvent.EventType');
|
||||||
goog.require('ol.geom.GeometryType');
|
goog.require('ol.geom.GeometryType');
|
||||||
goog.require('ol.geom.LineString');
|
goog.require('ol.geom.LineString');
|
||||||
|
goog.require('ol.geom.LinearRing');
|
||||||
goog.require('ol.geom.MultiLineString');
|
goog.require('ol.geom.MultiLineString');
|
||||||
goog.require('ol.geom.MultiPoint');
|
goog.require('ol.geom.MultiPoint');
|
||||||
goog.require('ol.geom.MultiPolygon');
|
goog.require('ol.geom.MultiPolygon');
|
||||||
@@ -209,6 +210,7 @@ ol.interaction.Draw.prototype.atFinish_ = function(event) {
|
|||||||
if (this.mode_ === ol.interaction.DrawMode.LINESTRING) {
|
if (this.mode_ === ol.interaction.DrawMode.LINESTRING) {
|
||||||
potentiallyDone = geometry.getCoordinates().length > 2;
|
potentiallyDone = geometry.getCoordinates().length > 2;
|
||||||
} else if (this.mode_ === ol.interaction.DrawMode.POLYGON) {
|
} else if (this.mode_ === ol.interaction.DrawMode.POLYGON) {
|
||||||
|
goog.asserts.assertInstanceof(geometry, ol.geom.Polygon);
|
||||||
potentiallyDone = geometry.getRings()[0].getCoordinates().length > 3;
|
potentiallyDone = geometry.getRings()[0].getCoordinates().length > 3;
|
||||||
}
|
}
|
||||||
if (potentiallyDone) {
|
if (potentiallyDone) {
|
||||||
@@ -270,22 +272,29 @@ ol.interaction.Draw.prototype.modifyDrawing_ = function(event) {
|
|||||||
var geometry = this.sketchFeature_.getGeometry();
|
var geometry = this.sketchFeature_.getGeometry();
|
||||||
var coordinates, last;
|
var coordinates, last;
|
||||||
if (this.mode_ === ol.interaction.DrawMode.POINT) {
|
if (this.mode_ === ol.interaction.DrawMode.POINT) {
|
||||||
|
goog.asserts.assertInstanceof(geometry, ol.geom.Point);
|
||||||
last = geometry.getCoordinates();
|
last = geometry.getCoordinates();
|
||||||
last[0] = coordinate[0];
|
last[0] = coordinate[0];
|
||||||
last[1] = coordinate[1];
|
last[1] = coordinate[1];
|
||||||
geometry.setCoordinates(last);
|
geometry.setCoordinates(last);
|
||||||
} else {
|
} else {
|
||||||
if (this.mode_ === ol.interaction.DrawMode.LINESTRING) {
|
if (this.mode_ === ol.interaction.DrawMode.LINESTRING) {
|
||||||
|
goog.asserts.assertInstanceof(geometry, ol.geom.LineString);
|
||||||
coordinates = geometry.getCoordinates();
|
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];
|
geometry = geometry.getRings()[0];
|
||||||
|
goog.asserts.assertInstanceof(geometry, ol.geom.LinearRing);
|
||||||
coordinates = geometry.getCoordinates();
|
coordinates = geometry.getCoordinates();
|
||||||
}
|
}
|
||||||
if (this.atFinish_(event)) {
|
if (this.atFinish_(event)) {
|
||||||
// snap to finish
|
// snap to finish
|
||||||
coordinate = this.finishCoordinate_.slice();
|
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 = coordinates[coordinates.length - 1];
|
||||||
last[0] = coordinate[0];
|
last[0] = coordinate[0];
|
||||||
last[1] = coordinate[1];
|
last[1] = coordinate[1];
|
||||||
@@ -304,11 +313,13 @@ ol.interaction.Draw.prototype.addToDrawing_ = function(event) {
|
|||||||
var geometry = this.sketchFeature_.getGeometry();
|
var geometry = this.sketchFeature_.getGeometry();
|
||||||
var coordinates, last;
|
var coordinates, last;
|
||||||
if (this.mode_ === ol.interaction.DrawMode.LINESTRING) {
|
if (this.mode_ === ol.interaction.DrawMode.LINESTRING) {
|
||||||
|
goog.asserts.assertInstanceof(geometry, ol.geom.LineString);
|
||||||
this.finishCoordinate_ = coordinate.slice();
|
this.finishCoordinate_ = coordinate.slice();
|
||||||
coordinates = geometry.getCoordinates();
|
coordinates = geometry.getCoordinates();
|
||||||
coordinates.push(coordinate.slice());
|
coordinates.push(coordinate.slice());
|
||||||
geometry.setCoordinates(coordinates);
|
geometry.setCoordinates(coordinates);
|
||||||
} else if (this.mode_ === ol.interaction.DrawMode.POLYGON) {
|
} else if (this.mode_ === ol.interaction.DrawMode.POLYGON) {
|
||||||
|
goog.asserts.assertInstanceof(geometry, ol.geom.Polygon);
|
||||||
var ring = geometry.getRings()[0];
|
var ring = geometry.getRings()[0];
|
||||||
coordinates = ring.getCoordinates();
|
coordinates = ring.getCoordinates();
|
||||||
coordinates.push(coordinate.slice());
|
coordinates.push(coordinate.slice());
|
||||||
@@ -329,10 +340,12 @@ ol.interaction.Draw.prototype.finishDrawing_ = function(event) {
|
|||||||
var geometry = sketchFeature.getGeometry();
|
var geometry = sketchFeature.getGeometry();
|
||||||
var coordinates = geometry.getCoordinates();
|
var coordinates = geometry.getCoordinates();
|
||||||
if (this.mode_ === ol.interaction.DrawMode.LINESTRING) {
|
if (this.mode_ === ol.interaction.DrawMode.LINESTRING) {
|
||||||
|
goog.asserts.assertInstanceof(geometry, ol.geom.LineString);
|
||||||
// remove the redundant last point
|
// remove the redundant last point
|
||||||
coordinates.pop();
|
coordinates.pop();
|
||||||
geometry.setCoordinates(coordinates);
|
geometry.setCoordinates(coordinates);
|
||||||
} else if (this.mode_ === ol.interaction.DrawMode.POLYGON) {
|
} else if (this.mode_ === ol.interaction.DrawMode.POLYGON) {
|
||||||
|
goog.asserts.assertInstanceof(geometry, ol.geom.Polygon);
|
||||||
// force clockwise order for exterior ring
|
// force clockwise order for exterior ring
|
||||||
sketchFeature.setGeometry(new ol.geom.Polygon(coordinates));
|
sketchFeature.setGeometry(new ol.geom.Polygon(coordinates));
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -339,8 +339,9 @@ ol.interaction.Modify.prototype.createOrUpdateVertexFeature_ =
|
|||||||
this.vertexFeature_ = vertexFeature;
|
this.vertexFeature_ = vertexFeature;
|
||||||
this.sketchLayer_.getVectorSource().addFeatures([vertexFeature]);
|
this.sketchLayer_.getVectorSource().addFeatures([vertexFeature]);
|
||||||
} else {
|
} else {
|
||||||
var geometry = vertexFeature.getGeometry();
|
var point = vertexFeature.getGeometry();
|
||||||
geometry.setCoordinates(coordinates);
|
goog.asserts.assertInstanceof(point, ol.geom.Point);
|
||||||
|
point.setCoordinates(coordinates);
|
||||||
}
|
}
|
||||||
if (this.sketchLayer_.getStyle() !== style) {
|
if (this.sketchLayer_.getStyle() !== style) {
|
||||||
this.sketchLayer_.setStyle(style);
|
this.sketchLayer_.setStyle(style);
|
||||||
@@ -505,6 +506,7 @@ ol.interaction.Modify.prototype.insertVertex_ =
|
|||||||
var segment = segmentData.segment;
|
var segment = segmentData.segment;
|
||||||
var feature = segmentData.feature;
|
var feature = segmentData.feature;
|
||||||
var geometry = segmentData.geometry;
|
var geometry = segmentData.geometry;
|
||||||
|
goog.asserts.assertInstanceof(geometry, ol.geom.LineString);
|
||||||
var index = segmentData.index;
|
var index = segmentData.index;
|
||||||
var coordinates = geometry.getCoordinates();
|
var coordinates = geometry.getCoordinates();
|
||||||
coordinates.splice(index + 1, 0, vertex);
|
coordinates.splice(index + 1, 0, vertex);
|
||||||
|
|||||||
@@ -274,6 +274,7 @@ ol.renderer.canvas.Vector.prototype.renderPointFeatures_ =
|
|||||||
}
|
}
|
||||||
for (j = 0, jj = components.length; j < jj; ++j) {
|
for (j = 0, jj = components.length; j < jj; ++j) {
|
||||||
point = components[j];
|
point = components[j];
|
||||||
|
goog.asserts.assertInstanceof(point, ol.geom.Point);
|
||||||
vec = [point.get(0), point.get(1), 0];
|
vec = [point.get(0), point.get(1), 0];
|
||||||
goog.vec.Mat4.multVec3(this.transform_, vec, vec);
|
goog.vec.Mat4.multVec3(this.transform_, vec, vec);
|
||||||
context.drawImage(content, Math.round(vec[0] + xOffset),
|
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) {
|
for (j = 0, jj = components.length; j < jj; ++j) {
|
||||||
poly = components[j];
|
poly = components[j];
|
||||||
|
goog.asserts.assertInstanceof(poly, ol.geom.Polygon);
|
||||||
rings = poly.getRings();
|
rings = poly.getRings();
|
||||||
numRings = rings.length;
|
numRings = rings.length;
|
||||||
if (numRings > 0) {
|
if (numRings > 0) {
|
||||||
@@ -537,9 +539,11 @@ ol.renderer.canvas.Vector.getLabelVectors = function(geometry) {
|
|||||||
}
|
}
|
||||||
var type = geometry.getType();
|
var type = geometry.getType();
|
||||||
if (type == ol.geom.GeometryType.POINT) {
|
if (type == ol.geom.GeometryType.POINT) {
|
||||||
|
goog.asserts.assertInstanceof(geometry, ol.geom.Point);
|
||||||
return [[geometry.get(0), geometry.get(1), 0]];
|
return [[geometry.get(0), geometry.get(1), 0]];
|
||||||
}
|
}
|
||||||
if (type == ol.geom.GeometryType.POLYGON) {
|
if (type == ol.geom.GeometryType.POLYGON) {
|
||||||
|
goog.asserts.assertInstanceof(geometry, ol.geom.Polygon);
|
||||||
var coordinates = geometry.getInteriorPoint();
|
var coordinates = geometry.getInteriorPoint();
|
||||||
return [[coordinates[0], coordinates[1], 0]];
|
return [[coordinates[0], coordinates[1], 0]];
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ describe('ol.geom.Geometry', function() {
|
|||||||
it('creates a new geometry', function() {
|
it('creates a new geometry', function() {
|
||||||
var geom = new ol.geom.Geometry();
|
var geom = new ol.geom.Geometry();
|
||||||
expect(geom).to.be.a(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.Event');
|
||||||
goog.require('goog.events.EventTarget');
|
goog.require('ol.Observable');
|
||||||
goog.require('ol.geom.Geometry');
|
goog.require('ol.geom.Geometry');
|
||||||
goog.require('ol.geom.GeometryEvent');
|
goog.require('ol.geom.GeometryEvent');
|
||||||
goog.require('ol.geom.Point');
|
goog.require('ol.geom.Point');
|
||||||
|
|||||||
Reference in New Issue
Block a user