Changeset 3043
- Timestamp:
- 04/10/07 12:07:56 (1 year ago)
- Files:
-
- trunk/openlayers/examples/openmnnd.html (modified) (1 diff)
- trunk/openlayers/examples/wfs-scribble.html (modified) (2 diffs)
- trunk/openlayers/examples/wfs-t.html (modified) (3 diffs)
- trunk/openlayers/examples/wkt.html (modified) (1 diff)
- trunk/openlayers/lib/OpenLayers/Control/SelectFeature.js (modified) (7 diffs)
- trunk/openlayers/lib/OpenLayers/Feature/Vector.js (modified) (2 diffs)
- trunk/openlayers/lib/OpenLayers/Format/GML.js (modified) (1 diff)
- trunk/openlayers/lib/OpenLayers/Format/KML.js (modified) (1 diff)
- trunk/openlayers/lib/OpenLayers/Geometry.js (modified) (2 diffs)
- trunk/openlayers/lib/OpenLayers/Handler/Feature.js (modified) (4 diffs)
- trunk/openlayers/lib/OpenLayers/Handler/Path.js (modified) (11 diffs)
- trunk/openlayers/lib/OpenLayers/Handler/Point.js (modified) (10 diffs)
- trunk/openlayers/lib/OpenLayers/Handler/Polygon.js (modified) (7 diffs)
- trunk/openlayers/lib/OpenLayers/Layer/Vector.js (modified) (9 diffs)
- trunk/openlayers/lib/OpenLayers/Renderer.js (modified) (2 diffs)
- trunk/openlayers/lib/OpenLayers/Renderer/Elements.js (modified) (8 diffs)
- trunk/openlayers/lib/OpenLayers/Renderer/SVG.js (modified) (17 diffs)
- trunk/openlayers/lib/OpenLayers/Renderer/VML.js (modified) (15 diffs)
- trunk/openlayers/tests/Feature/test_Vector.html (modified) (1 diff)
- trunk/openlayers/tests/Layer/test_Vector.html (modified) (2 diffs)
- trunk/openlayers/tests/test_Geometry.html (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/openlayers/examples/openmnnd.html
r2978 r3043 100 100 } 101 101 } 102 var displayedGeom = null; 103 function feature_info_hover(geometry) { 104 if(geometry.parent) { 105 geometry = geometry.parent; 106 } 107 if (displayedGeom != geometry && 108 (!geometry.feature.layer.selectedFeatures.length || 109 (geometry.feature.layer.selectedFeatures[0].geometry == geometry))) { 110 feature_info(geometry); 111 displaydGeom = geometry; 102 var displayedFeature = null; 103 function feature_info_hover(feature) { 104 if (displayedFeature != feature && 105 (!feature.layer.selectedFeatures.length || 106 (feature.layer.selectedFeatures[0] == feature))) { 107 feature_info(feature); 108 displayedFeature = feature; 112 109 } 113 110 } 114 function feature_info(geometry) { 115 if(geometry.parent) { 116 geometry = geometry.parent; 117 } 111 function feature_info(feature) { 118 112 var html = "<ul>"; 119 for(var i in geometry.feature.attributes)120 html += "<li><b>" + i + "</b>: "+ geometry.feature.attributes[i] + "</li>";113 for(var i in feature.attributes) 114 html += "<li><b>" + i + "</b>: "+ feature.attributes[i] + "</li>"; 121 115 html += "</ul>"; 122 116 $('feature_info').innerHTML = html; trunk/openlayers/examples/wfs-scribble.html
r2978 r3043 36 36 feature.state = OpenLayers.State.INSERT; 37 37 feature.style['strokeColor'] = "#ff0000"; 38 feature.layer. renderer.drawGeometry(feature.geometry, feature.style);38 feature.layer.drawFeature(feature); 39 39 } 40 40 p.addControls([ new OpenLayers.Control.Navigation(), df ]); … … 48 48 var f = map.layers[1].features[i]; 49 49 f.style['strokeColor'] = '#ee9900'; 50 map.layers[1]. renderer.drawGeometry(f.geometry, f.style);50 map.layers[1].drawFeature(f); 51 51 } 52 52 map.layers[1].commit(); trunk/openlayers/examples/wfs-t.html
r2978 r3043 28 28 extractAttributes: false 29 29 } ); 30 rlayer.onFeatureInsert=function(feature) { feature.style.strokeColor = "#ff0000"; feature.layer. renderer.drawGeometry(feature.geometry, feature.style); }30 rlayer.onFeatureInsert=function(feature) { feature.style.strokeColor = "#ff0000"; feature.layer.drawFeature(feature); } 31 31 map.addLayer(rlayer); 32 32 layer = new OpenLayers.Layer.WFS( "Cities", … … 45 45 feature.state = OpenLayers.State.INSERT; 46 46 feature.style['strokeColor'] = "#0000ff"; 47 feature.layer. renderer.drawGeometry(feature.geometry, feature.style);47 feature.layer.drawFeature(feature); 48 48 } 49 49 dp = new OpenLayers.Control.DrawFeature(layer, OpenLayers.Handler.Point, {handlerOptions: {'freehand': false}, 'displayClass': 'olControlDrawFeaturePoint'}); … … 54 54 feature.state = OpenLayers.State.INSERT; 55 55 feature.style['strokeColor'] = "#0000ff"; 56 feature.layer. renderer.drawGeometry(feature.geometry, feature.style);56 feature.layer.drawFeature(feature); 57 57 } 58 58 p.addControls([ new OpenLayers.Control.Navigation(), df, dp ]); trunk/openlayers/examples/wkt.html
r2992 r3043 78 78 } 79 79 80 function displayWKT( geometry) {81 var str = wkt.write( geometry);80 function displayWKT(feature) { 81 var str = wkt.write(feature.geometry); 82 82 // not a good idea in general, just for this demo 83 83 str = str.replace(/,/g, ', '); trunk/openlayers/lib/OpenLayers/Control/SelectFeature.js
r2978 r3043 28 28 /** 29 29 * @type {Function} Optional function to be called when a feature is selected. 30 * The function should expect to be called with a geometry.30 * The function should expect to be called with a feature. 31 31 */ 32 32 onSelect: function() {}, … … 34 34 /** 35 35 * @type {Function} Optional function to be called when a feature is unselected. 36 * The function should expect to be called with a geometry.36 * The function should expect to be called with a feature. 37 37 */ 38 38 onUnselect: function() {}, … … 77 77 /** 78 78 * Called when the feature handler detects a mouse-down on a feature 79 * @param {OpenLayers. Geometry}79 * @param {OpenLayers.Vector.Feature} 80 80 */ 81 downFeature: function( geometry) {81 downFeature: function(feature) { 82 82 if(this.hover) { 83 83 return; 84 84 } 85 if(geometry.parent) {86 geometry = geometry.parent;87 }88 85 if (this.multiple) { 89 if(OpenLayers.Util.indexOf(this.layer.selectedFeatures, geometry.feature) > -1) {90 this.unselect( geometry);86 if(OpenLayers.Util.indexOf(this.layer.selectedFeatures, feature) > -1) { 87 this.unselect(feature); 91 88 } else { 92 this.select( geometry);89 this.select(feature); 93 90 } 94 91 } else { 95 if(OpenLayers.Util.indexOf(this.layer.selectedFeatures, geometry.feature) > -1) {96 this.unselect( geometry);92 if(OpenLayers.Util.indexOf(this.layer.selectedFeatures, feature) > -1) { 93 this.unselect(feature); 97 94 } else { 98 95 if (this.layer.selectedFeatures) { 99 96 for (var i = 0; i < this.layer.selectedFeatures.length; i++) { 100 this.unselect(this.layer.selectedFeatures[i] .geometry);97 this.unselect(this.layer.selectedFeatures[i]); 101 98 } 102 99 } 103 this.select( geometry);100 this.select(feature); 104 101 } 105 102 } … … 109 106 * Called when the feature handler detects a mouse-over on a feature. 110 107 * Only responds if this.hover is true. 111 * @param {OpenLayers. Geometry}108 * @param {OpenLayers.Feature.Vector} 112 109 */ 113 overFeature: function( geometry) {110 overFeature: function(feature) { 114 111 if(!this.hover) { 115 112 return; 116 113 } 117 if(geometry.parent) { 118 geometry = geometry.parent; 119 } 120 if(!(OpenLayers.Util.indexOf(this.layer.selectedFeatures, geometry.feature) > -1)) { 121 this.select(geometry); 114 if(!(OpenLayers.Util.indexOf(this.layer.selectedFeatures, feature) > -1)) { 115 this.select(feature); 122 116 } 123 117 }, … … 126 120 * Called when the feature handler detects a mouse-out on a feature. 127 121 * Only responds if this.hover is true. 128 * @param {OpenLayers. Geometry}122 * @param {OpenLayers.Feature.Vector} 129 123 */ 130 outFeature: function( geometry) {124 outFeature: function(feature) { 131 125 if(!this.hover) { 132 126 return; 133 127 } 134 if(geometry.parent) { 135 geometry = geometry.parent; 136 } 137 this.unselect(geometry); 128 this.unselect(feature); 138 129 }, 139 130 … … 141 132 * Add feature to the layer's selectedFeature array, render the feature as 142 133 * selected, and call the onSelect function. 143 * @param {OpenLayers. Geometry} geometry134 * @param {OpenLayers.Feature.Vector} feature 144 135 */ 145 select: function( geometry) {136 select: function(feature) { 146 137 // Store feature style for restoration later 147 if( geometry.feature.originalStyle == null) {148 geometry.feature.originalStyle = geometry.feature.style;138 if(feature.originalStyle == null) { 139 feature.originalStyle = feature.style; 149 140 } 150 this.layer.selectedFeatures.push( geometry.feature);151 this.layer. renderer.drawGeometry(geometry, this.selectStyle);152 this.onSelect( geometry);141 this.layer.selectedFeatures.push(feature); 142 this.layer.drawFeature(feature, this.selectStyle); 143 this.onSelect(feature); 153 144 }, 154 145 … … 156 147 * Remove feature from the layer's selectedFeature array, render the feature as 157 148 * normal, and call the onUnselect function. 158 * @param {OpenLayers. Geometry} geometry149 * @param {OpenLayers.Feature.Vector} feature 159 150 */ 160 unselect: function( geometry) {151 unselect: function(feature) { 161 152 // Store feature style for restoration later 162 if( geometry.feature.originalStyle == null) {163 geometry.feature.originalStyle = geometry.feature.style;153 if(feature.originalStyle == null) { 154 feature.originalStyle = feature.style; 164 155 } 165 this.layer. renderer.drawGeometry(geometry, geometry.feature.originalStyle);166 OpenLayers.Util.removeItem(this.layer.selectedFeatures, geometry.feature);167 this.onUnselect( geometry);156 this.layer.drawFeature(feature, feature.originalStyle); 157 OpenLayers.Util.removeItem(this.layer.selectedFeatures, feature); 158 this.onUnselect(feature); 168 159 }, 169 160 trunk/openlayers/lib/OpenLayers/Feature/Vector.js
r3040 r3043 47 47 OpenLayers.Feature.prototype.initialize.apply(this, [null, null, data]); 48 48 this.lonlat = null; 49 this. setGeometry(geometry);49 this.geometry = geometry; 50 50 this.state = null; 51 51 if (data) { … … 124 124 createPopup: function() { 125 125 return null; 126 },127 128 /**129 * Set a feature id to the feature130 *131 * @param {String} feature id to set132 */133 setFid: function(fid) {134 this.fid = fid;135 },136 137 /**138 * Set a geometry to the feature139 *140 * @param {OpenLayers.Geometry} geometry to set141 * @param {Boolean} recurse Recursively set feature (for components)142 */143 setGeometry: function(geometry, recurse) {144 if(geometry) {145 this.geometry = geometry;146 this.geometry.feature = this;147 if (recurse != false) {148 this._setGeometryFeatureReference(this.geometry, this);149 }150 }151 },152 153 /**154 * Sets recursively the reference to the feature in the geometry155 *156 * @param {OpenLayers.Geometry}157 * @param {OpenLayers.Feature}158 */159 _setGeometryFeatureReference: function(geometry, feature) {160 geometry.feature = feature;161 if (geometry.components) {162 for (var i = 0; i < geometry.components.length; i++) {163 this._setGeometryFeatureReference(geometry.components[i], feature);164 }165 }166 },167 168 /**169 * Adds attributes an attributes object to the feature.170 * (should not be in geometry but in feature class)171 *172 * @param {Attributes} attributes173 */174 setAttributes: function(attributes) {175 this.attributes=attributes;176 126 }, 177 127 trunk/openlayers/lib/OpenLayers/Format/GML.js
r2978 r3043 166 166 } 167 167 168 feature. setGeometry(geom, false);168 feature.geometry = geom; 169 169 if (this.extractAttributes) { 170 170 feature.attributes = this.parseAttributes(xmlNode); trunk/openlayers/lib/OpenLayers/Format/KML.js
r2978 r3043 81 81 } 82 82 83 feature. setGeometry(geom);83 feature.geometry = geom; 84 84 feature.attributes = this.parseAttributes(xmlNode); 85 85 trunk/openlayers/lib/OpenLayers/Geometry.js
r2997 r3043 20 20 /** @type OpenLayers.Bounds */ 21 21 bounds: null, 22 23 /**24 * Cross reference back to the feature that owns this geometry so25 * that that the feature can be identified after the geometry has been26 * selected by a mouse click.27 *28 * @type OpenLayers.Feature */29 feature: null,30 22 31 23 /** … … 43 35 44 36 this.bounds = null; 45 this.feature = null;46 37 47 38 }, trunk/openlayers/lib/OpenLayers/Handler/Feature.js
r2978 r3043 22 22 23 23 /** 24 * @type {OpenLayers. Geometry}24 * @type {OpenLayers.Feature.Vector} 25 25 */ 26 geometry: null,26 feature: null, 27 27 28 28 /** … … 34 34 * a function to be called when the mouse is over 35 35 * a feature. The callback should expect to recieve 36 * a single argument, the geometry.36 * a single argument, the feature. 37 37 * @param {Object} options 38 38 */ … … 76 76 /** 77 77 * Capture double-clicks. Let the event continue propagating if the 78 * double-click doesn't hit a geometry. Otherwise call the dblclick78 * double-click doesn't hit a feature. Otherwise call the dblclick 79 79 * callback. 80 80 * … … 93 93 */ 94 94 select: function(type, evt) { 95 var geometry = this.layer.renderer.getGeometryFromEvent(evt);96 if( geometry) {95 var feature = this.layer.getFeatureFromEvent(evt); 96 if(feature) { 97 97 // three cases: 98 98 // over a new, out of the last and over a new, or still on the last 99 if(!this. geometry) {100 // over a new geometry101 this.callback('over', [ geometry]);102 } else if(this. geometry != geometry) {99 if(!this.feature) { 100 // over a new feature 101 this.callback('over', [feature]); 102 } else if(this.feature != feature) { 103 103 // out of the last and over a new 104 this.callback('out', [this. geometry]);105 this.callback('over', [ geometry]);104 this.callback('out', [this.feature]); 105 this.callback('over', [feature]); 106 106 } 107 this. geometry = geometry;108 this.callback(type, [ geometry]);107 this.feature = feature; 108 this.callback(type, [feature]); 109 109 return true; 110 110 } else { 111 if(this. geometry) {111 if(this.feature) { 112 112 // out of the last 113 this.callback('out', [this. geometry]);114 this. geometry= null;113 this.callback('out', [this.feature]); 114 this.feature = null; 115 115 } 116 116 return false; trunk/openlayers/lib/OpenLayers/Handler/Path.js
r2943 r3043 18 18 19 19 /** 20 * @type OpenLayers. Geometry.LineString20 * @type OpenLayers.Feature.Vector 21 21 * @private 22 22 */ … … 66 66 * Add temporary geometries 67 67 */ 68 createGeometry: function() { 69 this.line = new OpenLayers.Geometry.LineString(); 70 this.point = new OpenLayers.Geometry.Point(); 68 createFeature: function() { 69 this.line = new OpenLayers.Feature.Vector( 70 new OpenLayers.Geometry.LineString()); 71 this.point = new OpenLayers.Feature.Vector( 72 new OpenLayers.Geometry.Point()); 71 73 }, 72 74 … … 74 76 * Destroy temporary geometries 75 77 */ 76 destroy Geometry: function() {78 destroyFeature: function() { 77 79 this.line.destroy(); 78 80 this.point.destroy(); … … 84 86 */ 85 87 addPoint: function() { 86 this.line.addComponent(this.point.clone(), this.line.components.length); 88 this.line.geometry.addComponent(this.point.geometry.clone(), 89 this.line.geometry.components.length); 90 this.callback("point", [this.point.geometry]); 87 91 }, 88 92 … … 101 105 * 102 106 */ 103 modify Geometry: function() {104 var index = this.line. components.length - 1;105 this.line. components[index].x = this.point.x;106 this.line. components[index].y = this.point.y;107 modifyFeature: function() { 108 var index = this.line.geometry.components.length - 1; 109 this.line.geometry.components[index].x = this.point.geometry.x; 110 this.line.geometry.components[index].y = this.point.geometry.y; 107 111 }, 108 112 … … 110 114 * Render geometries on the temporary layer. 111 115 */ 112 draw Geometry: function() {113 this.layer. renderer.drawGeometry(this.line, this.style);114 this.layer. renderer.drawGeometry(this.point, this.style);116 drawFeature: function() { 117 this.layer.drawFeature(this.line, this.style); 118 this.layer.drawFeature(this.point, this.style); 115 119 }, 116 120 … … 121 125 */ 122 126 geometryClone: function() { 123 return this.line. clone();127 return this.line.geometry.clone(); 124 128 }, 125 129 … … 137 141 } 138 142 if(this.lastDown == null) { 139 this.create Geometry();143 this.createFeature(); 140 144 } 141 145 this.mouseDown = true; 142 146 this.lastDown = evt.xy; 143 147 var lonlat = this.control.map.getLonLatFromPixel(evt.xy); 144 this.point. x = lonlat.lon;145 this.point. y = lonlat.lat;148 this.point.geometry.x = lonlat.lon; 149 this.point.geometry.y = lonlat.lat; 146 150 if((this.lastUp == null) || !this.lastUp.equals(evt.xy)) { 147 151 this.addPoint(); 148 152 } 149 this.draw Geometry();153 this.drawFeature(); 150 154 this.drawing = true; 151 155 return false; … … 162 166 if(this.drawing) { 163 167 var lonlat = this.map.getLonLatFromPixel(evt.xy); 164 this.point. x = lonlat.lon;165 this.point. y = lonlat.lat;168 this.point.geometry.x = lonlat.lon; 169 this.point.geometry.y = lonlat.lat; 166 170 if(this.mouseDown && this.freehandMode(evt)) { 167 171 this.addPoint(); 168 172 } else { 169 this.modify Geometry();173 this.modifyFeature(); 170 174 } 171 this.draw Geometry();175 this.drawFeature(); 172 176 } 173 177 return true; … … 191 195 } 192 196 this.lastUp = evt.xy; 193 this.callback("point", [this.point]);194 197 } 195 198 return false; … … 206 209 dblclick: function(evt) { 207 210 if(!this.freehandMode(evt)) { 208 var index = this.line. components.length - 1;209 this.line. removeComponent(this.line.components[index]);210 this.finalize( this.line);211 var index = this.line.geometry.components.length - 1; 212 this.line.geometry.removeComponent(this.line.geometry.components[index]); 213 this.finalize(); 211 214 } 212 215 return false; trunk/openlayers/lib/OpenLayers/Handler/Point.js
r2943 r3043 17 17 18 18 /** 19 * @type OpenLayers. Geometry.Point19 * @type OpenLayers.Feature.Vector 20 20 * @private 21 21 */ … … 88 88 89 89 /** 90 * Add temporary geometries 91 */ 92 createGeometry: function() { 93 this.point = new OpenLayers.Geometry.Point(); 90 * Add temporary features 91 */ 92 createFeature: function() { 93 this.point = new OpenLayers.Feature.Vector( 94 new OpenLayers.Geometry.Point()); 94 95 }, 95 96 … … 113 114 * Destroy the temporary geometries 114 115 */ 115 destroy Geometry: function() {116 destroyFeature: function() { 116 117 this.point.destroy(); 117 118 }, … … 123 124 this.layer.renderer.clear(); 124 125 this.callback("done", [this.geometryClone()]); 125 this.destroy Geometry();126 this.destroyFeature(); 126 127 this.drawing = false; 127 128 this.mouseDown = false; … … 136 137 this.layer.renderer.clear(); 137 138 this.callback("cancel", [this.geometryClone()]); 138 this.destroy Geometry();139 this.destroyFeature(); 139 140 this.drawing = false; 140 141 this.mouseDown = false; … … 152 153 153 154 /** 154 * Render geometries on the temporary layer.155 */ 156 draw Geometry: function() {157 this.layer. renderer.drawGeometry(this.point, this.style);155 * Render features on the temporary layer. 156 */ 157 drawFeature: function() { 158 this.layer.drawFeature(this.point, this.style); 158 159 }, 159 160 … … 164 165 */ 165 166 geometryClone: function() { 166 return this.point. clone();167 return this.point.geometry.clone(); 167 168 }, 168 169 … … 184 185 } 185 186 if(this.lastDown == null) { 186 this.create Geometry();187 this.createFeature(); 187 188 } 188 189 this.lastDown = evt.xy; 189 190 this.drawing = true; 190 191 var lonlat = this.map.getLonLatFromPixel(evt.xy); 191 this.point. x = lonlat.lon;192 this.point. y = lonlat.lat;193 this.draw Geometry();192 this.point.geometry.x = lonlat.lon; 193 this.point.geometry.y = lonlat.lat; 194 this.drawFeature(); 194 195 return false; 195 196 }, … … 205 206 if(this.drawing) { 206 207 var lonlat = this.map.getLonLatFromPixel(evt.xy); 207 this.point. x = lonlat.lon;208 this.point. y = lonlat.lat;209 this.draw Geometry();208 this.point.geometry.x = lonlat.lon; 209 this.point.geometry.y = lonlat.lat; 210 this.drawFeature(); 210 211 } 211 212 return true; … … 221 222 mouseup: function (evt) { 222 223 if(this.drawing) { 223 this.finalize( this.point);224 this.finalize(); 224 225 return false; 225 226 } else { trunk/openlayers/lib/OpenLayers/Handler/Polygon.js
r2943 r3043 17 17 18 18 /** 19 * @type OpenLayers. Geometry.Polygon19 * @type OpenLayers.Feature.Vector 20 20 * @private 21 21 */ … … 45 45 * Add temporary geometries 46 46 */ 47 createGeometry: function() { 48 this.polygon = new OpenLayers.Geometry.Polygon(); 49 this.line = new OpenLayers.Geometry.LinearRing(); 50 this.polygon.addComponent(this.line); 51 this.point = new OpenLayers.Geometry.Point(); 47 createFeature: function() { 48 this.polygon = new OpenLayers.Feature.Vector( 49 new OpenLayers.Geometry.Polygon()); 50 this.line = new OpenLayers.Feature.Vector( 51 new OpenLayers.Geometry.LinearRing()); 52 this.polygon.geometry.addComponent(this.line.geometry); 53 this.point = new OpenLayers.Feature.Vector( 54 new OpenLayers.Geometry.Point()); 52 55 }, 53 56 … … 55 58 * Destroy temporary geometries 56 59 */ 57 destroy Geometry: function() {60 destroyFeature: function() { 58 61 this.polygon.destroy(); 59 62 this.point.destroy(); … … 64 67 * 65 68 */ 66 modify Geometry: function() {67 var index = this.line. components.length - 2;68 this.line. components[index].x = this.point.x;69 this.line. components[index].y = this.point.y;69 modifyFeature: function() { 70 var index = this.line.geometry.components.length - 2; 71 this.line.geometry.components[index].x = this.point.geometry.x; 72 this.line.geometry.components[index].y = this.point.geometry.y; 70 73 }, 71 74 … … 73 76 * Render geometries on the temporary layer. 74 77 */ 75 draw Geometry: function() {76 this.layer. renderer.drawGeometry(this.polygon, this.style);77 this.layer. renderer.drawGeometry(this.point, this.style);78 drawFeature: function() { 79 this.layer.drawFeature(this.polygon, this.style); 80 this.layer.drawFeature(this.point, this.style); 78 81 }, 79 82 … … 84 87 */ 85 88 geometryClone: function() { 86 return this.polygon. clone();89 return this.polygon.geometry.clone(); 87 90 }, 88 91 … … 96 99 if(!this.freehandMode(evt)) { 97 100 // remove the penultimate point 98 var index = this.line. components.length - 2;99 this.line. removeComponent(this.line.components[index]);100 this.finalize( this.line);101 var index = this.line.geometry.components.length - 2; 102 this.line.geometry.removeComponent(this.line.geometry.components[index]); 103 this.finalize(); 101 104 } 102 105 return false; trunk/openlayers/lib/OpenLayers/Layer/Vector.js
r3036 r3043 22 22 isVector: true, 23 23 24 /** @type {Array(OpenLayer.Feature.Vector)}*/24 /** @type Array(OpenLayer.Feature.Vector) */ 25 25 features: null, 26 26 27 /** @type {Array(OpenLayers.Feature.Vector)}*/27 /** @type Array(OpenLayers.Feature.Vector) */ 28 28 selectedFeatures: [], 29 30 /** @type {Boolean} */31 editing: false,32 33 /** @type {Boolean} */34 editable: false,35 29 36 30 /** @type {Boolean} */ … … 76 70 */ 77 71 initialize: function(name, options) { 72 this.style = OpenLayers.Util.extend({}, OpenLayers.Feature.Vector.style['default']); 78 73 OpenLayers.Layer.prototype.initialize.apply(this, arguments); 79 74 … … 103 98 this.features = null; 104 99 this.selectedFeatures = null; 105 this.editing = null;106 this.editable = null;107 100 if (this.renderer) { 108 101 this.renderer.destroy(); … … 173 166 * the map. Notify the renderer of the change of extent, and in the 174 167 * case of a change of zoom level (resolution), have the 175 * renderer re project.168 * renderer redraw features. 176 169 * 177 170 * If the layer has not yet been drawn, cycle through the layer's … … 192 185 } 193 186 194 if (zoomChanged) { 195 this.renderer.reproject(); 196 } 197 198 if (!this.drawn) { 187 if (!this.drawn || zoomChanged) { 199 188 this.drawn = true; 200 189 for(var i = 0; i < this.features.length; i++) { 201 190 var feature = this.features[i]; 202 this. renderer.drawGeometry(feature.geometry, feature.style);191 this.drawFeature(feature); 203 192 } 204 193 } … … 229 218 230 219 if (!feature.style) { 231 if (this.style) { 232 feature.style = OpenLayers.Util.extend({}, this.style); 233 } else { 234 feature.style = OpenLayers.Util.extend({}, OpenLayers.Feature.Vector.style['default']); 235 } 220 feature.style = OpenLayers.Util.extend({}, this.style); 236 221 } 237 222 … … 239 224 240 225 if (this.drawn) { 241 this. renderer.drawGeometry(feature.geometry, feature.style);226 this.drawFeature(feature); 242 227 } 243 228 … … 272 257 273 258 /** 274 * @param {String} fid 259 * Draw (or redraw) a feature on the layer. If the optional style argument 260 * is included, this style will be used. If no style is included, the 261 * feature's style will be used. If the feature doesn't have a style, 262 * the layer's style will be used. 263 * 264 * @param {OpenLayers.Feature.Vector} feature 275 265 * @param {Object} style 276 266 */ 277 redrawFeature: function(fid, style) { 278 for (var i = 0; i < this.features.length; i++) { 279 var feature = this.features[i]; 280 if (feature.fid == fid) { 281 this.renderer.drawGeometry(feature.geometry, style); 282 } 283 } 284 }, 285 286 /** 287 * Start editing the layer 288 * 289 * @returns Whether or not the layer is editable 290 * @type Boolean 291 */ 292 unlock: function() { 293 if(this.editable) { 294 this.editing = true; 295 } 296 return this.editable; 297 }, 298 299 /** 300 * Stop editing the layer 301 * 302 * @return Whether or not the layer *was* editing 303 * HACK HACK This return value seems wierd to me. 304 * @type Boolean 305 */ 306 lock: function() { 307 if(this.editing) { 308 this.editing = false; 309 } 310 return this.editing; 311 }, 312 267 drawFeature: function(feature, style) { 268 if(style == null) { 269 if(feature.style) { 270 style = feature.style; 271 } else { 272 style = this.style; 273 } 274 } 275 this.renderer.drawFeature(feature, style); 276 }, 277 278 /** 279 * Given an event, return a feature if the event occurred over one. 280 * Otherwise, return null. 281 * 282 * @param {Event} 283 * @type OpenLayers.Feature.Vector 284 * @return A feature if one was under the event 285 */ 286 getFeatureFromEvent: function(evt) { 287 var featureId = this.renderer.getFeatureIdFromEvent(evt); 288 return this.getFeatureById(featureId); 289 }, 290 291 /** 292 * Given a feature id, return the feature if it exists in the features array 293 * 294 * @param String featureId 295 * @type OpenLayers.Feature.Vector 296 * @return A feature corresponding to the given featureId 297 */ 298 getFeatureById: function(featureId) { 299 //TBD - would it be more efficient to use a hash for this.features? 300 var feature = null; 301  
