[OpenLayers-Commits] r1791 - in sandbox/bertil: examples lib lib/OpenLayers lib/OpenLayers/Control lib/OpenLayers/Control/Edition lib/OpenLayers/Renderer
commits at openlayers.org
commits at openlayers.org
Thu Nov 9 09:52:25 EST 2006
Author: bertil
Date: 2006-11-09 09:52:24 -0500 (Thu, 09 Nov 2006)
New Revision: 1791
Modified:
sandbox/bertil/examples/vector.html
sandbox/bertil/lib/OpenLayers.js
sandbox/bertil/lib/OpenLayers/Control/Edition.js
sandbox/bertil/lib/OpenLayers/Control/Edition/DrawLinearPath.js
sandbox/bertil/lib/OpenLayers/Control/Edition/Selection.js
sandbox/bertil/lib/OpenLayers/Renderer/Svg.js
sandbox/bertil/lib/OpenLayers/Style.js
Log:
new tools (drawPolygon, drawPoint)
Modified: sandbox/bertil/examples/vector.html
===================================================================
--- sandbox/bertil/examples/vector.html 2006-11-09 14:38:20 UTC (rev 1790)
+++ sandbox/bertil/examples/vector.html 2006-11-09 14:52:24 UTC (rev 1791)
@@ -20,8 +20,10 @@
toolbar = new OpenLayers.Control.EditionToolbar();
navigation = new OpenLayers.Control.MouseDefaults();
selection = new OpenLayers.Control.Edition.Selection();
- drawLinearPath = new OpenLayers.Control.Edition.DrawLinearPath();
- toolbar.addTools([navigation, selection, drawLinearPath]);
+ drawPoint = new OpenLayers.Control.Edition.DrawPoint();
+ drawLineString = new OpenLayers.Control.Edition.DrawLineString();
+ drawLinearRing = new OpenLayers.Control.Edition.DrawLinearRing();
+ toolbar.addTools([navigation, selection, drawPoint, drawLineString, drawLinearRing]);
map = new OpenLayers.Map('map', {controls: [
toolbar,
@@ -38,28 +40,12 @@
map.zoomToMaxExtent();
-
-
var lineString = new OpenLayers.Feature.Geometry.LineString([
- new OpenLayers.Feature.Geometry.Point(-117.422,15.4688),
- new OpenLayers.Feature.Geometry.Point(-119.531,25.3125),
- new OpenLayers.Feature.Geometry.Point(-114.609,30.9375),
- new OpenLayers.Feature.Geometry.Point(-111.797,37.9688),
- new OpenLayers.Feature.Geometry.Point(-107.578,37.2656),
- new OpenLayers.Feature.Geometry.Point(-101.25,31.6406),
- new OpenLayers.Feature.Geometry.Point(-96.3281,34.4531),
- new OpenLayers.Feature.Geometry.Point(-91.4062,30.2344),
- new OpenLayers.Feature.Geometry.Point(-90,23.9062),
- new OpenLayers.Feature.Geometry.Point(-76.6406,21.0938),
- new OpenLayers.Feature.Geometry.Point(-75.2344,14.0625),
- new OpenLayers.Feature.Geometry.Point(-77.3438,8.4375),
- new OpenLayers.Feature.Geometry.Point(-74.5312,3.51562),
- new OpenLayers.Feature.Geometry.Point(-78.75,0.703125),
- new OpenLayers.Feature.Geometry.Point(-86.4844,4.92188),
- new OpenLayers.Feature.Geometry.Point(-90.7031,2.8125),
- new OpenLayers.Feature.Geometry.Point(-95.625,8.4375),
- new OpenLayers.Feature.Geometry.Point(-100.547,4.21875),
- new OpenLayers.Feature.Geometry.Point(-106.875,0.703125)
+ new OpenLayers.Feature.Geometry.Point(10,10),
+ new OpenLayers.Feature.Geometry.Point(20, 0),
+ new OpenLayers.Feature.Geometry.Point(30, 10),
+ new OpenLayers.Feature.Geometry.Point(40, 0),
+ new OpenLayers.Feature.Geometry.Point(50, 10),
]);
vector.addFeatures(lineString);
Modified: sandbox/bertil/lib/OpenLayers/Control/Edition/DrawLinearPath.js
===================================================================
--- sandbox/bertil/lib/OpenLayers/Control/Edition/DrawLinearPath.js 2006-11-09 14:38:20 UTC (rev 1790)
+++ sandbox/bertil/lib/OpenLayers/Control/Edition/DrawLinearPath.js 2006-11-09 14:52:24 UTC (rev 1791)
@@ -14,19 +14,16 @@
/** @type OpenLayers.Size */
size: new OpenLayers.Size(24,24),
- /** @type Array */
- geometry: null,
-
/**
* @constructor
***/
initialize: function() {
- OpenLayers.Control.Edition.prototype.initialize.apply(this, arguments);
+ OpenLayers.Control.Edition.prototype.initialize.apply(this, arguments);
+ this.geometry = null;
},
turnOn: function(){
OpenLayers.Control.Edition.prototype.turnOn.apply(this, arguments);
- this.geometry = null;
this.geometry = new OpenLayers.Feature.Geometry.LineString();
},
@@ -37,7 +34,6 @@
},
finalizeGeometry: function(){
- console.log(this.geometry);
this.layer.addFeatures(this.geometry);
this.geometry = new OpenLayers.Feature.Geometry.LineString();
},
Modified: sandbox/bertil/lib/OpenLayers/Control/Edition/Selection.js
===================================================================
--- sandbox/bertil/lib/OpenLayers/Control/Edition/Selection.js 2006-11-09 14:38:20 UTC (rev 1790)
+++ sandbox/bertil/lib/OpenLayers/Control/Edition/Selection.js 2006-11-09 14:52:24 UTC (rev 1791)
@@ -44,17 +44,16 @@
},
editionMouseDown: function(evt) {
- if (evt.geometry && evt.geometry.isControlPoint){
+ if (evt.geometry && evt.geometry.CLASS_NAME == "OpenLayers.Feature.Geometry.Point"){
if (this.shiftDown) {
- if (this.controlPoints.indexOf(evt.geometry) < 0){
- this.controlPoints.push(evt.geometry);
+ if (this.points.indexOf(evt.geometry) < 0){
+ this.points.push(evt.geometry);
} else {
- this.controlPoints = this.controlPoints.without(evt.geometry);
+ this.points = this.points.without(evt.geometry);
}
} else {
- this.controlPoints = [evt.geometry];
- }
-
+ this.points = [evt.geometry];
+ }
} else if (evt.geometry){
this.eraseTmpElements();
if (this.shiftDown){
@@ -67,12 +66,12 @@
this.layer.selection = [evt.geometry];
}
this.drawTmpElements();
- this.controlPoints = [];
+ this.points = [];
for(var iSelection = 0; iSelection < this.layer.selection.length; iSelection++) {
if(this.layer.selection.CLASS_NAME == "OpenLayers.Feature.Geometry.Point"){
- this.controlPoints = this.controlPoints.push(this.layer.selection[iSelection]);
+ this.points = this.points.push(this.layer.selection[iSelection]);
} else {
- this.controlPoints = this.controlPoints.concat(this.layer.selection[iSelection].path);
+ this.points = this.points.concat(this.layer.selection[iSelection].path);
}
}
@@ -80,7 +79,7 @@
if (!this.shiftDown){
this.eraseTmpElements();
this.layer.selection = [];
- this.controlPoints = [];
+ this.points = [];
}
}
@@ -96,10 +95,10 @@
this.lastTranslationPoint = evt.point;
- for(var i = 0; i < this.controlPoints.length; i++) {
- this.controlPoints[i].setX(this.controlPoints[i].x + xTranslation);
- this.controlPoints[i].setY(this.controlPoints[i].y + yTranslation);
- this.layer.renderer.drawGeometry(this.controlPoints[i]);
+ for(var i = 0; i < this.points.length; i++) {
+ this.points[i].setX(this.points[i].x + xTranslation);
+ this.points[i].setY(this.points[i].y + yTranslation);
+ this.layer.renderer.drawGeometry(this.points[i]);
}
if(this.layer.selection.length == 1)
Modified: sandbox/bertil/lib/OpenLayers/Control/Edition.js
===================================================================
--- sandbox/bertil/lib/OpenLayers/Control/Edition.js 2006-11-09 14:38:20 UTC (rev 1790)
+++ sandbox/bertil/lib/OpenLayers/Control/Edition.js 2006-11-09 14:52:24 UTC (rev 1791)
@@ -15,7 +15,7 @@
snappingModeB: false,
- snappingModeP: true,
+ snappingModeP: false,
snappingTolerance: 10,
@@ -96,12 +96,8 @@
/**
* @param {Event} evt
*/
- defaultEdition: function (evt) {
+ defaultEdition: function (evt) {
- //this.snappingModeB = true;
- this.snappingModeP = true;
- this.snappingModeB = false;
-
var lonlat = this.map.getLonLatFromLayerPx(evt.xy);
var tmpPoint = new OpenLayers.Feature.Geometry.Point(lonlat.lon, lonlat.lat);
@@ -129,62 +125,102 @@
//calculate snapping point
} else if (this.snappingModeB) {
+ // if already snap on a segment
if (evt.geometry && evt.geometry.isSnappingElement) {
- // return calculated point
+ // Calculate point from segment data
+ var m1 = evt.geometry.m1;
+ var p1 = evt.geometry.p1;
+
+ var m2 = evt.geometry.m2;
+ var p2 = evt.geometry.p2;
+
+ var x = (p2 - p1) / (2 * m1);
+ var y = (m1 * x + p1);
+
+ // Set the snapping point properties
+ evt.point = new OpenLayers.Feature.Geometry.Point(x, y);
+
+ evt.point.style = OpenLayers.Style.DefaultRendererSnappingPointStyle;
+
+ evt.point.isSnappingElement = true;
+
+ // Store the
+ evt.point.m1 = m1;
+ evt.point.p1 = p1;
+ evt.point.m2 = m2;
+ evt.point.p2 = p2;
+
+ // Render the snapping point
+ this.layer.renderer.drawGeometry(evt.point, "tmpSnappingPoint");
+
+ // if not snap on a segment
} else if (evt.geometry) {
- // draw snapping element and return calculated point
- var snappingElement = evt.geometry;
- if (snappingElement && snappingElement.CLASS_NAME != "OpenLayers.Feature.Geometry.Point") {
-
- for(var i = 0; i < snappingElement.path.length - 1; i++ ){
+ if (evt.geometry.path) {
+
+ // Loop all segment
+ for(var i = 0; i < snappingElement.path.length - 2; i++ ){
- var segPoint1 = snappingElement.path[i];
- var segPoint2 = snappingElement.path[i + 1];
+ // Set segment points
+ var point1 = snappingElement.path[i];
+ var point2 = snappingElement.path[i + 1];
- var segPixel1 = this.layer.map.getPixelFromLonLat(segPoint1);
- var segPixel2 = this.layer.map.getPixelFromLonLat(segPoint2);
+ // Calculate screen pixel from segment points
+ var pixel1 = this.layer.map.getPixelFromLonLat(point1);
+ var pixel2 = this.layer.map.getPixelFromLonLat(point2);
- if (evt.xy.x - segPixel1.x < 5 && evt.xy.y - segPixel1.y < 5) {
+ // Compare first segment point pixel to mouse pixel with a tolerance
+ if (evt.xy.x - pixel1.x < this.snappingTolerance && evt.xy.y - pixel1.y < this.snappingTolerance) {
+
+ snappingElement = point1;
+ evt.point = point1;
+
+ // Compare second segment point pixel to mouse pixel with a tolerance
+ } else if (evt.xy.x - pixel2.x < this.snappingTolerance && evt.xy.y - pixel2.y < this.snappingTolerance) {
- snappingElement = segPoint1;
- evt.point = segPoint1;
- } else if (evt.xy.x - segPixel2.x < 5 && evt.xy.y - segPixel2.y < 5) {
-
- snappingElement = segPoint2;
- evt.point = segPoint2;
+ snappingElement = point2;
+ evt.point = point2;
+
+ // Calculate segment snapping point
} else {
- var m1 = (segPoint2.y - segPoint1.y) / (segPoint2.x - segPoint1.x);
- var p1 = segPoint1.y - m1 * segPoint1.x;
+ // Calculate segment function parameters
+ var m1 = (point2.y - point1.y) / (point2.x - point1.x);
+ var p1 = point1.y - m1 * point1.x;
+ // Calculate the inverse segment function which cross the mouse coordinates
var m2 = - m1;
var p2 = tmpPoint.y - m2 * tmpPoint.x;
var x = (p2 - p1) / (2 * m1);
var y = (m1 * x + p1);
- var segPoint3 = new OpenLayers.Feature.Geometry.Point(x, y);
+ evt.point = new OpenLayers.Feature.Geometry.Point(x, y);
- var tmpDelta = Math.sqrt(Math.pow((segPoint3.x - tmpPoint.x), 2) + Math.pow((segPoint3.y - tmpPoint.y), 2));
+ var tmpDelta = Math.sqrt(Math.pow((evt.point.x - tmpPoint.x), 2) + Math.pow((evt.point.y - tmpPoint.y), 2));
- if((tmpDelta < delta || !delta) && Math.min(segPoint1.x, segPoint2.x) < segPoint3.x && segPoint3.x < Math.max(segPoint1.x, segPoint2.x)){
+ // verify the limit of the function and if the distance is shorter as the others
+ if(Math.min(point1.x, point2.x) < evt.point.x &&
+ evt.point.x < Math.max(point1.x, point2.x &&
+ (tmpDelta < delta || !delta))){
+
var delta = tmpDelta;
- snappingElement = new OpenLayers.Feature.Geometry.LineSegment(segPoint1, segPoint2);
- snappingElement.m = m1;
- snappingElement.p = p1;
+ snappingElement = new OpenLayers.Feature.Geometry.LineSegment(point1, point2);
evt.point = segPoint3;
+
+ snappingElement.m = evt.point.m = m1;
+ snappingElement.p = evt.point.p = p1;
}
}
}
}
snappingElement.isSnappingElement = true;
- snappingElement.style = {fillColor: "yellow", fillOpacity: 0.2, strokeColor: "white", strokeWidth: 3, strokeUnit: "%", strokeOpacity: 0.5, pointRadius: 0.1, pointUnit: "%"}
+ snappingElement.style = OpenLayers.Style.DefaultRendererSnappingSegmentStyle;
this.layer.renderer.drawGeometry(snappingElement, "tmpSnappingElement");
evt.point.isSnappingPoint = true;
evt.point.isSnappingElement = true;
- evt.point.style = {fillColor: "red", fillOpacity: 0.2, strokeColor: "white", strokeWidth: 3, strokeUnit: "%", strokeOpacity: 0.5, pointRadius: 0.1, pointUnit: "%"}
+ evt.point.style = OpenLayers.Style.DefaultRendererSnappingPointStyle;
this.layer.renderer.drawGeometry(evt.point, "tmpSnappingPoint");
} else {
// return mouse point
@@ -361,4 +397,3 @@
/** @final @type String */
CLASS_NAME: "OpenLayers.Control.Edition"
});
-
Modified: sandbox/bertil/lib/OpenLayers/Renderer/Svg.js
===================================================================
--- sandbox/bertil/lib/OpenLayers/Renderer/Svg.js 2006-11-09 14:38:20 UTC (rev 1790)
+++ sandbox/bertil/lib/OpenLayers/Renderer/Svg.js 2006-11-09 14:52:24 UTC (rev 1791)
@@ -9,29 +9,12 @@
eventmanager: null,
- style: {
- fillColor: "white",
- fillOpacity: 0.4,
- hoverFillColor: "white",
- hoverFillOpacity: 0.8,
-
- strokeColor: "red",
- strokeOpacity: 1,
- strokeWidth: 0.2,
- strokeUnit: "%",
- hoverStrokeColor: "red",
- hoverStrokeOpacity: 1,
- hoverStrokeWidth: 0.2,
- hoverStrokeUnit: "%",
-
- pointRadius: 1,
- pointUnit: "%",
- hoverPointRadius: 1,
- hoverPointUnit: "%",
+ style: null,
+
+ initialize: function() {
+ this.style = OpenLayers.Style.DefaultRendererStyle;
},
- initialize: function() {},
-
setStyle: function(style) {
this.style = OpenLayers.Util.extend(this.style, style);
return this.style;
@@ -111,12 +94,9 @@
if (id){
geometry.id = id;
}
+
+ style = geometry.style;
- if (geometry.style){
- style = OpenLayers.Util.extend(this.style, geometry.style);
- } else {
- style = this.style;
- }
switch (geometry.CLASS_NAME) {
case "OpenLayers.Feature.Geometry.Point":
Modified: sandbox/bertil/lib/OpenLayers/Style.js
===================================================================
--- sandbox/bertil/lib/OpenLayers/Style.js 2006-11-09 14:38:20 UTC (rev 1790)
+++ sandbox/bertil/lib/OpenLayers/Style.js 2006-11-09 14:52:24 UTC (rev 1791)
@@ -1,32 +1,54 @@
/* Copyright (c) 2006 CampToCamp SA, Bertil Chapuis, published under the BSD license. */
+/*
+ * OpenLayers.Style is a prototype.js HashTable with defaults style properties.
+ */
OpenLayers.Style = OpenLayers.Class.create();
+OpenLayers.Style.DefaultProperties = {
+ fillColor: "white",
+ fillOpacity: 0.4,
+ hoverFillColor: "white",
+ hoverFillOpacity: 0.8,
+ strokeColor: "red",
+ strokeOpacity: 1,
+ strokeWidth: 0.2,
+ strokeUnit: "%",
+ hoverStrokeColor: "red",
+ hoverStrokeOpacity: 1,
+ hoverStrokeWidth: 0.2,
+ hoverStrokeUnit: "%",
+ pointRadius: 1,
+ pointUnit: "%",
+ hoverPointRadius: 1,
+ hoverPointUnit: "%"
+};
OpenLayers.Style.prototype = {
-
- fillColor: null,
-
- fillOpacity: null,
-
- strokeColor: null,
-
- strokeOpacity: null,
-
- strokeWidth: null,
-
- strokeWidthUnit: null,
-
- hoverFillColor: null,
-
- hoverFillOpacity: null,
-
- hoverStrokeColor: null,
-
- hoverStrokeOpacity: null,
-
- hoverStrokeWidth: null,
-
- hoverStrokeWidthUnit: null,
-
- initialize: function(){}
-
-}
\ No newline at end of file
+
+ initialize: function(object) {
+ var hash = Object.extend(OpenLayers.Style.DefaultProperties, object || {});
+ Object.extend(hash, Enumerable);
+ Object.extend(hash, Hash);
+ Object.extend(this, hash);
+ }
+}
+
+/*
+ * Global styles
+ */
+OpenLayers.Style.DefaultRendererStyle = new OpenLayers.Style();
+OpenLayers.Style.DefaultRendererSnappingSegmentStyle = new OpenLayers.Style({
+ strokeColor: "white",
+ strokeOpacity: 0.5,
+ strokeWidth: 6,
+ strokeUnit: "%",
+ pointRadius: 0.1,
+ pointUnit: "%"
+});
+OpenLayers.Style.DefaultRendererSnappingPointStyle = new OpenLayers.Style({
+ strokeColor: "blue",
+ strokeOpacity: 1,
+ strokeWidth: 0.2,
+ strokeUnit: "%",
+ pointRadius: 0.2,
+ pointUnit: "%"
+});
\ No newline at end of file
Modified: sandbox/bertil/lib/OpenLayers.js
===================================================================
--- sandbox/bertil/lib/OpenLayers.js 2006-11-09 14:38:20 UTC (rev 1790)
+++ sandbox/bertil/lib/OpenLayers.js 2006-11-09 14:52:24 UTC (rev 1791)
@@ -101,9 +101,12 @@
"OpenLayers/Control/Scale.js",
"OpenLayers/Control/LayerSwitcher.js",
"OpenLayers/Control/Edition.js",
- "OpenLayers/Control/EditionToolbar.js",
+ "OpenLayers/Control/EditionToolbar.js",
+ "OpenLayers/Control/Edition/Selection.js",
"OpenLayers/Control/Edition/DrawLinearPath.js",
- "OpenLayers/Control/Edition/Selection.js",
+ "OpenLayers/Control/Edition/DrawPoint.js",
+ "OpenLayers/Control/Edition/DrawLineString.js",
+ "OpenLayers/Control/Edition/DrawLinearRing.js",
"OpenLayers/Feature/Geometry.js",
"OpenLayers/Feature/Geometry/Point.js",
"OpenLayers/Feature/Geometry/Curve.js",
More information about the Commits
mailing list