Ticket #628: no.more.geometry.feature.patch
| File no.more.geometry.feature.patch, 53.2 kB (added by tschaub, 1 year ago) |
|---|
-
examples/openmnnd.html
old new 99 99 } 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; 123 117 } -
examples/wfs-scribble.html
old new 35 35 df.featureAdded = function(feature) { 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 ]); 41 41 … … 47 47 for(var i = 0; i < map.layers[1].features.length; i++) { 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(); 53 53 return false; -
examples/wfs-t.html
old new 27 27 featureNS: 'http://www.openplans.org/topp', 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", 33 33 "http://dev.openlayers.org/geoserver/wfs", {typename: 'topp:tasmania_cities'}, … … 44 44 df.featureAdded = function(feature) { 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'}); 50 50 dp.featureAdded = function(feature) { … … 53 53 feature.geometry = new OpenLayers.Geometry.MultiPoint(oldgeom); 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 ]); 59 59 -
examples/wkt.html
old new 77 77 } 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, ', '); 84 84 document.getElementById('info').innerHTML = str; -
lib/OpenLayers/Control/SelectFeature.js
old new 27 27 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() {}, 33 33 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() {}, 39 39 … … 76 76 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 } 106 103 }, … … 108 105 /** 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;114 if(!(OpenLayers.Util.indexOf(this.layer.selectedFeatures, feature) > -1)) { 115 this.select(feature); 119 116 } 120 if(!(OpenLayers.Util.indexOf(this.layer.selectedFeatures, geometry.feature) > -1)) {121 this.select(geometry);122 }123 117 }, 124 118 125 119 /** 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 140 131 /** 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 155 146 /** 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 170 161 /** Set the map property for the control. -
lib/OpenLayers/Feature/Vector.js
old new 46 46 initialize: function(geometry, data, style) { 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) { 52 52 OpenLayers.Util.extend(this.attributes, data); … … 126 126 }, 127 127 128 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 },177 178 /**179 129 * @param {OpenLayers.LonLat} lonlat 180 130 * @param {float} toleranceLon Optional tolerance in Geometric Coords 181 131 * @param {float} toleranceLat Optional tolerance in Geographic Coords -
lib/OpenLayers/Format/GML.js
old new 165 165 } 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); 171 171 } -
lib/OpenLayers/Format/KML.js
old new 80 80 } 81 81 } 82 82 83 feature. setGeometry(geom);83 feature.geometry = geom; 84 84 feature.attributes = this.parseAttributes(xmlNode); 85 85 86 86 return feature; -
lib/OpenLayers/Geometry.js
old new 19 19 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 /** 32 24 * @constructor … … 42 34 this.id = null; 43 35 44 36 this.bounds = null; 45 this.feature = null;46 37 47 38 }, 48 39 -
lib/OpenLayers/Handler/Feature.js
old new 21 21 layerIndex: null, 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 /** 29 29 * @constructor … … 33 33 * @param {Array} callbacks An object with a 'over' property whos value is 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 */ 39 39 initialize: function(control, layer, callbacks, options) { … … 75 75 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 * 81 81 * @param {Event} evt … … 92 92 * @type {Boolean} A feature was selected 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; 117 117 } -
lib/OpenLayers/Handler/Path.js
old new 17 17 OpenLayers.Class.inherit(OpenLayers.Handler.Point, { 18 18 19 19 /** 20 * @type OpenLayers. Geometry.LineString20 * @type OpenLayers.Feature.Vector 21 21 * @private 22 22 */ 23 23 line: null, … … 65 65 /** 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 73 75 /** 74 76 * Destroy temporary geometries 75 77 */ 76 destroy Geometry: function() {78 destroyFeature: function() { 77 79 this.line.destroy(); 78 80 this.point.destroy(); 79 81 }, … … 83 85 * the behavior of LinearRing that disregards adding duplicate points. 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 89 93 /** … … 100 104 * Modify the existing geometry given the new point 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 109 113 /** 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 117 121 /** … … 120 124 * @type OpenLayers.Geometry.LineString 121 125 */ 122 126 geometryClone: function() { 123 return this.line. clone();127 return this.line.geometry.clone(); 124 128 }, 125 129 126 130 /** … … 136 140 return false; 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; 152 156 }, … … 161 165 mousemove: function (evt) { 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; 174 178 }, … … 190 194 this.addPoint(); 191 195 } 192 196 this.lastUp = evt.xy; 193 this.callback("point", [this.point]);194 197 } 195 198 return false; 196 199 } … … 205 208 */ 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; 213 216 }, -
lib/OpenLayers/Handler/Point.js
old new 16 16 OpenLayers.Class.inherit(OpenLayers.Handler, { 17 17 18 18 /** 19 * @type OpenLayers. Geometry.Point19 * @type OpenLayers.Feature.Vector 20 20 * @private 21 21 */ 22 22 point: null, … … 87 87 }, 88 88 89 89 /** 90 * Add temporary geometries90 * Add temporary features 91 91 */ 92 createGeometry: function() { 93 this.point = new OpenLayers.Geometry.Point(); 92 createFeature: function() { 93 this.point = new OpenLayers.Feature.Vector( 94 new OpenLayers.Geometry.Point()); 94 95 }, 95 96 96 97 /** … … 112 113 /** 113 114 * Destroy the temporary geometries 114 115 */ 115 destroy Geometry: function() {116 destroyFeature: function() { 116 117 this.point.destroy(); 117 118 }, 118 119 … … 122 123 finalize: function() { 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; 128 129 this.lastDown = null; … … 135 136 cancel: function() { 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; 141 142 this.lastDown = null; … … 151 152 }, 152 153 153 154 /** 154 * Render geometries on the temporary layer.155 * Render features on the temporary layer. 155 156 */ 156 draw Geometry: function() {157 this.layer. renderer.drawGeometry(this.point, this.style);157 drawFeature: function() { 158 this.layer.drawFeature(this.point, this.style); 158 159 }, 159 160 160 161 /** … … 163 164 * @type OpenLayers.Geometry.Point 164 165 */ 165 166 geometryClone: function() { 166 return this.point. clone();167 return this.point.geometry.clone(); 167 168 }, 168 169 169 170 /** … … 183 184 return true; 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 }, 196 197 … … 204 205 mousemove: function (evt) { 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; 212 213 }, … … 220 221 */ 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 { 226 227 return true; -
lib/OpenLayers/Handler/Polygon.js
old new 16 16 OpenLayers.Class.inherit(OpenLayers.Handler.Path, { 17 17 18 18 /** 19 * @type OpenLayers. Geometry.Polygon19 * @type OpenLayers.Feature.Vector 20 20 * @private 21 21 */ 22 22 polygon: null, … … 44 44 /** 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 54 57 /** 55 58 * Destroy temporary geometries 56 59 */ 57 destroy Geometry: function() {60 destroyFeature: function() { 58 61 this.polygon.destroy(); 59 62 this.point.destroy(); 60 63 }, … … 63 66 * Modify the existing geometry given the new point 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 72 75 /** 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 80 83 /** … … 83 86 * @type OpenLayers.Geometry.Polygon 84 87 */ 85 88 geometryClone: function() { 86 return this.polygon. clone();89 return this.polygon.geometry.clone(); 87 90 }, 88 91 89 92 /** … … 95 98 dblclick: function(evt) { 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; 103 106 }, -
lib/OpenLayers/Layer/Vector.js
old new 21 21 /** @type Boolean */ 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 29 30 30 /** @type {Boolean} */ 31 editing: false,32 33 /** @type {Boolean} */34 editable: false,35 36 /** @type {Boolean} */37 31 reportError: true, 38 32 39 33 /** @type {Object} */ … … 75 69 * Options renderer {Object}: Typically SVGRenderer or VMLRenderer. 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 80 75 // allow user-set renderer, otherwise assign one … … 102 97 // calling feature[i].destroy() here. 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(); 109 102 } … … 172 165 /** Reset the vector layer's div so that it once again is lined up with 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 178 171 * features and draw each one. … … 191 184 this.renderer.setExtent(extent); 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 } 205 194 }, … … 228 217 feature.layer = this; 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 238 223 this.preFeatureInsert(feature); 239 224 240 225 if (this.drawn) { 241 this. renderer.drawGeometry(feature.geometry, feature.style);226 this.drawFeature(feature); 242 227 } 243 228 244 229 this.onFeatureInsert(feature); … … 271 256 }, 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); 267 drawFeature: function(feature, style) { 268 if(style == null) { 269 if(feature.style) { 270 style = feature.style; 271 } else { 272 style = this.style; 282 273 } 283 274 } 275 this.renderer.drawFeature(feature, style); 284 276 }, 285 277 286 278 /** 287 * Start editing the layer 288 * 289 * @returns Whether or not the layer is editable 290 * @type Boolean 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 291 285 */ 292 unlock: function() { 293 if(this.editable) { 294 this.editing = true; 295 } 296 return this.editable; 286 getFeatureFromEvent: function(evt) { 287 var featureId = this.renderer.getFeatureIdFromEvent(evt); 288 return this.getFeatureById(featureId); 297 289 }, 298 290 299 291 /** 300 * Stop editing the layer292 * Given a feature id, return the feature if it exists in the features array 301 293 * 302 * @ return Whether or not the layer *was* editing303 * HACK HACK This return value seems wierd to me.304 * @ type Boolean294 * @param String featureId 295 * @type OpenLayers.Feature.Vector 296 * @return A feature corresponding to the given featureId 305 297 */ 306 lock: function() { 307 if(this.editing) { 308 this.editing = false; 298 getFeatureById: function(featureId) { 299 //TBD - would it be more efficient to use a hash for this.features? 300 var feature = null; 301 for(var i=0; i<this.features.length; ++i) { 302 if(this.features[i].id == featureId) { 303 feature = this.features[i]; 304 break; 305 } 309 306 } 310 return this.editing;307 return feature; 311 308 }, 312 309 313 310 /** 314 311 * Unselect the selected features 315 312 * i.e. clears the featureSelection array … … 319 316 var vectorLayer = this.map.vectorLayer; 320 317 for (var i = 0; i < this.map.featureSelection.length; i++) { 321 318 var featureSelection = this.map.featureSelection[i]; 322 vectorLayer.renderer.drawGeometry(featureSelection.geometry, 323 vectorLayer.style); 319 vectorLayer.drawFeature(featureSelection, vectorLayer.style); 324 320 } 325 321 this.map.featureSelection = []; 326 322 }, -
lib/OpenLayers/Renderer.js
old new 107 107 }, 108 108 109 109 /** 110 * Draw the feature. The optional style argument can be used 111 * to override the feature's own style. This method should only 112 * be called from layer.drawFeature(). Implemented by a renderer 113 * subclass. 114 * 115 * @param {OpenLayers.Feature.Vector} feature 116 * @param {Object} style 117 */ 118 drawFeature: function(feature, style) {}, 119 <
