[OpenLayers-Commits] r11089 - in sandbox/elemoine/draw-feature:
lib/OpenLayers/Handler tests/Handler
commits-20090109 at openlayers.org
commits-20090109 at openlayers.org
Thu Feb 10 06:30:30 EST 2011
Author: erilem
Date: 2011-02-10 03:30:30 -0800 (Thu, 10 Feb 2011)
New Revision: 11089
Modified:
sandbox/elemoine/draw-feature/lib/OpenLayers/Handler/Path.js
sandbox/elemoine/draw-feature/lib/OpenLayers/Handler/Polygon.js
sandbox/elemoine/draw-feature/tests/Handler/Polygon.html
Log:
polygon handler - support drawing holes
Modified: sandbox/elemoine/draw-feature/lib/OpenLayers/Handler/Path.js
===================================================================
--- sandbox/elemoine/draw-feature/lib/OpenLayers/Handler/Path.js 2011-02-10 10:46:45 UTC (rev 11088)
+++ sandbox/elemoine/draw-feature/lib/OpenLayers/Handler/Path.js 2011-02-10 11:30:30 UTC (rev 11089)
@@ -281,10 +281,11 @@
this.finalize();
} else {
if(this.lastDown.equals(evt.xy)) {
- if(this.lastUp == null && this.persist) {
+ var first = this.lastUp == null;
+ if(first && this.persist) {
this.destroyPersistedFeature();
}
- this.addPoint(evt.xy);
+ this.addPoint(evt.xy, first);
this.lastUp = evt.xy;
}
}
Modified: sandbox/elemoine/draw-feature/lib/OpenLayers/Handler/Polygon.js
===================================================================
--- sandbox/elemoine/draw-feature/lib/OpenLayers/Handler/Polygon.js 2011-02-10 10:46:45 UTC (rev 11088)
+++ sandbox/elemoine/draw-feature/lib/OpenLayers/Handler/Polygon.js 2011-02-10 11:30:30 UTC (rev 11089)
@@ -85,13 +85,29 @@
this.line = new OpenLayers.Feature.Vector(
new OpenLayers.Geometry.LinearRing([this.point.geometry])
);
-
- // check for hole digitizing
- var polygon;
- if (this.holeModifier && this.evt && this.evt[this.holeModifier]) {
+ this.polygon = new OpenLayers.Feature.Vector(
+ new OpenLayers.Geometry.Polygon([this.line.geometry])
+ );
+ this.callback("create", [this.point.geometry, this.getSketch()]);
+ this.point.geometry.clearBounds();
+ this.layer.addFeatures([this.polygon, this.point], {silent: true});
+ },
+
+ /**
+ * Method: addPoint
+ * Add point to geometry.
+ *
+ * Parameters:
+ * pixel - {<OpenLayers.Pixel>} The pixel location for the new point.
+ * first - {Boolean} Indicate whether this is the first point we're
+ * adding.
+ */
+ addPoint: function(pixel, first) {
+ if(first && this.holeModifier &&
+ this.evt && this.evt[this.holeModifier]) {
var geometry = this.point.geometry;
var features = this.control.layer.features;
- var candidate;
+ var candidate, polygon;
// look for intersections, last drawn gets priority
for (var i=features.length-1; i>=0; --i) {
candidate = features[i].geometry;
@@ -113,15 +129,7 @@
}
}
}
- if (!polygon) {
- this.polygon = new OpenLayers.Feature.Vector(
- new OpenLayers.Geometry.Polygon([this.line.geometry])
- );
- }
-
- this.callback("create", [this.point.geometry, this.getSketch()]);
- this.point.geometry.clearBounds();
- this.layer.addFeatures([this.polygon, this.point], {silent: true});
+ OpenLayers.Handler.Path.prototype.addPoint.apply(this, arguments);
},
/**
Modified: sandbox/elemoine/draw-feature/tests/Handler/Polygon.html
===================================================================
--- sandbox/elemoine/draw-feature/tests/Handler/Polygon.html 2011-02-10 10:46:45 UTC (rev 11088)
+++ sandbox/elemoine/draw-feature/tests/Handler/Polygon.html 2011-02-10 11:30:30 UTC (rev 11089)
@@ -269,7 +269,7 @@
map.destroy();
}
- function _test_rings(t) {
+ function test_rings(t) {
t.plan(12);
var log = [];
@@ -315,6 +315,7 @@
log = [];
// start at -9, 9
event = {xy: new OpenLayers.Pixel(-9, 9)};
+ trigger("mousemove", event);
trigger("mousedown", event);
trigger("mouseup", event);
// draw to -1, 9
@@ -339,7 +340,7 @@
trigger("dblclick", event);
// make assertions
- t.eq(log.length, 9, "a) correct number of events");
+ t.eq(log.length, 10, "a) correct number of events");
t.eq(log[log.length-1].type, "featureadded", "a) featureadded event last");
t.eq(log[log.length-1].feature.geometry.getArea(), 64, "a) correct polygon area");
@@ -347,6 +348,7 @@
log = [];
// start at -6, 6
event = {xy: new OpenLayers.Pixel(-6, 6), altKey: true};
+ trigger("mousemove", event);
trigger("mousedown", event);
trigger("mouseup", event);
// draw to -3, 6
@@ -371,7 +373,7 @@
trigger("dblclick", event);
// make assertions
- t.eq(log.length, 8, "b) correct number of events");
+ t.eq(log.length, 9, "b) correct number of events");
t.eq(log[log.length-1].type, "sketchcomplete", "b) sketchcomplete event last");
t.eq(log[log.length-1].feature.geometry.getArea(), 55, "b) correct polygon area");
@@ -380,6 +382,7 @@
log = [];
// start at -2, 2
event = {xy: new OpenLayers.Pixel(-2, 2)};
+ trigger("mousemove", event);
trigger("mousedown", event);
trigger("mouseup", event);
// draw to 2, 2
@@ -404,7 +407,7 @@
trigger("dblclick", event);
// make assertions
- t.eq(log.length, 9, "c) correct number of events");
+ t.eq(log.length, 10, "c) correct number of events");
t.eq(log[log.length-1].type, "featureadded", "c) featureadded event last");
t.eq(log[log.length-1].feature.geometry.getArea(), 16, "c) correct polygon area");
@@ -412,6 +415,7 @@
log = [];
// start at -1, 1
event = {xy: new OpenLayers.Pixel(-1, 1), altKey: true};
+ trigger("mousemove", event);
trigger("mousedown", event);
trigger("mouseup", event);
// draw to 1, 1
@@ -441,7 +445,7 @@
trigger("dblclick", event);
// make assertions
- t.eq(log.length, 11, "d) correct number of events");
+ t.eq(log.length, 12, "d) correct number of events");
t.eq(log[log.length-1].type, "sketchcomplete", "d) sketchcomplete event last");
t.eq(log[log.length-1].feature.geometry.getArea(), 12, "d) correct polygon area");
More information about the Commits
mailing list