Tests for draw interaction

The tests revealed that polygons can be drawn with counter-clockwise exterior ring order.  In the polygon constructor, we enforce clockwise winding for exterior rings.  So after drawing, we pass polygon coordinates back to the constructor before adding feature to the target layer.
This commit is contained in:
Tim Schaub
2013-11-12 15:49:03 -07:00
parent 5a898884ec
commit 05b9922861
2 changed files with 353 additions and 11 deletions

View File

@@ -326,25 +326,23 @@ ol.interaction.Draw.prototype.finishDrawing_ = function(event) {
var sketchFeature = this.abortDrawing_();
goog.asserts.assert(!goog.isNull(sketchFeature));
sketchFeature.setRenderIntent(ol.layer.VectorLayerRenderIntent.DEFAULT);
var geometry = sketchFeature.getGeometry();
var coordinates = geometry.getCoordinates();
if (this.mode_ === ol.interaction.DrawMode.LINESTRING) {
var geometry = sketchFeature.getGeometry();
var coordinates = geometry.getCoordinates();
// remove the redundant last point
coordinates.pop();
geometry.setCoordinates(coordinates);
} else if (this.mode_ === ol.interaction.DrawMode.POLYGON) {
// force clockwise order for exterior ring
sketchFeature.setGeometry(new ol.geom.Polygon(coordinates));
}
// cast multi-part geometries
if (this.type_ === ol.geom.GeometryType.MULTIPOINT) {
sketchFeature.setGeometry(
new ol.geom.MultiPoint(
[sketchFeature.getGeometry().getCoordinates()]));
sketchFeature.setGeometry(new ol.geom.MultiPoint([coordinates]));
} else if (this.type_ === ol.geom.GeometryType.MULTILINESTRING) {
sketchFeature.setGeometry(
new ol.geom.MultiLineString(
[sketchFeature.getGeometry().getCoordinates()]));
sketchFeature.setGeometry(new ol.geom.MultiLineString([coordinates]));
} else if (this.type_ === ol.geom.GeometryType.MULTIPOLYGON) {
sketchFeature.setGeometry(
new ol.geom.MultiPolygon(
[sketchFeature.getGeometry().getCoordinates()]));
sketchFeature.setGeometry(new ol.geom.MultiPolygon([coordinates]));
}
this.layer_.addFeatures([sketchFeature]);
};