[OpenLayers-Commits] r1768 - in sandbox/bertil: examples lib/OpenLayers lib/OpenLayers/Control lib/OpenLayers/Feature lib/OpenLayers/Feature/Geometry

commits at openlayers.org commits at openlayers.org
Tue Nov 7 11:27:31 EST 2006


Author: pgiraud
Date: 2006-11-07 11:27:31 -0500 (Tue, 07 Nov 2006)
New Revision: 1768

Added:
   sandbox/bertil/examples/snapping.html
Modified:
   sandbox/bertil/lib/OpenLayers/Control/Edition.js
   sandbox/bertil/lib/OpenLayers/Feature/Geometry.js
   sandbox/bertil/lib/OpenLayers/Feature/Geometry/LineString.js
   sandbox/bertil/lib/OpenLayers/Util.js
Log:
snapping on vertices (snappingModeP)
see snapping.html

Added: sandbox/bertil/examples/snapping.html
===================================================================
--- sandbox/bertil/examples/snapping.html	                        (rev 0)
+++ sandbox/bertil/examples/snapping.html	2006-11-07 16:27:31 UTC (rev 1768)
@@ -0,0 +1,376 @@
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <style type="text/css">
+        #map {
+            width:800px;
+            height: 400px;
+            border: 1px solid black;
+        }
+    </style>
+    <script src="../lib/prototype.js"></script>
+    <script src="../lib/OpenLayers.js"></script>
+
+    <script type="text/javascript">
+        <!--
+        var map, vector;
+
+        function init() {
+            //console.log(OpenLayers.Event);
+
+            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]);
+			
+            map = new OpenLayers.Map('map', {controls: [
+				toolbar,
+				new OpenLayers.Control.LayerSwitcher(),
+				new OpenLayers.Control.PanZoom()
+			]});
+			
+			vector = new OpenLayers.Layer.Vector("Vector Layer");
+            var ol_wms = new OpenLayers.Layer.WMS( "OpenLayers WMS", "http://labs.metacarta.com/wms/vmap0?", {layers: 'basic'}); 
+
+            map.addLayers([vector, ol_wms]);
+          
+            //map.addControl(new OpenLayers.Control.LayerSwitcher());
+            
+            map.zoomToMaxExtent();
+            
+            
+            var lineString = new OpenLayers.Feature.Geometry.LineString(
+            	[new OpenLayers.Feature.Geometry.Point(-10,-10),
+            	 new OpenLayers.Feature.Geometry.Point(-20,-20),
+            	 new OpenLayers.Feature.Geometry.Point(-30,-40),
+            	 new OpenLayers.Feature.Geometry.Point(-30,-50),
+            	 new OpenLayers.Feature.Geometry.Point(-40,-40),
+            	 new OpenLayers.Feature.Geometry.Point(-10,-80),
+            	 new OpenLayers.Feature.Geometry.Point(-90,-20)
+            	 ]);
+           	lineString.style = {
+				 fillColor: "blue",
+				 fillOpacity: 0.1,
+				 strokeColor: "red",	
+				 strokeWidth: "0.25",
+				 strokeUnit: "%",		
+				 strokeOpacity: 1
+           		}
+
+		    var lineString = new OpenLayers.Feature.Geometry.LineString(
+                [new OpenLayers.Feature.Geometry.Point(106.172,51.3281),
+new OpenLayers.Feature.Geometry.Point(106.875,51.3281),
+new OpenLayers.Feature.Geometry.Point(107.578,51.3281),
+new OpenLayers.Feature.Geometry.Point(109.688,51.3281),
+new OpenLayers.Feature.Geometry.Point(115.312,52.0312),
+new OpenLayers.Feature.Geometry.Point(120.234,52.0312),
+new OpenLayers.Feature.Geometry.Point(124.453,52.0312),
+new OpenLayers.Feature.Geometry.Point(127.266,52.0312),
+new OpenLayers.Feature.Geometry.Point(129.375,52.0312),
+new OpenLayers.Feature.Geometry.Point(130.781,52.0312),
+new OpenLayers.Feature.Geometry.Point(134.297,49.9219),
+new OpenLayers.Feature.Geometry.Point(135.703,49.2188),
+new OpenLayers.Feature.Geometry.Point(137.812,47.8125),
+new OpenLayers.Feature.Geometry.Point(139.922,45.7031),
+new OpenLayers.Feature.Geometry.Point(141.328,45),
+new OpenLayers.Feature.Geometry.Point(142.734,43.5938),
+new OpenLayers.Feature.Geometry.Point(144.141,42.1875),
+new OpenLayers.Feature.Geometry.Point(145.547,41.4844),
+new OpenLayers.Feature.Geometry.Point(146.953,40.7812),
+new OpenLayers.Feature.Geometry.Point(147.656,39.375),
+new OpenLayers.Feature.Geometry.Point(150.469,37.2656),
+new OpenLayers.Feature.Geometry.Point(151.875,35.1562),
+new OpenLayers.Feature.Geometry.Point(153.281,34.4531),
+new OpenLayers.Feature.Geometry.Point(153.281,33.0469),
+new OpenLayers.Feature.Geometry.Point(153.984,32.3438),
+new OpenLayers.Feature.Geometry.Point(154.688,32.3438),
+new OpenLayers.Feature.Geometry.Point(155.391,31.6406),
+new OpenLayers.Feature.Geometry.Point(155.391,30.2344),
+new OpenLayers.Feature.Geometry.Point(156.094,29.5312),
+new OpenLayers.Feature.Geometry.Point(156.797,28.8281),
+new OpenLayers.Feature.Geometry.Point(156.797,28.125),
+new OpenLayers.Feature.Geometry.Point(158.203,25.3125),
+new OpenLayers.Feature.Geometry.Point(158.906,24.6094),
+new OpenLayers.Feature.Geometry.Point(158.906,23.9062),
+new OpenLayers.Feature.Geometry.Point(160.312,21.7969),
+new OpenLayers.Feature.Geometry.Point(161.016,19.6875),
+new OpenLayers.Feature.Geometry.Point(161.719,17.5781),
+new OpenLayers.Feature.Geometry.Point(162.422,15.4688),
+new OpenLayers.Feature.Geometry.Point(162.422,13.3594),
+new OpenLayers.Feature.Geometry.Point(163.125,11.9531),
+new OpenLayers.Feature.Geometry.Point(163.125,10.5469),
+new OpenLayers.Feature.Geometry.Point(163.828,4.92188),
+new OpenLayers.Feature.Geometry.Point(163.828,2.8125)
+
+                ]);
+            lineString.style = {
+				 fillColor: "blue",
+				 fillOpacity: 0.1,
+				 strokeColor: "red",	
+				 strokeWidth: "0.25",
+				 strokeUnit: "%",		
+          strokeOpacity: 1
+           		}
+            vector.addFeatures(lineString);
+          
+            var lineString = new OpenLayers.Feature.Geometry.LineString(
+                [new OpenLayers.Feature.Geometry.Point(-161.016,5.625),
+new OpenLayers.Feature.Geometry.Point(-161.016,6.32812),
+new OpenLayers.Feature.Geometry.Point(-161.719,7.03125),
+new OpenLayers.Feature.Geometry.Point(-162.422,9.14062),
+new OpenLayers.Feature.Geometry.Point(-162.422,10.5469),
+new OpenLayers.Feature.Geometry.Point(-162.422,11.9531),
+new OpenLayers.Feature.Geometry.Point(-163.125,13.3594),
+new OpenLayers.Feature.Geometry.Point(-163.125,14.7656),
+new OpenLayers.Feature.Geometry.Point(-163.125,15.4688),
+new OpenLayers.Feature.Geometry.Point(-163.125,16.875),
+new OpenLayers.Feature.Geometry.Point(-163.828,17.5781),
+new OpenLayers.Feature.Geometry.Point(-163.828,18.9844),
+new OpenLayers.Feature.Geometry.Point(-163.828,20.3906),
+new OpenLayers.Feature.Geometry.Point(-163.828,21.7969),
+new OpenLayers.Feature.Geometry.Point(-163.828,24.6094),
+new OpenLayers.Feature.Geometry.Point(-163.828,26.0156),
+new OpenLayers.Feature.Geometry.Point(-163.828,27.4219),
+new OpenLayers.Feature.Geometry.Point(-163.828,28.8281),
+new OpenLayers.Feature.Geometry.Point(-163.828,30.2344),
+new OpenLayers.Feature.Geometry.Point(-163.828,30.9375),
+new OpenLayers.Feature.Geometry.Point(-163.828,31.6406),
+new OpenLayers.Feature.Geometry.Point(-163.828,32.3438),
+new OpenLayers.Feature.Geometry.Point(-163.828,33.0469),
+new OpenLayers.Feature.Geometry.Point(-163.828,33.75),
+new OpenLayers.Feature.Geometry.Point(-163.828,35.8594),
+new OpenLayers.Feature.Geometry.Point(-163.828,36.5625),
+new OpenLayers.Feature.Geometry.Point(-163.125,37.2656),
+new OpenLayers.Feature.Geometry.Point(-163.125,37.9688),
+new OpenLayers.Feature.Geometry.Point(-163.125,38.6719),
+new OpenLayers.Feature.Geometry.Point(-163.125,39.375),
+new OpenLayers.Feature.Geometry.Point(-150.469,53.4375),
+new OpenLayers.Feature.Geometry.Point(-142.031,59.0625),
+new OpenLayers.Feature.Geometry.Point(-132.891,63.9844),
+new OpenLayers.Feature.Geometry.Point(-132.891,64.6875),
+new OpenLayers.Feature.Geometry.Point(-132.188,64.6875),
+new OpenLayers.Feature.Geometry.Point(-127.969,68.2031),
+new OpenLayers.Feature.Geometry.Point(-127.266,68.9062),
+new OpenLayers.Feature.Geometry.Point(-125.859,69.6094),
+new OpenLayers.Feature.Geometry.Point(-123.75,70.3125),
+new OpenLayers.Feature.Geometry.Point(-122.344,71.0156),
+new OpenLayers.Feature.Geometry.Point(-121.641,71.0156),
+new OpenLayers.Feature.Geometry.Point(-120.938,71.0156),
+new OpenLayers.Feature.Geometry.Point(-118.828,71.7188),
+new OpenLayers.Feature.Geometry.Point(-117.422,71.7188),
+new OpenLayers.Feature.Geometry.Point(-116.719,72.4219),
+new OpenLayers.Feature.Geometry.Point(-115.312,72.4219),
+new OpenLayers.Feature.Geometry.Point(-114.609,72.4219),
+new OpenLayers.Feature.Geometry.Point(-113.203,72.4219),
+new OpenLayers.Feature.Geometry.Point(-109.688,72.4219),
+new OpenLayers.Feature.Geometry.Point(-107.578,72.4219),
+new OpenLayers.Feature.Geometry.Point(-106.875,71.7188),
+new OpenLayers.Feature.Geometry.Point(-104.766,71.7188),
+new OpenLayers.Feature.Geometry.Point(-103.359,71.0156),
+new OpenLayers.Feature.Geometry.Point(-102.656,71.0156),
+new OpenLayers.Feature.Geometry.Point(-102.656,70.3125),
+new OpenLayers.Feature.Geometry.Point(-101.953,70.3125)
+
+                
+                ]);
+            lineString.style = {
+         fillColor: "blue",
+         fillOpacity: 0.1,
+         strokeColor: "red",  
+         strokeWidth: "0.25",
+         strokeUnit: "%",   
+         strokeOpacity: 1
+              }
+            
+            
+            vector.addFeatures(lineString);
+            
+            var lineString = new OpenLayers.Feature.Geometry.LineString(
+                [new OpenLayers.Feature.Geometry.Point(-66.0938,-18.2812),
+new OpenLayers.Feature.Geometry.Point(-66.0938,-17.5781),
+new OpenLayers.Feature.Geometry.Point(-66.7969,-16.875),
+new OpenLayers.Feature.Geometry.Point(-78.75,4.21875),
+new OpenLayers.Feature.Geometry.Point(-49.9219,25.3125),
+new OpenLayers.Feature.Geometry.Point(-49.2188,25.3125),
+new OpenLayers.Feature.Geometry.Point(0.703125,11.9531),
+new OpenLayers.Feature.Geometry.Point(0.703125,11.25),
+new OpenLayers.Feature.Geometry.Point(-4.92188,-10.5469),
+new OpenLayers.Feature.Geometry.Point(-4.92188,-11.25),
+new OpenLayers.Feature.Geometry.Point(-3.51562,-11.25),
+new OpenLayers.Feature.Geometry.Point(3.51562,-14.0625),
+new OpenLayers.Feature.Geometry.Point(45,-18.2812),
+new OpenLayers.Feature.Geometry.Point(46.4062,2.8125),
+new OpenLayers.Feature.Geometry.Point(46.4062,3.51562),
+new OpenLayers.Feature.Geometry.Point(45.7031,3.51562),
+new OpenLayers.Feature.Geometry.Point(45.7031,4.21875),
+new OpenLayers.Feature.Geometry.Point(45,4.92188),
+new OpenLayers.Feature.Geometry.Point(42.1875,9.84375),
+new OpenLayers.Feature.Geometry.Point(42.1875,10.5469),
+new OpenLayers.Feature.Geometry.Point(41.4844,11.9531),
+new OpenLayers.Feature.Geometry.Point(40.7812,12.6562),
+new OpenLayers.Feature.Geometry.Point(40.0781,13.3594),
+new OpenLayers.Feature.Geometry.Point(38.6719,16.875),
+new OpenLayers.Feature.Geometry.Point(37.9688,17.5781),
+new OpenLayers.Feature.Geometry.Point(37.2656,19.6875),
+new OpenLayers.Feature.Geometry.Point(36.5625,21.7969),
+new OpenLayers.Feature.Geometry.Point(35.1562,24.6094),
+new OpenLayers.Feature.Geometry.Point(35.1562,25.3125),
+new OpenLayers.Feature.Geometry.Point(35.1562,26.7188),
+new OpenLayers.Feature.Geometry.Point(35.1562,27.4219),
+new OpenLayers.Feature.Geometry.Point(35.1562,28.125),
+new OpenLayers.Feature.Geometry.Point(35.1562,28.8281),
+new OpenLayers.Feature.Geometry.Point(35.1562,29.5312),
+new OpenLayers.Feature.Geometry.Point(35.1562,30.2344),
+new OpenLayers.Feature.Geometry.Point(35.1562,30.9375),
+new OpenLayers.Feature.Geometry.Point(35.8594,30.9375),
+new OpenLayers.Feature.Geometry.Point(36.5625,33.0469),
+new OpenLayers.Feature.Geometry.Point(36.5625,33.75),
+new OpenLayers.Feature.Geometry.Point(37.2656,34.4531),
+new OpenLayers.Feature.Geometry.Point(37.2656,35.1562),
+new OpenLayers.Feature.Geometry.Point(37.9688,35.8594),
+new OpenLayers.Feature.Geometry.Point(40.7812,38.6719),
+new OpenLayers.Feature.Geometry.Point(40.7812,39.375),
+new OpenLayers.Feature.Geometry.Point(41.4844,39.375),
+new OpenLayers.Feature.Geometry.Point(41.4844,40.0781),
+new OpenLayers.Feature.Geometry.Point(42.1875,40.0781)
+                ]);
+            lineString.style = {
+         fillColor: "blue",
+         fillOpacity: 0.1,
+         strokeColor: "red",  
+         strokeWidth: "0.25",
+         strokeUnit: "%",   
+         strokeOpacity: 1
+              }
+            vector.addFeatures(lineString);
+                
+var lineString = new OpenLayers.Feature.Geometry.LineString([
+new OpenLayers.Feature.Geometry.Point(50.625,42.8906),
+new OpenLayers.Feature.Geometry.Point(52.0312,42.8906),
+new OpenLayers.Feature.Geometry.Point(52.7344,42.8906),
+new OpenLayers.Feature.Geometry.Point(54.1406,42.8906),
+new OpenLayers.Feature.Geometry.Point(54.8438,42.8906),
+new OpenLayers.Feature.Geometry.Point(56.25,42.8906),
+new OpenLayers.Feature.Geometry.Point(56.9531,42.8906),
+new OpenLayers.Feature.Geometry.Point(57.6562,42.8906),
+new OpenLayers.Feature.Geometry.Point(59.0625,42.8906),
+new OpenLayers.Feature.Geometry.Point(59.7656,42.8906),
+new OpenLayers.Feature.Geometry.Point(60.4688,42.8906),
+new OpenLayers.Feature.Geometry.Point(61.1719,42.8906),
+new OpenLayers.Feature.Geometry.Point(61.875,42.8906),
+new OpenLayers.Feature.Geometry.Point(63.2812,42.8906),
+new OpenLayers.Feature.Geometry.Point(63.9844,42.1875),
+new OpenLayers.Feature.Geometry.Point(65.3906,42.1875),
+new OpenLayers.Feature.Geometry.Point(66.0938,42.1875),
+new OpenLayers.Feature.Geometry.Point(67.5,42.1875),
+new OpenLayers.Feature.Geometry.Point(68.2031,41.4844),
+new OpenLayers.Feature.Geometry.Point(69.6094,41.4844),
+new OpenLayers.Feature.Geometry.Point(70.3125,40.7812),
+new OpenLayers.Feature.Geometry.Point(71.7188,40.7812),
+new OpenLayers.Feature.Geometry.Point(72.4219,40.7812),
+new OpenLayers.Feature.Geometry.Point(73.125,40.0781),
+new OpenLayers.Feature.Geometry.Point(75.2344,39.375),
+new OpenLayers.Feature.Geometry.Point(75.9375,39.375),
+new OpenLayers.Feature.Geometry.Point(76.6406,39.375),
+new OpenLayers.Feature.Geometry.Point(77.3438,38.6719),
+new OpenLayers.Feature.Geometry.Point(78.0469,38.6719),
+new OpenLayers.Feature.Geometry.Point(78.75,37.9688),
+new OpenLayers.Feature.Geometry.Point(79.4531,37.9688),
+new OpenLayers.Feature.Geometry.Point(80.1562,37.9688),
+new OpenLayers.Feature.Geometry.Point(80.8594,37.2656),
+new OpenLayers.Feature.Geometry.Point(81.5625,37.2656),
+new OpenLayers.Feature.Geometry.Point(104.766,4.92188),
+new OpenLayers.Feature.Geometry.Point(105.469,4.21875),
+new OpenLayers.Feature.Geometry.Point(105.469,2.8125),
+new OpenLayers.Feature.Geometry.Point(106.172,0.703125),
+new OpenLayers.Feature.Geometry.Point(106.875,-0.703125),
+new OpenLayers.Feature.Geometry.Point(106.875,-1.40625),
+new OpenLayers.Feature.Geometry.Point(107.578,-2.10938),
+new OpenLayers.Feature.Geometry.Point(107.578,-4.21875),
+new OpenLayers.Feature.Geometry.Point(108.281,-4.92188),
+new OpenLayers.Feature.Geometry.Point(108.281,-5.625),
+new OpenLayers.Feature.Geometry.Point(108.281,-7.03125),
+new OpenLayers.Feature.Geometry.Point(108.984,-7.73438),
+new OpenLayers.Feature.Geometry.Point(108.984,-8.4375),
+new OpenLayers.Feature.Geometry.Point(108.984,-10.5469),
+new OpenLayers.Feature.Geometry.Point(108.984,-11.25),
+new OpenLayers.Feature.Geometry.Point(109.688,-13.3594),
+new OpenLayers.Feature.Geometry.Point(109.688,-14.0625),
+new OpenLayers.Feature.Geometry.Point(109.688,-19.6875),
+new OpenLayers.Feature.Geometry.Point(109.688,-21.0938),
+new OpenLayers.Feature.Geometry.Point(110.391,-22.5),
+new OpenLayers.Feature.Geometry.Point(110.391,-23.9062),
+new OpenLayers.Feature.Geometry.Point(110.391,-24.6094),
+new OpenLayers.Feature.Geometry.Point(110.391,-26.0156),
+new OpenLayers.Feature.Geometry.Point(110.391,-26.7188),
+new OpenLayers.Feature.Geometry.Point(110.391,-28.125),
+new OpenLayers.Feature.Geometry.Point(110.391,-28.8281),
+new OpenLayers.Feature.Geometry.Point(84.375,-48.5156),
+new OpenLayers.Feature.Geometry.Point(50.625,-49.9219),
+new OpenLayers.Feature.Geometry.Point(-22.5,-49.9219),
+new OpenLayers.Feature.Geometry.Point(-16.875,-66.7969),
+new OpenLayers.Feature.Geometry.Point(-57.6562,-69.6094),
+new OpenLayers.Feature.Geometry.Point(-86.4844,-46.4062),
+new OpenLayers.Feature.Geometry.Point(-97.0312,-39.375),
+new OpenLayers.Feature.Geometry.Point(-113.203,-30.2344),
+new OpenLayers.Feature.Geometry.Point(-113.906,-28.8281),
+new OpenLayers.Feature.Geometry.Point(-113.906,-28.125),
+new OpenLayers.Feature.Geometry.Point(-114.609,-26.0156),
+new OpenLayers.Feature.Geometry.Point(-115.312,-25.3125),
+new OpenLayers.Feature.Geometry.Point(-116.016,-24.6094),
+new OpenLayers.Feature.Geometry.Point(-116.719,-22.5),
+new OpenLayers.Feature.Geometry.Point(-116.719,-21.7969),
+new OpenLayers.Feature.Geometry.Point(-117.422,-21.0938),
+new OpenLayers.Feature.Geometry.Point(-118.125,-18.9844),
+new OpenLayers.Feature.Geometry.Point(-118.125,-18.2812),
+new OpenLayers.Feature.Geometry.Point(-118.828,-16.875),
+new OpenLayers.Feature.Geometry.Point(-119.531,-14.0625),
+new OpenLayers.Feature.Geometry.Point(-119.531,-13.3594),
+new OpenLayers.Feature.Geometry.Point(-120.234,-11.25),
+new OpenLayers.Feature.Geometry.Point(-120.234,-9.84375),
+new OpenLayers.Feature.Geometry.Point(-120.938,-7.73438),
+new OpenLayers.Feature.Geometry.Point(-120.938,-6.32812),
+new OpenLayers.Feature.Geometry.Point(-120.938,-5.625),
+new OpenLayers.Feature.Geometry.Point(-120.938,-3.51562),
+new OpenLayers.Feature.Geometry.Point(-121.641,-2.8125),
+new OpenLayers.Feature.Geometry.Point(-121.641,-2.10938),
+new OpenLayers.Feature.Geometry.Point(-121.641,3.51562),
+new OpenLayers.Feature.Geometry.Point(-121.641,4.92188),
+new OpenLayers.Feature.Geometry.Point(-121.641,5.625),
+new OpenLayers.Feature.Geometry.Point(-121.641,6.32812),
+new OpenLayers.Feature.Geometry.Point(-121.641,7.03125),
+new OpenLayers.Feature.Geometry.Point(-121.641,7.73438),
+new OpenLayers.Feature.Geometry.Point(-121.641,9.14062),
+new OpenLayers.Feature.Geometry.Point(-121.641,11.25),
+new OpenLayers.Feature.Geometry.Point(-107.578,28.125)
+                ]);
+            lineString.style = {
+         fillColor: "blue",
+         fillOpacity: 0.1,
+         strokeColor: "red",  
+         strokeWidth: "0.25",
+         strokeUnit: "%",   
+         strokeOpacity: 1
+              }
+            vector.addFeatures(lineString);
+            
+            
+			vector.renderer.observe();
+			
+			map.events.register("draw", map, function(e) {
+				//console.log(e.feature);              
+            });
+        }
+        // -->
+    </script>
+  </head>
+  <body onload="init()">
+    <div id="map"></div>
+    <div id="console"></div>
+    <script type="text/javascript">
+        <!--
+
+                // -->
+    </script>
+  </body>
+</html>

