[OpenLayers-Commits] r1766 - in sandbox/bertil: examples lib/OpenLayers/Control lib/OpenLayers/Control/Edition lib/OpenLayers/Feature lib/OpenLayers/Feature/Geometry lib/OpenLayers/Layer lib/OpenLayers/Renderer

commits at openlayers.org commits at openlayers.org
Tue Nov 7 09:57:43 EST 2006


Author: bertil
Date: 2006-11-07 09:57:43 -0500 (Tue, 07 Nov 2006)
New Revision: 1766

Modified:
   sandbox/bertil/examples/vector.html
   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/Control/EditionToolbar.js
   sandbox/bertil/lib/OpenLayers/Control/snapping.backup
   sandbox/bertil/lib/OpenLayers/Feature/Geometry.js
   sandbox/bertil/lib/OpenLayers/Feature/Geometry/CubicBezierCurve.js
   sandbox/bertil/lib/OpenLayers/Feature/Geometry/CubicBezierSurface.js
   sandbox/bertil/lib/OpenLayers/Feature/Geometry/LineSegment.js
   sandbox/bertil/lib/OpenLayers/Feature/Geometry/LineString.js
   sandbox/bertil/lib/OpenLayers/Feature/Geometry/LinearRing.js
   sandbox/bertil/lib/OpenLayers/Feature/Geometry/Point.js
   sandbox/bertil/lib/OpenLayers/Feature/Geometry/Polygon.js
   sandbox/bertil/lib/OpenLayers/Layer/Vector.js
   sandbox/bertil/lib/OpenLayers/Renderer/Svg.js
Log:
refactoring

Modified: sandbox/bertil/examples/vector.html
===================================================================
--- sandbox/bertil/examples/vector.html	2006-11-06 21:13:47 UTC (rev 1765)
+++ sandbox/bertil/examples/vector.html	2006-11-07 14:57:43 UTC (rev 1766)
@@ -51,14 +51,6 @@
             	 new OpenLayers.Feature.Geometry.Point(-90,-20)
             	 */
             	 ]);
-           	lineString.style = {
-				 fillColor: "blue",
-				 fillOpacity: 0.2,
-				 strokeColor: "red",	
-				 strokeWidth: "1",
-				 strokeUnit: "%",		
-				 strokeOpacity: 1
-           		}
            	
             	 
             var bezier = new OpenLayers.Feature.Geometry.CubicBezierSurface(
@@ -69,14 +61,6 @@
             	 new OpenLayers.Feature.Geometry.Point(60,20),
             	 new OpenLayers.Feature.Geometry.Point(100,60),
             	 new OpenLayers.Feature.Geometry.Point(30,40)]);
-            bezier.style = {
-				 fillColor: "blue",
-				 fillOpacity: 0.2,
-				 strokeColor: "red",	
-				 strokeWidth: "0.25",
-				 strokeUnit: "%",		
-				 strokeOpacity: 1
-           		}
 		
             
             

Modified: sandbox/bertil/lib/OpenLayers/Control/Edition/DrawLinearPath.js
===================================================================
--- sandbox/bertil/lib/OpenLayers/Control/Edition/DrawLinearPath.js	2006-11-06 21:13:47 UTC (rev 1765)
+++ sandbox/bertil/lib/OpenLayers/Control/Edition/DrawLinearPath.js	2006-11-07 14:57:43 UTC (rev 1766)
@@ -15,154 +15,75 @@
     size: new OpenLayers.Size(24,24),
 
     /** @type Array */
-    path: [],
+    geometry: null,
 
     /**
      * @constructor
     ***/
     initialize: function() {
-        OpenLayers.Control.Edition.prototype.initialize.apply(this, arguments);
+        OpenLayers.Control.Edition.prototype.initialize.apply(this, arguments);   
     },
     
+    turnOn: function(){
+        OpenLayers.Control.Edition.prototype.turnOn.apply(this, arguments);
+        this.geometry = new OpenLayers.Feature.Geometry.LineString();
+    },
+    
     turnOff: function(){
         OpenLayers.Control.Edition.prototype.turnOff.apply(this, arguments);
         this.eraseTmpElements();
-        this.path = [];
+        this.geometry = null;
     },
