[OpenLayers-Commits] r2023 - in sandbox/vector/lib/OpenLayers/Control: EditingMode EditingTool

commits at openlayers.org commits at openlayers.org
Thu Dec 7 13:17:31 EST 2006


Author: pgiraud
Date: 2006-12-07 13:17:28 -0500 (Thu, 07 Dec 2006)
New Revision: 2023

Modified:
   sandbox/vector/lib/OpenLayers/Control/EditingMode/PointSnapping.js
   sandbox/vector/lib/OpenLayers/Control/EditingTool/MovePathPoint.js
   sandbox/vector/lib/OpenLayers/Control/EditingTool/RemovePathPoint.js
Log:
closest vertex computation changed to use distance2Pts

Modified: sandbox/vector/lib/OpenLayers/Control/EditingMode/PointSnapping.js
===================================================================
--- sandbox/vector/lib/OpenLayers/Control/EditingMode/PointSnapping.js	2006-12-07 12:39:11 UTC (rev 2022)
+++ sandbox/vector/lib/OpenLayers/Control/EditingMode/PointSnapping.js	2006-12-07 18:17:28 UTC (rev 2023)
@@ -30,28 +30,30 @@
             layer.renderer.drawGeometry(this.tmpPoint, this.style);
                                    
         } else if (targetGeometry && targetGeometry.path) {
-
+            var distance = this.tolerance
             for(var i = 0; i < targetGeometry.path.length; i++) {
                                 
-                var point = targetGeometry.path[i];
-                
                 // Calculate screen pixel from segment points and mouseCoordinates
-                var pixel = layer.map.getPixelFromLonLat(point);
+                var pixel = layer.map.getPixelFromLonLat(targetGeometry.path[i]);
                 var mousePixel = layer.map.getPixelFromLonLat(mouseCoordinates);
-             
+                
                 // Compare first segment point pixel to mouse pixel with a tolerance
-                if (Math.abs(mousePixel.x - pixel.x) < this.tolerance && Math.abs(mousePixel.y - pixel.y) < this.tolerance) {
-                    snappingPoint = point;
-                    snappingPoint.isSnappingElement = true;
-                    
-                    // Set the snapping style an draw the geometry
-                    this.tmpPoint.x = snappingPoint.x;
-                    this.tmpPoint.y = snappingPoint.y;
-                    layer.renderer.drawGeometry(this.tmpPoint, this.style);
-                    
-                    break;
+                var currentDistance = OpenLayers.Util.distance2Pts(pixel.x, pixel.y, mousePixel.x, mousePixel.y);
+                if (currentDistance < distance) {
+                    closestVertexIndex = i;
+                    distance = currentDistance;
                 }
             }
+            var point = targetGeometry.path[closestVertexIndex];
+            
+            snappingPoint = point;
+            snappingPoint.isSnappingElement = true;
+            
+            // Set the snapping style an draw the geometry
+            this.tmpPoint.x = snappingPoint.x;
+            this.tmpPoint.y = snappingPoint.y;
+            layer.renderer.drawGeometry(this.tmpPoint, this.style);
+            
         } else if (targetGeometry && targetGeometry.components) {
             for (var i = 0; i < targetGeometry.components.length; i++) {
                 snappingPoint = this.calculatePoint(mouseCoordinates, targetGeometry.components[i], currentGeometry, layer);

Modified: sandbox/vector/lib/OpenLayers/Control/EditingTool/MovePathPoint.js
===================================================================
--- sandbox/vector/lib/OpenLayers/Control/EditingTool/MovePathPoint.js	2006-12-07 12:39:11 UTC (rev 2022)
+++ sandbox/vector/lib/OpenLayers/Control/EditingTool/MovePathPoint.js	2006-12-07 18:17:28 UTC (rev 2023)
@@ -98,7 +98,7 @@
      * @param {OpenLayers.LonLat} mouseCoordinates
      */
     _handleSelection: function(geometry, mouseCoordinates) {
-        
+        var distance = this.tolerance
         for(var i = 0; i < geometry.path.length; i++) {
             
             var tmpPoint = geometry.path[i];
@@ -108,12 +108,15 @@
             var mousePixel = this.layer.map.getPixelFromLonLat(mouseCoordinates);
          
             // Compare first segment point pixel to mouse pixel with a tolerance
-            if (Math.abs(mousePixel.x - pixel.x) < this.tolerance && Math.abs(mousePixel.y - pixel.y) < this.tolerance) {
-                var point = tmpPoint;
-                break;
+            var currentDistance = OpenLayers.Util.distance2Pts(pixel.x, pixel.y, mousePixel.x, mousePixel.y);
+            if (currentDistance < distance) {
+                closestVertexIndex = i;
+                distance = currentDistance;
             }
         }
-         
+        
+        var point = geometry.path[closestVertexIndex];
+        
         // Point Selection            
         if (point) {
             // Multiple point Selection

Modified: sandbox/vector/lib/OpenLayers/Control/EditingTool/RemovePathPoint.js
===================================================================
--- sandbox/vector/lib/OpenLayers/Control/EditingTool/RemovePathPoint.js	2006-12-07 12:39:11 UTC (rev 2022)
+++ sandbox/vector/lib/OpenLayers/Control/EditingTool/RemovePathPoint.js	2006-12-07 18:17:28 UTC (rev 2023)
@@ -44,16 +44,21 @@
 
     defaultMouseDown: function(evt) {
         OpenLayers.Control.EditingTool.prototype.defaultMouseDown.apply(this, arguments);
-        if (evt.targetGeometry && evt.targetGeometry.path){            
-            for(var i = 0; i < evt.targetGeometry.path.length; i++){
+        var distance = this.tolerance
+        if (evt.targetGeometry && evt.targetGeometry.path) {
+            for(var i = 0; i < evt.targetGeometry.path.length; i++) {
                 var pixel = this.layer.map.getPixelFromLonLat(evt.targetGeometry.path[i]);
-                if (Math.abs(evt.xy.x - pixel.x) > this.tolerance && Math.abs(evt.xy.y - pixel.y) > this.tolerance) {
-                    this.layer.renderer.drawGeometry(evt.targetGeometry.path[i], this.layer.style);
-                    evt.targetGeometry.removePoint(evt.targetGeometry.path[i]);
-                    break;
+                
+                var currentDistance = OpenLayers.Util.distance2Pts(pixel.x, pixel.y, evt.xy.x, evt.xy.y);
+                if (currentDistance < distance) {
+                    closestVertexIndex = i;
+                    distance = currentDistance;
                 }
             }
+            evt.targetGeometry.removePoint(evt.targetGeometry.path[closestVertexIndex]);
+            
             this.layer.updateFeatures([evt.targetGeometry.feature]);
+            this.layer.renderer.drawGeometry(evt.targetGeometry, this.layer.style);
         }
     },
 



More information about the Commits mailing list