Modified: sandbox/bertil/lib/OpenLayers/Control/Edition.js
===================================================================
--- sandbox/bertil/lib/OpenLayers/Control/Edition.js	2006-11-07 15:25:25 UTC (rev 1767)
+++ sandbox/bertil/lib/OpenLayers/Control/Edition.js	2006-11-07 16:27:31 UTC (rev 1768)
@@ -13,8 +13,12 @@
     /** @type OpenLayers.Layer.Vector */
     layer: null,
     
-    snappingMode: false,
+    snappingModeB: false,
     
+    snappingModeP: false,
+    
+    snappingTolerance: 10,
+    
     controllingMode: false,
 
     /**
@@ -99,13 +103,33 @@
      * @param {Event} evt
      */
     defaultEdition: function (evt) {
+        this.snappingModeP = true;
         this.snappingModeB = true;   
         
         var lonlat = this.map.getLonLatFromLayerPx(evt.xy);
         evt.point = new OpenLayers.Feature.Geometry.Point(lonlat.lon, lonlat.lat);
         
-        //calculate snapping point        
-        if (this.snappingModeB) {
+        if (this.snappingModeP) {
+            var closestVertex = null;
+            var distance = this.snappingTolerance;
+            vector.features.each(function(feature) {
+                if (!feature.extent || !feature.extent.containsLonLat(lonlat)) {
+                    return;
+                }
+                feature.path.each(function(vertex) {
+                    var currentDistance = OpenLayers.Util.distance2Pts(vertex.lon, vertex.lat, lonlat.lon, lonlat.lat);
+                    if (currentDistance < distance) {
+                        closestVertex = vertex;
+                        distance = currentDistance;
+                    }
+                });
+            });
+            if (closestVertex != null) {
+                evt.point = new OpenLayers.Feature.Geometry.Point(closestVertex.lon, closestVertex.lat);
+            }
+        }
+        //calculate snapping point
+        else if (this.snappingModeB) {
             
             if (evt.geometry && evt.geometry.isSnappingElement) {
                 // return calculated point

Modified: sandbox/bertil/lib/OpenLayers/Feature/Geometry/LineString.js
===================================================================
--- sandbox/bertil/lib/OpenLayers/Feature/Geometry/LineString.js	2006-11-07 15:25:25 UTC (rev 1767)
+++ sandbox/bertil/lib/OpenLayers/Feature/Geometry/LineString.js	2006-11-07 16:27:31 UTC (rev 1768)
@@ -12,6 +12,27 @@
         } else {
             this.path = [];
         }
+        
+        if (this.path.length > 0) {
+        // compute the extent of the geometry
+            var xmin, ymin, xmax, ymax = null;
+            this.path.each(function(point) {
+                if (point.lon < xmin || xmin == null) {
+                    xmin = point.lon;
+                }
+                if (point.lon > xmax || xmax == null) {
+                    xmax = point.lon;
+                }
+                if (point.lat < ymin || ymin == null) {
+                    ymin = point.lat;
+                }
+                if (point.lat > xmax || ymax == null) {
+                    ymax = point.lat;
+                }
+            });
+            
+            this.extent = new OpenLayers.Bounds(xmin, ymin, xmax, ymax);
+        }
     },
 
     toString: function() {

Modified: sandbox/bertil/lib/OpenLayers/Feature/Geometry.js
===================================================================
--- sandbox/bertil/lib/OpenLayers/Feature/Geometry.js	2006-11-07 15:25:25 UTC (rev 1767)
+++ sandbox/bertil/lib/OpenLayers/Feature/Geometry.js	2006-11-07 16:27:31 UTC (rev 1768)
@@ -4,6 +4,9 @@
 OpenLayers.Feature.Geometry.prototype = OpenLayers.Class.inherit( OpenLayers.Feature, {
 
     attributes: [],
+        
+    /** @type OpenLayers.Bounds */
+    extent: null,
     
     initialize: function() {
         this.id = OpenLayers.Util.createUniqueID(this.CLASS_NAME+ "_");

Modified: sandbox/bertil/lib/OpenLayers/Util.js
===================================================================
--- sandbox/bertil/lib/OpenLayers/Util.js	2006-11-07 15:25:25 UTC (rev 1767)
+++ sandbox/bertil/lib/OpenLayers/Util.js	2006-11-07 16:27:31 UTC (rev 1768)
@@ -692,3 +692,15 @@
 
     return [valueL, valueT];
 };
+
+/**
+ * Computes the carthesian distance between 2 points
+ * 
+ * @param integer
+ * @param integer
+ * @param integer
+ * @param integer
+ */
+OpenLayers.Util.distance2Pts = function( x1, y1, x2, y2 ) {
+  return (Math.sqrt(Math.pow(x1 - x2, 2) + Math.pow(y1 - y2, 2)));
+};



More information about the Commits mailing list