[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