filter on snapping target does not work for all filter types, r=ahocevar (closes #3468)

git-svn-id: http://svn.openlayers.org/trunk/openlayers@12255 dc9f47b5-9b13-0410-9fdd-eb0c1a62fdaf
This commit is contained in:
bartvde
2011-08-17 13:47:08 +00:00
parent 74af61d898
commit 85455619ec
2 changed files with 51 additions and 1 deletions

View File

@@ -476,7 +476,7 @@ OpenLayers.Control.Snapping = OpenLayers.Class(OpenLayers.Control, {
feature = features[i];
if(feature !== this.feature && !feature._sketch &&
feature.state !== OpenLayers.State.DELETE &&
(!target.filter || target.filter.evaluate(feature.attributes))) {
(!target.filter || target.filter.evaluate(feature))) {
if(feature.atPoint(ll, maxTolerance, maxTolerance)) {
for(var j=0, stop=Math.min(result.rank+1, numTypes); j<stop; ++j) {
type = this.precedence[j];

View File

@@ -236,6 +236,56 @@
map.destroy();
}
function test_filter(t) {
t.plan(3);
var map = new OpenLayers.Map("map", {
resolutions: [1],
maxExtent: new OpenLayers.Bounds(0, 0, 100, 100)
});
var layer1 = new OpenLayers.Layer.Vector(null, {
isBaseLayer: true
});
var f1 = new OpenLayers.Feature.Vector(OpenLayers.Geometry.fromWKT(
"LINESTRING(0 0, 10 10, 20 20, 30 30)"
), {foo: 'bar'});
f1.fid = "FID1";
var f2 = new OpenLayers.Feature.Vector(OpenLayers.Geometry.fromWKT(
"LINESTRING(11 10, 20 10, 30 10)"
), {foo: 'bar'});
f2.fid = "FID2";
layer1.addFeatures([f1, f2]);
map.addLayers([layer1]);
map.zoomToMaxExtent();
var control = new OpenLayers.Control.Snapping({
layer: layer1,
targets: [layer1],
defaults: {tolerance: 4}
});
control.activate();
var result;
var loc = new OpenLayers.Geometry.Point(1, 1);
control.setTargets([{layer: layer1}]);
result = control.testTarget(control.targets[0], loc);
t.ok(result !== null, "target is eligible without a filter set");
var filter = new OpenLayers.Filter.Logical({
type: OpenLayers.Filter.Logical.NOT,
filters: [
new OpenLayers.Filter.FeatureId({fids: ["FID1", "FID2"]})
]
});
control.setTargets([{layer: layer1, filter: filter}]);
result = control.testTarget(control.targets[0], loc);
t.ok(result === null, "target is not eligible with a filter set which excludes the target's features");
filter = new OpenLayers.Filter.Comparison({type: OpenLayers.Filter.Comparison.NOT_EQUAL_TO, value: 'bar', property: 'foo'});
control.setTargets([{layer: layer1, filter: filter}]);
result = control.testTarget(control.targets[0], loc);
t.ok(result === null, "target is not eligible with a filter set which excludes the target's features using a comparison filter");
}
function test_snapping(t) {