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:
@@ -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];
|
||||
|
||||
@@ -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) {
|
||||
|
||||
|
||||
Reference in New Issue
Block a user