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];
|
feature = features[i];
|
||||||
if(feature !== this.feature && !feature._sketch &&
|
if(feature !== this.feature && !feature._sketch &&
|
||||||
feature.state !== OpenLayers.State.DELETE &&
|
feature.state !== OpenLayers.State.DELETE &&
|
||||||
(!target.filter || target.filter.evaluate(feature.attributes))) {
|
(!target.filter || target.filter.evaluate(feature))) {
|
||||||
if(feature.atPoint(ll, maxTolerance, maxTolerance)) {
|
if(feature.atPoint(ll, maxTolerance, maxTolerance)) {
|
||||||
for(var j=0, stop=Math.min(result.rank+1, numTypes); j<stop; ++j) {
|
for(var j=0, stop=Math.min(result.rank+1, numTypes); j<stop; ++j) {
|
||||||
type = this.precedence[j];
|
type = this.precedence[j];
|
||||||
|
|||||||
@@ -236,6 +236,56 @@
|
|||||||
map.destroy();
|
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) {
|
function test_snapping(t) {
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user