-    
-    calculatePoint: function(px){
-        var lonlat = this.map.getLonLatFromLayerPx(px);
-        var tmpPoint = new OpenLayers.Feature.Geometry.Point(lonlat.lon, lonlat.lat);
-        
-        //calculate snapping point
-        if(this.snappingMode && this.backgroundGeometry){
 
-            if(geometry.CLASS_NAME == "OpenLayers.Feature.Geometry.Point"){
-                this.backgroundElement = geometry;
-            } else {
-                for(var i = 0; i < geometry.path.length-1; i++ ){
-                    
-                    var point1 = geometry.path[i];
-                    var point2 = geometry.path[i + 1];
-                    
-                    var segment = new OpenLayers.Feature.Geometry.LineSegment(point1, point2);
-                    segment.style = {
-                        fillColor: "red",
-                        fillOpacity: 0.2,
-                        strokeColor: "yellow",
-                        strokeWidth: 0.5,
-                        strokeUnit: "%",
-                        strokeOpacity: 1
-                    },
-                    this.layer.renderer.drawLineString(LineSegment, "tmpLineSegment");
-                    
-                    var m1 = (point2.y - point1.y) / (point2.x - point1.x);
-                    var p1 = point1.y - m1 * point1.x;
-
-                    var m2 = - m1;
-                    var p2 = tmpPoint.y - m2 * tmpPoint.x;
-
-                    var x = (p2 - p1) / (2 * m1);
-                    var y = (m1 * x + p1);
-
-                    var point = new OpenLayers.Feature.Geometry.Point(x, y);
-                    
-                }
-            }           
-           
-        //calculate controlled point
-        }else if(this.controllingMode && this.path.length > 0){
-            
-            var lastPoint = this.path.last();
-            
-            var width = tmpPoint.x-lastPoint.x;
-            var height = tmpPoint.y-lastPoint.y;
-            var hyp = Math.sqrt(Math.pow(width, 2) + Math.pow(height, 2));
-            var alpha = Math.acos(width/(hyp)) * 180.0/Math.PI;
-
-            var step = 22.5;
-
-            for(var degree = 0; degree <= 180; degree += step ){
-                if((alpha > (degree-step/2)) && (alpha < (degree+step/2))){
-                    var y = (height<0)?-Math.sin(degree/180*Math.PI)*hyp+lastPoint.y:Math.sin(degree/180*Math.PI)*hyp+lastPoint.y;
-                    var x = Math.cos(degree/180*Math.PI)*hyp+lastPoint.x;
-                    var point = OpenLayers.Feature.Geometry.Point(x, y);
-                }
-            }
-        //calculate normal point
-        }else{
-            var point = new OpenLayers.Feature.Geometry.Point(lonlat.lon, lonlat.lat);
-        }
-        return point;
-    },
-
     finalizeGeometry: function(){
-        if(this.path.first() == this.path.last()){
-            var geometry = new OpenLayers.Feature.Geometry.LinearRing(this.path);
-        }else{
-            var geometry = new OpenLayers.Feature.Geometry.LineString(this.path);
-        }
-        this.layer.addFeatures(geometry);
+        this.layer.addFeatures(this.geometry);
+        this.geometry = new OpenLayers.Feature.Geometry.LineString();
     },
 
     eraseTmpElements: function(){
-        for(var i = 0; i < this.path.length; i++) {
-            this.layer.renderer.eraseElement(this.path[i].id);
+        for(var i = 0; i < this.geometry.path.length; i++) {
+            this.layer.renderer.eraseElement(this.geometry.path[i].id);
         }
-        this.layer.renderer.eraseElement("tmpLine");
+        this.layer.renderer.eraseElement("tmpSegment");
         this.layer.renderer.eraseElement("tmpPath");
         this.layer.renderer.eraseElement("tmpPoint");
     },
 
-    defaultEdition: function (evt) {
-        switch (evt.type){
-            case "mouseout":
-            this.snappingGeometry = null;
-            break;
-            default:
-            if(evt.geometry && evt.geometry != this.snappingGeometry){
-            this.snappingGeometry = evt.geometry;
-            }
-            break;
-        }
-    },
-
     defaultDblClick: function (evt) {
         this.defaultMouseDown(evt);
         this.eraseTmpElements();
-        if(this.path.length > 1){
+        if(this.geometry.path.length > 1){
             this.finalizeGeometry();
         }
         
-        this.path.clear();
+        this.geometry.path.clear();
     },
 
     defaultMouseDown: function (evt) {
+        
         // Copyright Fred
         if (this.lastDown &&
             this.lastDown.x  == evt.xy.x && this.lastDown.y == evt.xy.y) {
             return;
         }
-
-        this.mouseDown = true;
         this.lastDown = evt.xy;
-
-        var point = this.calculatePoint(evt.xy);
-
-    this.path.push(point);
-        this.layer.renderer.drawControlPoint(point, point.id);
-        this.layer.renderer.drawLineString(this.path, "tmpPath");
+        this.mouseDown = true;
+        
+        this.geometry.path.push(evt.point);
+        this.layer.renderer.drawGeometry(evt.point);
+        this.layer.renderer.drawGeometry(this.geometry, "tmpPath");
     },
 
     defaultMouseMove: function (evt) {
-        var point = this.calculatePoint(evt.xy);
+        var point = evt.point;
 
         if(this.mouseDown){
             this.defaultMouseDown(evt);
         }else{
-            if(this.path.length > 0){
-                this.layer.renderer.drawControlPoint(point, "tmpPoint");
-                this.layer.renderer.drawLineString([this.path.last(), point], "tmpLine");
+            if(this.geometry.path.length > 0){
+                this.layer.renderer.drawGeometry(point, "tmpPoint");
+                var tmpSegment = new OpenLayers.Feature.Geometry.LineSegment(this.geometry.path.last(), point);
+                this.layer.renderer.drawGeometry(tmpSegment, "tmpSegment");
             }
         }
     },
@@ -176,16 +97,16 @@
         switch (evt.keyCode){
             case OpenLayers.Event.KEY_RETURN:
                 this.eraseTmpElements();
-                if(this.path.length > 1){
+                if(this.geometry.path.length > 1){
                     this.finalizeGeometry();
                 }           
-                this.path.clear();
+                this.geometry.path.clear();
                 break;
             case OpenLayers.Event.KEY_BACKSPACE:
             case OpenLayers.Event.KEY_DELETE:
             case OpenLayers.Event.KEY_ESC:
                 this.eraseTmpElements();
-                this.path.clear();
+                this.geometry.path.clear();
                 OpenLayers.Event.stop(evt);
                 break;
         }

Modified: sandbox/bertil/lib/OpenLayers/Control/Edition/Selection.js
===================================================================
--- sandbox/bertil/lib/OpenLayers/Control/Edition/Selection.js	2006-11-06 21:13:47 UTC (rev 1765)
+++ sandbox/bertil/lib/OpenLayers/Control/Edition/Selection.js	2006-11-07 14:57:43 UTC (rev 1766)
@@ -9,46 +9,44 @@
 
     controlPoints: [],
 
-    selection: [],
-
     initialize: function() {
-        OpenLayers.Control.Edition.prototype.initialize.apply(this, arguments);
-        
+        OpenLayers.Control.Edition.prototype.initialize.apply(this, arguments);        
     },
 
     turnOff: function(){
         OpenLayers.Control.Edition.prototype.turnOff.apply(this, arguments);
         this.eraseTmpElements();
         this.controlPoints = [];
-        this.selection = [];
     },
     
     drawTmpElements: function(){
-        for(var iSelection = 0; iSelection < this.selection.length; iSelection++) {
-            if (this.selection[iSelection].path){
-                for(var iPath = 0; iPath < this.selection[iSelection].path.length; iPath++) {
-                    var point = this.selection[iSelection].path[iPath];
-                    this.layer.renderer.drawControlPoint(point, point.id);
+        for(var iSelection = 0; iSelection < this.layer.selection.length; iSelection++) {
+            if (this.layer.selection[iSelection].path){
+                for(var iPath = 0; iPath < this.layer.selection[iSelection].path.length; iPath++) {
+                    var point = this.layer.selection[iSelection].path[iPath];
+                    point.isControlPoint = true;
+                    this.layer.renderer.drawGeometry(point);
                 }
             }
         }
     },
 
     eraseTmpElements: function(){
-        if(this.selection.length > 0){
-            for(var iSelection = 0; iSelection < this.selection.length; iSelection++) {
-                for(var iPath = 0; iPath < this.selection[iSelection].path.length; iPath++) {
-                   this.layer.renderer.eraseElement(this.selection[iSelection].path[iPath].id);
+        if(this.layer.selection.length > 0){
+            for(var iSelection = 0; iSelection < this.layer.selection.length; iSelection++) {
+                if(this.layer.selection[iSelection].path){
+                    for(var iPath = 0; iPath < this.layer.selection[iSelection].path.length; iPath++) {
+                       this.layer.renderer.eraseElement(this.layer.selection[iSelection].path[iPath].id);
+                    }
                 }
             }
         }
     },
 
     editionMouseDown: function(evt) {
-    
+        
         if (evt.geometry && evt.geometry.isControlPoint){
-    
-            if (this.shiftDown){
+            if (this.shiftDown) {
                 if (this.controlPoints.indexOf(evt.geometry) < 0){
                     this.controlPoints.push(evt.geometry);
                 } else {
@@ -59,51 +57,63 @@
             }
     
         } else if (evt.geometry){
-    
             this.eraseTmpElements();
             if (this.shiftDown){
-                if (this.selection.indexOf(evt.geometry) < 0){
-                    this.selection.push(evt.geometry);
+                if (this.layer.selection.indexOf(evt.geometry) < 0){
+                    this.layer.selection.push(evt.geometry);
                 } else {
-                    this.selection = this.selection.without(evt.geometry);
+                    this.layer.selection = this.layer.selection.without(evt.geometry);
                 }
             } else {
-                this.selection = [evt.geometry];
+                this.layer.selection = [evt.geometry];
             }
             this.drawTmpElements();
             this.controlPoints = [];
-            for(var iSelection = 0; iSelection < this.selection.length; iSelection++) {
-                if(this.selection.CLASS_NAME == "OpenLayers.Feature.Geometry.Point"){
-                    this.controlPoints = this.controlPoints.push(this.selection[iSelection]);
+            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]);
                 } else {
-                    this.controlPoints = this.controlPoints.concat(this.selection[iSelection].path);
+                    this.controlPoints = this.controlPoints.concat(this.layer.selection[iSelection].path);
                 }
             }
     
         } else {
             if (!this.shiftDown){
                 this.eraseTmpElements();
-                this.selection = [];
+                this.layer.selection = [];
                 this.controlPoints = [];
             }
         }
+        
+        console.log(this.controlPoints);
+        
+        this.lastTranslationPoint = evt.point;
     },
 
     editionMouseMove: function (evt) {
         if (this.mouseDown){
-                this.selectionChange = true;
-                var lonlat = this.map.getLonLatFromLayerPx(evt.xy);
-                this.controlPoints[0].setX(lonlat.lon);
-                this.controlPoints[0].setY(lonlat.lat);
-                this.layer.renderer.drawControlPoint(this.controlPoints[0], this.controlPoints[0].id);
-                this.layer.renderer.drawGeometry(this.selection[0], "tmpGeometry");
+            this.selectionChange = true;
+            
+            var xTranslation = evt.point.x - this.lastTranslationPoint.x;
+            var yTranslation = evt.point.y - this.lastTranslationPoint.y;
+            
+            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]);
+            }
+            
+            if(this.layer.selection.length == 1)
+                this.layer.renderer.drawGeometry(this.layer.selection[0], "tmpGeometry");
         }
     },
 
     editionMouseUp: function (evt) {
         if (this.selectionChange){
-        this.layer.renderer.eraseElement("tmpGeometry");
-        this.layer.updateFeatures(this.selection);
+            this.layer.renderer.eraseElement("tmpGeometry");
+            this.layer.updateFeatures(this.layer.selection);
         }
     },
 
@@ -115,7 +125,7 @@
         case OpenLayers.Event.KEY_DELETE:
             this.eraseTmpElements();
             this.layer.removeFeatures(this.selection);
-            this.selection.clear();
+            this.layer.selection.clear();
             OpenLayers.Event.stop(evt);
             break;
         }

Modified: sandbox/bertil/lib/OpenLayers/Control/Edition.js
===================================================================
--- sandbox/bertil/lib/OpenLayers/Control/Edition.js	2006-11-06 21:13:47 UTC (rev 1765)
+++ sandbox/bertil/lib/OpenLayers/Control/Edition.js	2006-11-07 14:57:43 UTC (rev 1766)
@@ -99,47 +99,62 @@
      * @param {Event} evt
      */
     defaultEdition: function (evt) {
-        this.snappingMode = true;   
+        //this.snappingMode = true;   
         
         var lonlat = this.map.getLonLatFromLayerPx(evt.xy);
         var tmpPoint = new OpenLayers.Feature.Geometry.Point(lonlat.lon, lonlat.lat);
-        
         //calculate snapping point        
-        if(this.snappingMode && evt.geometry){
-            if (evt.geometry.isSnappingElement) {
-                    
-                    var m1 = evt.geometry.m;
-                    var p1 = evt.geometry.p;
-                    
-                    var m2 = - m1;
-                    var p2 = tmpPoint.y - m2 * tmpPoint.x;
-
-                    var x = (p2 - p1) / (2 * m1);
-                    var y = (m1 * x + p1);
+        if (this.snappingMode) {
+            
+            if (evt.geometry && evt.geometry.isSnappingElement) {
+                // return calculated point
                 
+            } else if (evt.geometry) {
+                // draw snapping element and return calculated point
+                var snappingElement = evt.geometry;
+                
+                if (snappingElement.CLASS_NAME != "OpenLayers.Feature.Geometry.Point") {
+                    for(var i = 0; i < snappingElement.path.length - 1; i++ ){
+                        
+                        var segPoint1 = snappingElement.path[i];
+                        var segPoint2 = snappingElement.path[i + 1];
+                        
+                        var segPixel1 = this.layer.map.getPixelFromLonLat(segPoint1);
+                        var segPixel2 = this.layer.map.getPixelFromLonLat(segPoint2);
+                        
+                        if (evt.xy.x - segPixel1.x < 5 && evt.xy.y - segPixel1.y < 5) {
+                            snappingElement = segPoint1;
+                        } else if (evt.xy.x - segPixel2.x < 5 && evt.xy.y - segPixel2.y < 5) {
+                            snappingElement = segPoint2;
+                        } else {
+                            var m1 = (segPoint2.y - segPoint1.y) / (segPoint2.x - segPoint1.x);
+                            var p1 = segPoint1.y - m1 * segPoint1.x;
+            
+                            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);
+                            
+                            var tmpDelta = Math.sqrt(Math.pow((segPoint3.x - tmpPoint.x), 2) + Math.pow((segPoint3.y - tmpPoint.y), 2));
+                            
+                            if((tmpDelta < delta || !delta) && Math.min(segPoint1.x, segPoint2.x) < segPoint3.x && segPoint3.x < Math.max(segPoint1.x, segPoint2.x)){
+                                var delta = tmpDelta;
+                                snappingElement = new OpenLayers.Feature.Geometry.LineSegment(segPoint1, segPoint2);
+                            }
+                        }           
+                    }
+                }
+                
+                snappingElement.isSnappingElement = true;
+                snappingElement.style = {fillColor: "yellow", fillOpacity: 0.2, strokeColor: "blue", strokeWidth: 5, strokeUnit: "%", strokeOpacity: 0.5}
+                this.layer.renderer.drawGeometry(snappingElement, "tmpSnappingElement");
             } else {
-                for (var i = 0; i < evt.geometry.path.length - 1; i++) {
-                    var segPoint1 = evt.geometry.path[i];
-                    var segPoint2 = evt.geometry.path[i + 1];
-                                   
-                    var m1 = (segPoint2.y - segPoint1.y) / (segPoint2.x - segPoint1.x);
-                    var p1 = segPoint1.y - m1 * segPoint1.x;
-    
-                    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);
-                    
-                    var segment = new OpenLayers.Feature.Geometry.LineSegment(segPoint1, segPoint2);
-                    segment.m = m1;
-                    segment.p = p1;
-                    
-                }
+                // return mouse point
+                this.layer.renderer.eraseElement("tmpSnappingElement");
             }
-  
         //calculate controlled point
         } else if (this.controllingMode && this.path.length > 0) {
             
@@ -157,12 +172,12 @@
                 if((alpha > (degree-step/2)) && (alpha < (degree+step/2))){
                     var y = (height<0)?-Math.sin(degree/180*Math.PI)*hyp+lastPoint.y:Math.sin(degree/180*Math.PI)*hyp+lastPoint.y;
                     var x = Math.cos(degree/180*Math.PI)*hyp+lastPoint.x;
-                    var point = OpenLayers.Feature.Geometry.Point(x, y);
+                    evt.point = OpenLayers.Feature.Geometry.Point(x, y);
                 }
             }
         //calculate normal point
         }else{
-            var point = new OpenLayers.Feature.Geometry.Point(lonlat.lon, lonlat.lat);
+            evt.point = new OpenLayers.Feature.Geometry.Point(lonlat.lon, lonlat.lat);
         }
         
         switch (evt.type){

Modified: sandbox/bertil/lib/OpenLayers/Control/EditionToolbar.js
===================================================================
--- sandbox/bertil/lib/OpenLayers/Control/EditionToolbar.js	2006-11-06 21:13:47 UTC (rev 1765)
+++ sandbox/bertil/lib/OpenLayers/Control/EditionToolbar.js	2006-11-07 14:57:43 UTC (rev 1766)
@@ -48,7 +48,6 @@
         
         for(var i = 0; i < this.tools.length; i++) {
     	   this.tools[i].map = this.map;
-    	   console.log(this.tools[i]);
         }
    
         OpenLayers.Control.prototype.draw.apply(this);

Modified: sandbox/bertil/lib/OpenLayers/Control/snapping.backup
===================================================================
--- sandbox/bertil/lib/OpenLayers/Control/snapping.backup	2006-11-06 21:13:47 UTC (rev 1765)
+++ sandbox/bertil/lib/OpenLayers/Control/snapping.backup	2006-11-07 14:57:43 UTC (rev 1766)
@@ -1,58 +1,41 @@
         //calculate snapping point        
         if(this.snappingMode){
-            // draw snapping element
-            if (evt.geometry){
-                var snappingElement = null;
+            if (evt.geometry && evt.geometry.isSnappingElement) {                    
+                var m1 = evt.geometry.m;
+                var p1 = evt.geometry.p;
                 
-                for(var i = 0; i < evt.geometry.path.length - 1; i++ ){
-                    var tmpSegPoint1 = evt.geometry.path[i];
-                    var tmpSegPoint2 = evt.geometry.path[i + 1];
+                var m2 = - m1;
+                var p2 = tmpPoint.y - m2 * tmpPoint.x;
+
+                var x = (p2 - p1) / (2 * m1);
+                var y = (m1 * x + p1);
+                            
+            } else if (evt.geometry){
+                for (var i = 0; i < evt.geometry.path.length - 1; i++) {
+                    var segPoint1 = evt.geometry.path[i];
+                    var segPoint2 = evt.geometry.path[i + 1];
+                                   
+                    var m1 = (segPoint2.y - segPoint1.y) / (segPoint2.x - segPoint1.x);
+                    var p1 = segPoint1.y - m1 * segPoint1.x;
+
+                    var segment = new OpenLayers.Feature.Geometry.LineSegment(segPoint1, segPoint2);
+                    segment.m = m1;
+                    segment.p = p1;
                     
-                    var tmpSegPixel1 = this.layer.map.getPixelFromLonLat(tmpSegPoint1);
-                    var tmpSegPixel2 = this.layer.map.getPixelFromLonLat(tmpSegPoint2);
                     
-                    if (evt.xy.x - tmpSegPixel1.x < 5 && evt.xy.y - tmpSegPixel1.y < 5) {
-                        snappingElement = tmpSegPoint1;
-                    } else if (evt.xy.x - tmpSegPixel2.x < 5 && evt.xy.y - tmpSegPixel2.y < 5) {
-                        snappingElement = tmpSegPoint2;
-                    } else {
-                        var tmpM1 = (tmpSegPoint2.y - tmpSegPoint1.y) / (tmpSegPoint2.x - tmpSegPoint1.x);
-                        var tmpP1 = tmpSegPoint1.y - tmpM1 * tmpSegPoint1.x;
-        
-                        var tmpM2 = - tmpM1;
-                        var tmpP2 = tmpPoint.y - tmpM2 * tmpPoint.x;
-        
-                        var x = (tmpP2 - tmpP1) / (2 * tmpM1);
-                        var y = (tmpM1 * x + tmpP1);
-                        
-                        var tmpSegPoint3 = new OpenLayers.Feature.Geometry.Point(x, y);
-                        
-                        var tmpDelta = Math.sqrt(Math.pow((tmpSegPoint3.x - tmpPoint.x), 2) + Math.pow((tmpSegPoint3.y - tmpPoint.y), 2));
-                        
-                        var distTmpSegPoint1TmpSegPoint3 = Math.sqrt(Math.pow((tmpSegPoint1.x - tmpSegPoint3.x), 2) + Math.pow((tmpSegPoint1.y - tmpSegPoint3.y), 2));
-                        var distTmpSegPoint1TmpSegPoint2 = Math.sqrt(Math.pow((tmpSegPoint1.x - tmpSegPoint2.x), 2) + Math.pow((tmpSegPoint1.y - tmpSegPoint2.y), 2));
-                        
-                        //console.log(i + " : " +distTmpSegPoint1TmpSegPoint3 + " - " + distTmpSegPoint1TmpSegPoint2);
-                        //console.log(distTmpSegPoint1TmpSegPoint3 < distTmpSegPoint1TmpSegPoint2)
-                        
-                        if((tmpDelta < delta || !delta) && (distTmpSegPoint1TmpSegPoint3 < distTmpSegPoint1TmpSegPoint2)){
-                            var delta = tmpDelta;
-                            snappingElement = new OpenLayers.Feature.Geometry.LineSegment(tmpSegPoint1, tmpSegPoint2);
-                        }
-                    }                         
+                    var this.layer.renderer.drawPoint()
+                    var this.layer.renderer.drawLineString()
+                    
+                    /*
+                    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);
+                    */
                 }
-                
-                snappingElement.isSnappingElement = true;
-                snappingElement.style = {
-                    fillColor: "green",
-                    fillOpacity: 1,
-                    strokeColor: "yellow",
-                    strokeWidth: 3,
-                    strokeUnit: "%",
-                    strokeOpacity:1
-                }
-                this.layer.renderer.drawGeometry(snappingElement, "tmpSnappingElement"); 
             } else {
-                this.snappingElement = null;
-                this.layer.renderer.eraseElement("tmpSnappingElement");
+                
             }
\ No newline at end of file

Modified: sandbox/bertil/lib/OpenLayers/Feature/Geometry/CubicBezierCurve.js
===================================================================
--- sandbox/bertil/lib/OpenLayers/Feature/Geometry/CubicBezierCurve.js	2006-11-06 21:13:47 UTC (rev 1765)
+++ sandbox/bertil/lib/OpenLayers/Feature/Geometry/CubicBezierCurve.js	2006-11-07 14:57:43 UTC (rev 1766)
@@ -5,6 +5,7 @@
 OpenLayers.Feature.Geometry.CubicBezierCurve.prototype = OpenLayers.Util.extend(OpenLayers.Feature.Geometry.CubicBezierCurve.prototype, {
 
     initialize: function(points) {
+        OpenLayers.Feature.Geometry.prototype.initialize.apply(this, arguments);
         if (!(points instanceof Array))
            points = [points];
            

Modified: sandbox/bertil/lib/OpenLayers/Feature/Geometry/CubicBezierSurface.js
===================================================================
--- sandbox/bertil/lib/OpenLayers/Feature/Geometry/CubicBezierSurface.js	2006-11-06 21:13:47 UTC (rev 1765)
+++ sandbox/bertil/lib/OpenLayers/Feature/Geometry/CubicBezierSurface.js	2006-11-07 14:57:43 UTC (rev 1766)
@@ -6,12 +6,12 @@
 OpenLayers.Feature.Geometry.CubicBezierSurface.prototype = OpenLayers.Util.extend(OpenLayers.Feature.Geometry.CubicBezierSurface.prototype, {
 
     initialize: function(points) {
-    if (!(points instanceof Array)) {
-        points = [points];
-    }
-
-    this.path = [].concat(points);
-    this.id = OpenLayers.Util.createUniqueID(this.CLASS_NAME+ "_");
+        OpenLayers.Feature.Geometry.prototype.initialize.apply(this, arguments);
+        if (!(points instanceof Array)) {
+            points = [points];
+        }
+    
+        this.path = [].concat(points);
     },
 
     CLASS_NAME: "OpenLayers.Feature.Geometry.CubicBezierSurface"

Modified: sandbox/bertil/lib/OpenLayers/Feature/Geometry/LineSegment.js
===================================================================
--- sandbox/bertil/lib/OpenLayers/Feature/Geometry/LineSegment.js	2006-11-06 21:13:47 UTC (rev 1765)
+++ sandbox/bertil/lib/OpenLayers/Feature/Geometry/LineSegment.js	2006-11-07 14:57:43 UTC (rev 1766)
@@ -5,9 +5,9 @@
 OpenLayers.Feature.Geometry.LineSegment.prototype = OpenLayers.Util.extend(OpenLayers.Feature.Geometry.LineSegment.prototype, {
 
     initialize: function(point1, point2) {
+        OpenLayers.Feature.Geometry.prototype.initialize.apply(this, arguments);
         if (point1 && point2) {
-            this.path = new Array(point1, point2);       
-            this.id = OpenLayers.Util.createUniqueID(this.CLASS_NAME+ "_");
+            this.path = new Array(point1, point2);
         }
     },
 

Modified: sandbox/bertil/lib/OpenLayers/Feature/Geometry/LineString.js
===================================================================
--- sandbox/bertil/lib/OpenLayers/Feature/Geometry/LineString.js	2006-11-06 21:13:47 UTC (rev 1765)
+++ sandbox/bertil/lib/OpenLayers/Feature/Geometry/LineString.js	2006-11-07 14:57:43 UTC (rev 1766)
@@ -6,9 +6,11 @@
 OpenLayers.Feature.Geometry.LineString.prototype = OpenLayers.Util.extend(OpenLayers.Feature.Geometry.LineString.prototype, {
 
     initialize: function(points) {
-        if (points instanceof Array) {
-            this.path = points;         
-            this.id = OpenLayers.Util.createUniqueID(this.CLASS_NAME+ "_");
+        OpenLayers.Feature.Geometry.prototype.initialize.apply(this, arguments);
+        if (points && points instanceof Array) {
+            this.path = points;
+        } else {
+            this.path = [];
         }
     },
 

Modified: sandbox/bertil/lib/OpenLayers/Feature/Geometry/LinearRing.js
===================================================================
--- sandbox/bertil/lib/OpenLayers/Feature/Geometry/LinearRing.js	2006-11-06 21:13:47 UTC (rev 1765)
+++ sandbox/bertil/lib/OpenLayers/Feature/Geometry/LinearRing.js	2006-11-07 14:57:43 UTC (rev 1766)
@@ -1,21 +1,21 @@
 /* Copyright (c) 2006 CampToCamp SA, Bertil Chapuis, published under the BSD license. */
 
 OpenLayers.Feature.Geometry.LinearRing = OpenLayers.Class.create();
-OpenLayers.Feature.Geometry.LinearRing.prototype = OpenLayers.Util.extend(OpenLayers.Feature.Geometry.LinearRing.prototype, 
-                                  OpenLayers.Feature.Geometry.prototype);
+OpenLayers.Feature.Geometry.LinearRing.prototype = OpenLayers.Util.extend(OpenLayers.Feature.Geometry.LinearRing.prototype, OpenLayers.Feature.Geometry.prototype);
 OpenLayers.Feature.Geometry.LinearRing.prototype = OpenLayers.Util.extend(OpenLayers.Feature.Geometry.LinearRing.prototype, {
 
     initialize: function(points) {
-    if (!(points instanceof Array)) {
-        points = [points];
-    }
-
-    this.path = [].concat(points);
-    this.id = OpenLayers.Util.createUniqueID(this.CLASS_NAME+ "_");
+        OpenLayers.Feature.Geometry.prototype.initialize.apply(this, arguments);
+        if (!(points instanceof Array)) {
+            points = [points];
+        }
+    
+        this.path = [].concat(points);
+        this.id = OpenLayers.Util.createUniqueID(this.CLASS_NAME+ "_");
     },
 
     toString: function() {
-    return this.path.toString();
+        return this.path.toString();
     },
 
     CLASS_NAME: "OpenLayers.Feature.Geometry.LinearRing"

Modified: sandbox/bertil/lib/OpenLayers/Feature/Geometry/Point.js
===================================================================
--- sandbox/bertil/lib/OpenLayers/Feature/Geometry/Point.js	2006-11-06 21:13:47 UTC (rev 1765)
+++ sandbox/bertil/lib/OpenLayers/Feature/Geometry/Point.js	2006-11-07 14:57:43 UTC (rev 1766)
@@ -6,32 +6,33 @@
 OpenLayers.Feature.Geometry.Point.prototype = OpenLayers.Util.extend(OpenLayers.Feature.Geometry.Point.prototype, {
 
     initialize: function(x, y){
-	OpenLayers.LonLat.prototype.initialize.apply(this, arguments);
-	this.id = OpenLayers.Util.createUniqueID(this.CLASS_NAME+"_");
-	this.x = this.lon;
-	this.y = this.lat;
+    	OpenLayers.LonLat.prototype.initialize.apply(this, arguments);
+    	OpenLayers.Feature.Geometry.prototype.initialize.apply(this, arguments);
+    	this.id = OpenLayers.Util.createUniqueID(this.CLASS_NAME+"_");
+    	this.x = this.lon;
+    	this.y = this.lat;
     },
 
     setX: function(x){
-	this.lon = x;
-	this.x = x;
+    	this.lon = x;
+    	this.x = x;
     },
 
     setY: function(y){
-	this.lat = y;
-	this.y = y;
+    	this.lat = y;
+    	this.y = y;
     },
 
     getX: function(){
-	return this.lon;
+	   return this.lon;
     },
 
     getY: function(){
-	return this.lat;
+	   return this.lat;
     },
 
     toString: function(){
-	return this.lon+","+this.lat;
+	   return this.lon+","+this.lat;
     },
 
     CLASS_NAME: "OpenLayers.Feature.Geometry.Point"

Modified: sandbox/bertil/lib/OpenLayers/Feature/Geometry/Polygon.js
===================================================================
--- sandbox/bertil/lib/OpenLayers/Feature/Geometry/Polygon.js	2006-11-06 21:13:47 UTC (rev 1765)
+++ sandbox/bertil/lib/OpenLayers/Feature/Geometry/Polygon.js	2006-11-07 14:57:43 UTC (rev 1766)
@@ -6,16 +6,17 @@
 OpenLayers.Feature.Geometry.Polygon.prototype = OpenLayers.Util.extend(OpenLayers.Feature.Geometry.Polygon.prototype, {
 
     initialize: function(points) {
-    if (!(points instanceof Array)) {
-        points = [points];
-    }
+        OpenLayers.Feature.Geometry.prototype.initialize.apply(this, arguments);
+        if (!(points instanceof Array)) {
+            points = [points];
+        }
+    
+        this.path = [].concat(points);
 
-    this.path = [].concat(points);
-    this.id = OpenLayers.Util.createUniqueID(this.CLASS_NAME+ "_");
     },
 
     toString: function() {
-    return this.path.toString();
+        return this.path.toString();
     },
 
     CLASS_NAME: "OpenLayers.Feature.Geometry.Polygon"

Modified: sandbox/bertil/lib/OpenLayers/Feature/Geometry.js
===================================================================
--- sandbox/bertil/lib/OpenLayers/Feature/Geometry.js	2006-11-06 21:13:47 UTC (rev 1765)
+++ sandbox/bertil/lib/OpenLayers/Feature/Geometry.js	2006-11-07 14:57:43 UTC (rev 1766)
@@ -5,9 +5,8 @@
 
     attributes: [],
     
-    geometry: null,
-    
     initialize: function() {
+        this.id = OpenLayers.Util.createUniqueID(this.CLASS_NAME+ "_");
     },
     
     addAttributes: function(attributes) {
@@ -26,17 +25,8 @@
         if (!(attributes instanceof Array)) {
             attributes = [attributes];
         }
-
-        for (var i = 0; i < attributes.length; i++) {
-            this.attributes = this.attributes.without(attributes[i]);
-            this.renderer.eraseElement(attributes[i].id);
-        }
     },
     
-    setGeometry: function(geometry) {
-        this.geometry = geometry;
-    },
-    
     CLASS_NAME: "OpenLayers.Feature.Geometry"
     
 });
\ No newline at end of file

Modified: sandbox/bertil/lib/OpenLayers/Layer/Vector.js
===================================================================
--- sandbox/bertil/lib/OpenLayers/Layer/Vector.js	2006-11-06 21:13:47 UTC (rev 1765)
+++ sandbox/bertil/lib/OpenLayers/Layer/Vector.js	2006-11-07 14:57:43 UTC (rev 1766)
@@ -18,6 +18,8 @@
     actions: null,
 
     features: [],
+    
+    selection: [],
 
     map: null,
 
@@ -30,25 +32,46 @@
             this.renderer = document.implementation.hasFeature("http://www.w3.org/TR/SVG11/feature#SVG", "1.1")?new OpenLayers.Renderer.Svg(this): new OpenLayers.Renderer.Vml(this);
         }
     },
+   
+    selectFeatures: function(features) {
+        /*
+        if (!(features instanceof Array)){
+           features = [features];
+        }
+        
+        if (this.selection) {
+            this.selection = this.selection.concat(features);
+        } else {
+            this.selection = features;
+        }
+        */
+    },
+    
+    unselectFeatures: function(features) {
+        
+    },
 
     addFeatures: function(features) {
-        if (!(features instanceof Array))
-        features = [features];
+        if (!(features instanceof Array)) {
+           features = [features];
+        }
 
         if (this.features) {
             this.features = this.features.concat(features);
         } else {
             this.features = [].concat(features);
         }
+        
         for (var i = 0; i < features.length; i++) {
             this.renderer.drawGeometry(features[i]);
         }
     },
 
     removeFeatures: function(features) {
-        if (!(features instanceof Array))
+        if (!(features instanceof Array)){
             features = [features];
-
+        }
+        
         for (var i = 0; i < features.length; i++) {
             this.features = this.features.without(features[i]);
             this.renderer.eraseElement(features[i].id);

Modified: sandbox/bertil/lib/OpenLayers/Renderer/Svg.js
===================================================================
--- sandbox/bertil/lib/OpenLayers/Renderer/Svg.js	2006-11-06 21:13:47 UTC (rev 1765)
+++ sandbox/bertil/lib/OpenLayers/Renderer/Svg.js	2006-11-07 14:57:43 UTC (rev 1766)
@@ -10,19 +10,36 @@
     eventmanager: null,
 
     style: {
-        fillColor: "red",
-        fillOpacity: 0.2,
-        strokeColor: "blue",
-        strokeWidth: 0.1,
-        strokeUnit: "%",
-        strokeOpacity: 1
+        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: "%",               
     },
 
     initialize: function() {},
 
     setStyle: function(style) {
-        this.style = style;
+        this.style = OpenLayers.Util.extend(this.style, style);
+        return this.style;
     },
+    
+    getStyle: function(){
+        return this.style;
+    },
 
     observe: function() {
         this.triggEditionEvent = this.triggEditionEvent.bindAsEventListener(this);
@@ -72,33 +89,7 @@
         }
         return this.root;
     },
-
-    setMarker:function() {
-        var def = this._nodeFactory("def");
     
-        var marker = this._nodeFactory("marker", "vertex");
-        marker.setAttributeNS(null, "viewBox", "0 0 10 10");
-        marker.setAttributeNS(null, "refX", "5");
-        marker.setAttributeNS(null, "refY", "5");
-        marker.setAttributeNS(null, "markerUnits", "strokeWidth");
-        marker.setAttributeNS(null, "markerWidth", "5");
-        marker.setAttributeNS(null, "markerHeight", "5");
-    
-        var markerShape = this._nodeFactory("ellipse");
-        markerShape.setAttributeNS(null, "cx", 5);
-        markerShape.setAttributeNS(null, "cy", 5);
-        markerShape.setAttributeNS(null, "rx", 5);
-        markerShape.setAttributeNS(null, "ry", 5);
-        markerShape.setAttributeNS(null, "fill", "blue");
-        markerShape.setAttributeNS(null, "fill-opacity", "0.4");
-    
-        markerShape.setAttributeNS(null, "style", ":hover{color: red;}")
-    
-        marker.appendChild(markerShape);
-        def.appendChild(marker);
-        this.svgRoot.appendChild(def);
-    },
-    
     clearRoot: function() {
         if (this.root != null) {
 
@@ -114,88 +105,54 @@
         this.svgRoot.setAttributeNS(null, "height", height);
     },
 
-    highlightGeometry: function(geometry, parent, predecessor) {
-        var node = this._nodeFactory("g", geometry.id);
+    drawGeometry: function(geometry, id, style, parent) {
 
-        var id = geometry.id;
-        geometry.id = null;
-
-        for (var i = 0; i < node.childNodes.length; i++) {
-            node.removeChild(node.childNodes[i]);
-        }
-
-
-        if (geometry.path) {
-            for (var i = 0; i < geometry.path.length; i++) {
-                var point = this.drawGeometry(geometry.path[i], true);
-                point.geometry.isControlPoint = true;
-                node.appendChild(point);
-            }
-        }
-
-        var geometryNode = this.drawGeometry(geometry);
-        node.appendChild(geometryNode);
-
-        geometry.id = id;
-
-        if (!parent){
-            this.root.appendChild(node);
-        }
-
-        return node;
-    },
-
-    drawGeometry: function(geometry, id, parent, predecessor) {
-
         var tmpId = geometry.id;
-
         if (id){
             geometry.id = id;
         }
-
-        if (geometry.style){
-            var tmpStyle = geometry.style;
-            this.style = geometry.style;
+        
+        if (geometry.style){            
+            var style = geometry.style;
+        } else {
+            var style = this.style;
         }
 
         switch (geometry.CLASS_NAME) {
             case "OpenLayers.Feature.Geometry.Point":
-                geometry.isControlPoint = false;
-                var node = this.drawPoint(geometry, geometry.id, true);
+                var node = this.drawPoint(geometry, geometry.id, style, true);
                 break;
             case "OpenLayers.Feature.Geometry.CubicBezierCurve":
-                var node = this.drawCubicBezierCurve(geometry.path, geometry.id, true);
+                var node = this.drawCubicBezierCurve(geometry.path, geometry.id, style, true);
                 break;
             case "OpenLayers.Feature.Geometry.LineSegment":
             case "OpenLayers.Feature.Geometry.LineString":
-                var node = this.drawLineString(geometry.path, geometry.id, true);
+                var node = this.drawLineString(geometry.path, geometry.id, style, true);
                 break;
             case "OpenLayers.Feature.Geometry.LinearRing":
-                var node = this.drawLinearRing(geometry.path, geometry.id, true);
+                var node = this.drawLinearRing(geometry.path, geometry.id, style, true);
                 break;
             case "OpenLayers.Feature.Geometry.Polygon":
-                var node = this.drawPolygon(geometry.path, geometry.id, true);
+                var node = this.drawPolygon(geometry.path, geometry.id, style, true);
                 break;
             case "OpenLayers.Feature.Geometry.CubicBezierSurface":
-                var node = this.drawCubicBezierSurface(geometry.path, geometry.id, true);
+                var node = this.drawCubicBezierSurface(geometry.path, geometry.id, style, true);
                 break;
             case "OpenLayers.Feature.Geometry.Rectangle":
-                var node = this.drawRectangle(geometry.x, geometry.y, geometry.width, geometry.height, geometry.id, true);
+                var node = this.drawRectangle(geometry.x, geometry.y, geometry.width, geometry.height, geometry.id, style, true);
                 break;
             default:
                 break;
         }
 
         geometry.id = tmpId;
-
+        
         node.geometry = geometry;
 
         if (!parent) {
             this.root.appendChild(node);
         }
          
-        this.style = tmpStyle;
-         
         return node;
     },
 
@@ -207,8 +164,11 @@
         return element;
     },
 
-    drawPoint: function(point, id, parent, predecessor) {
-        var node = this.drawCircle(point.x, point.y, (this.style.strokeWidth*3)+this.style.strokeUnit, id);
+    drawPoint: function(point, id, style, parent) {
+        if (!style) {
+            style = this.style;
+        }
+        var node = this.drawCircle(point.x, point.y, (style.pointRadius)+style.pointUnit, point.id, style, id);
 
         if (!parent) {
             this.root.appendChild(node);
@@ -217,19 +177,7 @@
         return node;
     },
 
-    drawControlPoint: function(point, id, parent, predecessor) {
-        var node = this.drawCircle(point.x, point.y, (this.style.strokeWidth*3)+this.style.strokeUnit, id, true);
-        node.geometry = point;
-        node.geometry.isControlPoint = true;
-        
-        if (!parent) {
-            this.root.appendChild(node);
-        }
-        
-        return node;
-    },
-
-    drawRectangle: function(x, y, width, height, id, parent, predecessor) {
+    drawRectangle: function(x, y, width, height, id, style, parent) {
         var node = this._nodeFactory("rect", id);
 
         node.setAttributeNS(null, "x", x);
@@ -237,7 +185,7 @@
         node.setAttributeNS(null, "width", width);
         node.setAttributeNS(null, "height", height);
 
-        this._setStyle(node, true, true);
+        this._setStyle(node, style, true, true);
 
         if (!parent) {
             this.root.appendChild(node);
@@ -246,14 +194,14 @@
         return node;
     },
 
-    drawCircle: function(cx, cy, r, id, parent, predecessor) {
+    drawCircle: function(cx, cy, r, id, style, parent) {
         var node = this._nodeFactory("circle", id);
 
         node.setAttributeNS(null, "cx", cx);
         node.setAttributeNS(null, "cy", cy);
         node.setAttributeNS(null, "r", r);
 
-        this._setStyle(node, true, true);
+        this._setStyle(node, style, true, true);
 
         if (!parent) {
             this.root.appendChild(node);
@@ -262,7 +210,7 @@
         return node;
     },
 
-    drawEllipse: function(cx, cy, rx, ry, id, parent, predecessor) {
+    drawEllipse: function(cx, cy, rx, ry, id, style, parent) {
         var node = this._nodeFactory("ellipse", id);
 
         node.setAttributeNS(null, "cx", cx);
@@ -270,7 +218,7 @@
         node.setAttributeNS(null, "rx", rx);
         node.setAttributeNS(null, "ry", ry);
 
-        this._setStyle(node, true, true);
+        this._setStyle(node, style, true, true);
 
         if (!parent) {
             this.root.appendChild(node);
@@ -279,11 +227,10 @@
         return node;
     },
 
-    drawLineString: function(points, id, parent, predecessor) {
-
+    drawLineString: function(points, id, style, parent) {
         var node = this._nodeFactory("polyline", id);    
         node.setAttributeNS(null, "points", points);  
-        this._setStyle(node, false, true);
+        this._setStyle(node, style, false, true);
 
         if (!parent) {
             this.root.appendChild(node);
@@ -292,28 +239,27 @@
         return node;
     },
 
-    drawLinearRing: function(points, id, parent, predecessor) {
-
+    drawLinearRing: function(points, id, style, parent) {
         var node = this._nodeFactory("polygon", id);    
         node.setAttributeNS(null, "points", points);  
-        this._setStyle(node, false, true);
+        this._setStyle(node, style, false, true);
         if (!parent) {
             this.root.appendChild(node);
         }
         return node;
     },
 
-    drawPolygon: function(points, id, parent, predecessor) {
+    drawPolygon: function(points, id, style, parent) {
         var node = this._nodeFactory("polygon", id);
         node.setAttributeNS(null, "points", points);   
-        this._setStyle(node, true, true);
+        this._setStyle(node, style, true, true);
         if (!parent) {
             this.root.appendChild(node);
         }
         return node;
     },
 
-    drawCubicBezierCurve: function(points, id, parent, predecessor) {
+    drawCubicBezierCurve: function(points, id, style, parent) {
         var node = this._nodeFactory("path", id);
     
         var d = null;
@@ -328,7 +274,7 @@
         }
         node.setAttributeNS(null, "d", d);
     
-        this._setStyle(node, false, true);
+        this._setStyle(node, style, false, true);
     
         if (!parent) {
             this.root.appendChild(node);
@@ -337,7 +283,7 @@
         return node;
     },
 
-    drawCubicBezierSurface: function(points, id, parent, predecessor) {
+    drawCubicBezierSurface: function(points, id, style, parent) {
         var node = this._nodeFactory("path", id);
     
         var d = null;
@@ -355,7 +301,7 @@
     
         node.setAttributeNS(null, "d", d);
     
-        this._setStyle(node, true, true);
+        this._setStyle(node, style, true, true);
 
         if (!parent) {
             this.root.appendChild(node);
@@ -364,18 +310,21 @@
         return node;
     },
 
-    _setStyle: function(node, isFilled, isStroked) {
+    _setStyle: function(node, style, isFilled, isStroked) {
+        if(!style)
+            style = this.style;
+        
         if (isFilled) {
-            node.setAttributeNS(null, "fill", this.style.fillColor);
-            node.setAttributeNS(null, "fill-opacity", this.style.fillOpacity);
+            node.setAttributeNS(null, "fill", style.fillColor);
+            node.setAttributeNS(null, "fill-opacity", style.fillOpacity);
         } else {
             node.setAttributeNS(null, "fill", "none");
         }
 
         if (isStroked) {
-            node.setAttributeNS(null, "stroke", this.style.strokeColor);
-            node.setAttributeNS(null, "stroke-opacity", this.style.strokeOpacity);
-            node.setAttributeNS(null, "stroke-width", this.style.strokeWidth+this.style.strokeUnit);
+            node.setAttributeNS(null, "stroke", style.strokeColor);
+            node.setAttributeNS(null, "stroke-opacity", style.strokeOpacity);
+            node.setAttributeNS(null, "stroke-width", style.strokeWidth+style.strokeUnit);
         } else {
             node.setAttributeNS(null, "stroke", "none");
         }
@@ -387,7 +336,7 @@
         return node;
     },
 
-    _nodeFactory: function(type, id, parent, predecessor) {
+    _nodeFactory: function(type, id) {
         if ($(id)) {
             var node = $(id);
             if (type != node.nodeName) {
@@ -398,7 +347,6 @@
             var node = document.createElementNS(this.svgns, type);
             if (id) {
                 node.setAttributeNS(null, "id", id);
-                //node.setAttributeNS(null, "style", "");
             }
         }
         return node;



More information about the Commits mailing list